New OptionalSaveActivityTest tests for save when user manually fills:
- testDontShowSaveUiWhenUserManuallyFilled_oneDatasetAllRequiredFields()
- testDontShowSaveUiWhenUserManuallyFilled_oneDatasetRequiredAndOptionalFields()
- testDontShowSaveUiWhenUserManuallyFilled_multipleDatasetsDataOnFirst()
- testDontShowSaveUiWhenUserManuallyFilled_multipleDatasetsDataOnSecond()
- testShowSaveUiWhenUserManuallyFilled_requiredOnly
Test: all of them pass
Bug: 63068654
Change-Id: Ib282589b9dfff41c988f16a661d408936bf56e10
diff --git a/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java b/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java
index 05d5ecc..3e39004 100644
--- a/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java
+++ b/tests/autofillservice/src/android/autofillservice/cts/OptionalSaveActivityTest.java
@@ -29,6 +29,8 @@
import android.app.assist.AssistStructure;
import android.autofillservice.cts.CannedFillResponse.CannedDataset;
import android.autofillservice.cts.InstrumentedAutoFillService.SaveRequest;
+import android.support.annotation.NonNull;
+import android.support.annotation.Nullable;
import org.junit.After;
import org.junit.Before;
@@ -48,6 +50,9 @@
*/
public class OptionalSaveActivityTest extends AutoFillServiceTestCase {
+ private static final boolean EXPECT_NO_SAVE_UI = false;
+ private static final boolean EXPECT_SAVE_UI = false;
+
@Rule
public final AutofillActivityTestRule<OptionalSaveActivity> mActivityRule =
new AutofillActivityTestRule<OptionalSaveActivity>(OptionalSaveActivity.class);
@@ -431,4 +436,164 @@
// Once saved, the session should be finsihed.
assertNoDanglingSessions();
}
+
+ @Test
+ public void testDontShowSaveUiWhenUserManuallyFilled_oneDatasetAllRequiredFields()
+ throws Exception {
+ saveWhenUserFilledDatasetFields(
+ new String[] {ID_ADDRESS1, ID_ADDRESS2},
+ null,
+ () -> {
+ mActivity.mAddress1.setText("742 Evergreen Terrace");
+ mActivity.mAddress2.setText("Simpsons House");
+ },
+ EXPECT_NO_SAVE_UI,
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SF"))
+ .setField(ID_ADDRESS1, "742 Evergreen Terrace")
+ .setField(ID_ADDRESS2, "Simpsons House")
+ .build()
+ );
+ }
+
+ @Test
+ public void testDontShowSaveUiWhenUserManuallyFilled_oneDatasetRequiredAndOptionalFields()
+ throws Exception {
+ saveWhenUserFilledDatasetFields(
+ new String[] {ID_ADDRESS1},
+ new String[] {ID_ADDRESS2},
+ () -> {
+ mActivity.mAddress1.setText("742 Evergreen Terrace");
+ mActivity.mAddress2.setText("Simpsons House");
+ },
+ EXPECT_NO_SAVE_UI,
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SF"))
+ .setField(ID_ADDRESS1, "742 Evergreen Terrace")
+ .setField(ID_ADDRESS2, "Simpsons House")
+ .build()
+ );
+ }
+
+ @Test
+ public void testDontShowSaveUiWhenUserManuallyFilled_multipleDatasetsDataOnFirst()
+ throws Exception {
+ saveWhenUserFilledDatasetFields(
+ new String[] {ID_ADDRESS1},
+ new String[] {ID_ADDRESS2},
+ () -> {
+ mActivity.mAddress1.setText("742 Evergreen Terrace");
+ mActivity.mAddress2.setText("Simpsons House");
+ },
+ EXPECT_NO_SAVE_UI,
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SF"))
+ .setField(ID_ADDRESS1, "742 Evergreen Terrace")
+ .setField(ID_ADDRESS2, "Simpsons House")
+ .build(),
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SV"))
+ .setField(ID_ADDRESS1, "Shelbyville Nuclear Power Plant")
+ .setField(ID_ADDRESS2, "Shelbyville Bluffs")
+ .build()
+ );
+ }
+
+ @Test
+ public void testDontShowSaveUiWhenUserManuallyFilled_multipleDatasetsDataOnSecond()
+ throws Exception {
+ saveWhenUserFilledDatasetFields(
+ new String[] {ID_ADDRESS1},
+ new String[] {ID_ADDRESS2},
+ () -> {
+ mActivity.mAddress1.setText("Shelbyville Nuclear Power Plant");
+ mActivity.mAddress2.setText("Shelbyville Bluffs");
+ },
+ EXPECT_NO_SAVE_UI,
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SF"))
+ .setField(ID_ADDRESS1, "742 Evergreen Terrace")
+ .setField(ID_ADDRESS2, "Simpsons House")
+ .build(),
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SV"))
+ .setField(ID_ADDRESS1, "Shelbyville Nuclear Power Plant")
+ .setField(ID_ADDRESS2, "Shelbyville Bluffs")
+ .build()
+ );
+ }
+
+ @Test
+ public void testShowSaveUiWhenUserManuallyFilled_requiredOnly()
+ throws Exception {
+ saveWhenUserFilledDatasetFields(
+ new String[] {ID_ADDRESS1},
+ new String[] {ID_ADDRESS2},
+ () -> {
+ mActivity.mAddress1.setText("742 Evergreen Terrace");
+ },
+ EXPECT_SAVE_UI,
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SF"))
+ .setField(ID_ADDRESS1, "742 Evergreen Terrace")
+ .setField(ID_ADDRESS2, "Simpsons House")
+ .build()
+ );
+ }
+
+ @Test
+ public void testShowSaveUiWhenUserManuallyFilled_optionalOnly()
+ throws Exception {
+ saveWhenUserFilledDatasetFields(
+ new String[] {ID_ADDRESS1},
+ new String[] {ID_ADDRESS2},
+ () -> {
+ mActivity.mAddress2.setText("Simpsons House");
+ },
+ EXPECT_SAVE_UI,
+ new CannedDataset.Builder()
+ .setPresentation(createPresentation("SF"))
+ .setField(ID_ADDRESS1, "742 Evergreen Terrace")
+ .setField(ID_ADDRESS2, "Simpsons House")
+ .build()
+ );
+ }
+
+ private void saveWhenUserFilledDatasetFields(@NonNull String[] requiredIds,
+ @Nullable String[] optionalIds, @NonNull Runnable changes, boolean expectSaveUi,
+ @NonNull CannedDataset...datasets) throws Exception {
+ // Set service.
+ enableService();
+
+ // Set expectations.
+ final CannedFillResponse.Builder response = new CannedFillResponse.Builder()
+ .setRequiredSavableIds(SAVE_DATA_TYPE_ADDRESS, requiredIds);
+ if (optionalIds != null) {
+ response.setOptionalSavableIds(optionalIds);
+ }
+ for (CannedDataset dataset : datasets) {
+ response.addDataset(dataset);
+ }
+ sReplier.addResponse(response.build());
+
+ // Trigger auto-fill.
+ mActivity.syncRunOnUiThread(() -> mActivity.mAddress1.requestFocus());
+ sReplier.getNextFillRequest();
+
+ // Manually fill it.
+ mActivity.syncRunOnUiThread(changes);
+
+ // Make sure the snack bar is not shown.
+ if (expectSaveUi) {
+ sUiBot.assertSaveShowing(SAVE_DATA_TYPE_ADDRESS);
+ } else {
+ sUiBot.assertSaveNotShowing(SAVE_DATA_TYPE_ADDRESS);
+ }
+
+ // ...then tap save.
+ mActivity.save();
+
+ // Assert the snack bar is not shown.
+ sUiBot.assertSaveNotShowing(SAVE_DATA_TYPE_ADDRESS);
+ }
}