Fix AppSearchSessionCtsTest.
aosp/1795794 added a new api that will only be functional for the
Platform Backend on T+. This allows the test to assert the difference in
behavior.
Bug: 195720764
Test: AppSearchSessionCtsTest
Change-Id: Ic01d7b78524596ef54e7a934c7641df8133919c6
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
index 4714ef6..06a54f0 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionCtsTestBase.java
@@ -16,6 +16,8 @@
package androidx.appsearch.cts.app;
+import static android.os.Build.VERSION_CODES;
+
import static androidx.appsearch.app.AppSearchResult.RESULT_INVALID_SCHEMA;
import static androidx.appsearch.app.AppSearchResult.RESULT_NOT_FOUND;
import static androidx.appsearch.testutil.AppSearchTestUtils.checkIsBatchResultSuccess;
@@ -81,6 +83,9 @@
protected abstract ListenableFuture<AppSearchSession> createSearchSession(
@NonNull String dbName, @NonNull ExecutorService executor);
+ // Returns the Android version that the current instance of AppSearchSession is based on.
+ protected abstract int getAppSearchApiTarget();
+
@Before
public void setUp() throws Exception {
Context context = ApplicationProvider.getApplicationContext();
@@ -1880,12 +1885,21 @@
assertThat(matchInfo.getExactMatchRange()).isEqualTo(
new SearchResult.MatchRange(/*lower=*/29, /*upper=*/32));
assertThat(matchInfo.getExactMatch()).isEqualTo("foo");
- assertThat(matchInfo.getSubmatchRange()).isEqualTo(
- new SearchResult.MatchRange(/*lower=*/29, /*upper=*/31));
- assertThat(matchInfo.getSubmatch()).isEqualTo("fo");
assertThat(matchInfo.getSnippetRange()).isEqualTo(
new SearchResult.MatchRange(/*lower=*/26, /*upper=*/33));
assertThat(matchInfo.getSnippet()).isEqualTo("is foo.");
+
+ if (getAppSearchApiTarget() <= VERSION_CODES.S) {
+ // Submatch is not support on any backend that targets a platform S or lower.
+ assertThat(matchInfo.getSubmatchRange()).isEqualTo(
+ new SearchResult.MatchRange(/*lower=*/0, /*upper=*/0));
+ assertThat(matchInfo.getSubmatch().length()).isEqualTo(0);
+ } else {
+ // Submatch is enabled on any backend that targets a platform beyond S.
+ assertThat(matchInfo.getSubmatchRange()).isEqualTo(
+ new SearchResult.MatchRange(/*lower=*/29, /*upper=*/31));
+ assertThat(matchInfo.getSubmatch()).isEqualTo("fo");
+ }
}
@Test
@@ -2008,9 +2022,18 @@
assertThat(matchInfo.getExactMatchRange()).isEqualTo(
new SearchResult.MatchRange(/*lower=*/44, /*upper=*/45));
assertThat(matchInfo.getExactMatch()).isEqualTo("は");
- assertThat(matchInfo.getSubmatchRange()).isEqualTo(
- new SearchResult.MatchRange(/*lower=*/44, /*upper=*/45));
- assertThat(matchInfo.getSubmatch()).isEqualTo("は");
+
+ if (getAppSearchApiTarget() <= VERSION_CODES.S) {
+ // Submatch is not support on any backend that targets a platform S or lower.
+ assertThat(matchInfo.getSubmatchRange()).isEqualTo(
+ new SearchResult.MatchRange(/*lower=*/0, /*upper=*/0));
+ assertThat(matchInfo.getSubmatch().length()).isEqualTo(0);
+ } else {
+ // Submatch is enabled on any backend that targets a platform beyond S.
+ assertThat(matchInfo.getSubmatchRange()).isEqualTo(
+ new SearchResult.MatchRange(/*lower=*/44, /*upper=*/45));
+ assertThat(matchInfo.getSubmatch()).isEqualTo("は");
+ }
}
@Test
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
index a2c17f6..f675483 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionLocalCtsTest.java
@@ -67,6 +67,12 @@
.setWorkerExecutor(executor).build());
}
+ @Override
+ protected int getAppSearchApiTarget() {
+ // Any feature available in AppSearchSession is always available in the local backend.
+ return Integer.MAX_VALUE;
+ }
+
// TODO(b/194207451) This test can be moved to CtsTestBase if customized logger is
// supported for platform backend.
@Test
diff --git a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
index f467c77..e3f4770 100644
--- a/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
+++ b/appsearch/appsearch/src/androidTest/java/androidx/appsearch/cts/app/AppSearchSessionPlatformCtsTest.java
@@ -16,6 +16,8 @@
// @exportToFramework:skipFile()
package androidx.appsearch.cts.app;
+import static android.os.Build.VERSION;
+
import android.content.Context;
import android.os.Build;
@@ -46,4 +48,10 @@
new PlatformStorage.SearchContext.Builder(context, dbName)
.setWorkerExecutor(executor).build());
}
+
+ @Override
+ protected int getAppSearchApiTarget() {
+ // Feature availability in the platform backend depends on the device's API level.
+ return VERSION.SDK_INT;
+ }
}