From 84d7f4fbba24a0c6a4f4453f39f97484654e80c9 Mon Sep 17 00:00:00 2001 From: Sylvia van Os Date: Sun, 22 Nov 2020 18:26:05 +0100 Subject: [PATCH] Fix unit tests --- .../card_locker/LoyaltyCardEditActivity.java | 43 +++++++++---------- .../LoyaltyCardViewActivityTest.java | 23 +++++++++- 2 files changed, 42 insertions(+), 24 deletions(-) diff --git a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java index 7e51a13ea..5f50c3541 100644 --- a/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java +++ b/app/src/main/java/protect/card_locker/LoyaltyCardEditActivity.java @@ -75,6 +75,7 @@ public class LoyaltyCardEditActivity extends AppCompatActivity boolean hasChanged = false; boolean initDone = false; + AlertDialog confirmExitDialog = null; private void extractIntentFields(Intent intent) { @@ -397,28 +398,26 @@ public class LoyaltyCardEditActivity extends AppCompatActivity return; } - AlertDialog.Builder builder = new AlertDialog.Builder(this); - builder.setTitle(R.string.leaveWithoutSaveTitle); - builder.setMessage(R.string.leaveWithoutSaveConfirmation); - builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int which) - { - finish(); - dialog.dismiss(); - } - }); - builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() - { - @Override - public void onClick(DialogInterface dialog, int which) - { - dialog.dismiss(); - } - }); - AlertDialog dialog = builder.create(); - dialog.show(); + if (confirmExitDialog == null) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setTitle(R.string.leaveWithoutSaveTitle); + builder.setMessage(R.string.leaveWithoutSaveConfirmation); + builder.setPositiveButton(R.string.confirm, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + finish(); + dialog.dismiss(); + } + }); + builder.setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + } + }); + confirmExitDialog = builder.create(); + } + confirmExitDialog.show(); } class EditCardIdAndBarcode implements View.OnClickListener diff --git a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java index fc69d3c12..ffc4e2aac 100644 --- a/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java +++ b/app/src/test/java/protect/card_locker/LoyaltyCardViewActivityTest.java @@ -352,7 +352,7 @@ public class LoyaltyCardViewActivityTest activityController.visible(); activityController.resume(); - Activity activity = (Activity)activityController.get(); + LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); checkAllFields(activity, ViewMode.ADD_CARD, "", "", "", ""); @@ -363,7 +363,17 @@ public class LoyaltyCardViewActivityTest // Cancel the loyalty card creation assertEquals(false, activity.isFinishing()); + + // A change was made shadowOf(activity).clickMenuItem(android.R.id.home); + assertEquals(true, activity.confirmExitDialog.isShowing()); + assertEquals(true, activity.hasChanged); + assertEquals(false, activity.isFinishing()); + + // Exit after setting hasChanged to false + activity.hasChanged = false; + shadowOf(activity).clickMenuItem(android.R.id.home); + assertEquals(false, activity.hasChanged); assertEquals(true, activity.isFinishing()); } @@ -448,7 +458,7 @@ public class LoyaltyCardViewActivityTest public void startWithLoyaltyCardWithReceiptUpdateReceiptCancel() throws IOException { ActivityController activityController = createActivityWithLoyaltyCard(true); - Activity activity = (Activity)activityController.get(); + LoyaltyCardEditActivity activity = (LoyaltyCardEditActivity) activityController.get(); DBHelper db = new DBHelper(activity); db.insertLoyaltyCard("store", "note", EAN_BARCODE_DATA, EAN_BARCODE_TYPE, Color.BLACK, 0); @@ -466,7 +476,16 @@ public class LoyaltyCardViewActivityTest // Cancel the loyalty card creation assertEquals(false, activity.isFinishing()); + // A change was made shadowOf(activity).clickMenuItem(android.R.id.home); + assertEquals(true, activity.confirmExitDialog.isShowing()); + assertEquals(true, activity.hasChanged); + assertEquals(false, activity.isFinishing()); + + // Exit after setting hasChanged to false + activity.hasChanged = false; + shadowOf(activity).clickMenuItem(android.R.id.home); + assertEquals(false, activity.hasChanged); assertEquals(true, activity.isFinishing()); }