From 00a2ee240cdb6ce9c96e8e58bf9baffc3b025071 Mon Sep 17 00:00:00 2001 From: Dominik Bek Date: Wed, 24 Jul 2024 17:54:21 +0200 Subject: [PATCH 1/2] local changes --- .../FormulaEditorEditTextTest.java | 4 ++ .../util/matchers/SuperToastMatchers.java | 40 +++++++++++++++++-- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java index 425c96ee048..24d0caf42c2 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java @@ -32,6 +32,7 @@ import org.catrobat.catroid.ui.SpriteActivity; import org.catrobat.catroid.uiespresso.util.UiTestUtils; import org.catrobat.catroid.uiespresso.util.actions.CustomActions; +import org.catrobat.catroid.uiespresso.util.matchers.SuperToastMatchers; import org.catrobat.catroid.uiespresso.util.rules.FragmentActivityTestRule; import org.junit.Before; import org.junit.Rule; @@ -39,6 +40,7 @@ import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; +import androidx.test.espresso.action.ViewActions; import androidx.test.ext.junit.runners.AndroidJUnit4; import static org.catrobat.catroid.uiespresso.content.brick.utils.BrickDataInteractionWrapper.onBrickAtPosition; @@ -55,6 +57,7 @@ import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.doubleClick; import static androidx.test.espresso.action.ViewActions.longClick; +import static androidx.test.espresso.action.ViewActions.swipeRight; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isRoot; @@ -159,6 +162,7 @@ public void testFormulaIsNotValidToast3() { pressBack(); onToast(withText(R.string.formula_editor_parse_fail)) .check(matches(isDisplayed())); + onView(isRoot()).perform(CustomActions.wait(3000)); } diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java index 61bff1ccb2f..deeef549441 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java @@ -23,6 +23,7 @@ package org.catrobat.catroid.uiespresso.util.matchers; +import android.os.IBinder; import android.view.WindowManager; import org.hamcrest.Description; @@ -31,18 +32,31 @@ import androidx.test.espresso.Root; -public final class SuperToastMatchers { - private SuperToastMatchers() { +public final class SuperToastMatchers implements Matcher { + public SuperToastMatchers() { throw new AssertionError(); } public static Matcher isToast() { return new TypeSafeMatcher() { + //@Override + //public boolean matchesSafely(Root root) { + // int type = root.getWindowLayoutParams().get().type; + // return (type == WindowManager.LayoutParams.TYPE_TOAST); + //} + @Override public boolean matchesSafely(Root root) { int type = root.getWindowLayoutParams().get().type; - return (type == WindowManager.LayoutParams.TYPE_TOAST); + if ((type == WindowManager.LayoutParams.TYPE_TOAST)) { + IBinder windowToken = root.getDecorView().getWindowToken(); + IBinder appToken = root.getDecorView().getApplicationWindowToken(); + if (windowToken == appToken) { + return true; + } + } + return false; } @Override @@ -51,4 +65,24 @@ public void describeTo(Description description) { } }; } + + @Override + public boolean matches(Object o) { + return false; + } + + @Override + public void describeMismatch(Object o, Description description) { + + } + + @Override + public void _dont_implement_Matcher___instead_extend_BaseMatcher_() { + + } + + @Override + public void describeTo(Description description) { + + } } From b83f06abc16048362cc834b326cd8a74bdcc3aae Mon Sep 17 00:00:00 2001 From: Dominik Bek Date: Sun, 4 Aug 2024 12:00:47 +0200 Subject: [PATCH 2/2] changes Tests from Toasts to Snackbar Hints --- catroid/build.gradle | 1 + .../FormulaEditorEditTextTest.java | 48 +++++++++++++++---- .../ui/fragment/ProjectOptionsTest.java | 2 +- .../ui/fragment/ScriptFragmentTest.java | 2 +- .../util/matchers/SuperToastMatchers.java | 44 ++--------------- .../ui/fragment/FormulaEditorFragment.java | 12 ++--- .../catrobat/catroid/utils/SnackbarUtil.java | 7 ++- .../org/catrobat/catroid/utils/ToastUtil.java | 2 +- 8 files changed, 61 insertions(+), 57 deletions(-) diff --git a/catroid/build.gradle b/catroid/build.gradle index fe053a4a887..d51d5a0d537 100644 --- a/catroid/build.gradle +++ b/catroid/build.gradle @@ -523,6 +523,7 @@ dependencies { androidTestImplementation "androidx.test.espresso:espresso-intents:$espressoVersion" androidTestImplementation 'androidx.test.uiautomator:uiautomator:2.2.0' + androidTestImplementation 'org.robolectric:shadows-framework:4.7.3' // Room Test helpers testImplementation("androidx.room:room-testing:$room_version") diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java index 24d0caf42c2..fad4f570813 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/formulaeditor/FormulaEditorEditTextTest.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2022 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -32,7 +32,6 @@ import org.catrobat.catroid.ui.SpriteActivity; import org.catrobat.catroid.uiespresso.util.UiTestUtils; import org.catrobat.catroid.uiespresso.util.actions.CustomActions; -import org.catrobat.catroid.uiespresso.util.matchers.SuperToastMatchers; import org.catrobat.catroid.uiespresso.util.rules.FragmentActivityTestRule; import org.junit.Before; import org.junit.Rule; @@ -40,7 +39,7 @@ import org.junit.experimental.categories.Category; import org.junit.runner.RunWith; -import androidx.test.espresso.action.ViewActions; +import androidx.test.espresso.NoMatchingViewException; import androidx.test.ext.junit.runners.AndroidJUnit4; import static org.catrobat.catroid.uiespresso.content.brick.utils.BrickDataInteractionWrapper.onBrickAtPosition; @@ -50,14 +49,12 @@ import static org.catrobat.catroid.uiespresso.formulaeditor.utils.FormulaEditorWrapper.FORMULA_EDITOR_TEXT_FIELD_MATCHER; import static org.catrobat.catroid.uiespresso.formulaeditor.utils.FormulaEditorWrapper.onFormulaEditor; import static org.catrobat.catroid.uiespresso.util.UiTestUtils.getResourcesString; -import static org.catrobat.catroid.uiespresso.util.UiTestUtils.onToast; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.Espresso.pressBack; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.doubleClick; import static androidx.test.espresso.action.ViewActions.longClick; -import static androidx.test.espresso.action.ViewActions.swipeRight; import static androidx.test.espresso.assertion.ViewAssertions.matches; import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; import static androidx.test.espresso.matcher.ViewMatchers.isRoot; @@ -134,7 +131,7 @@ public void testFormulaIsNotValidToast1() { onFormulaEditor() .performClickOn(BACKSPACE); pressBack(); - onToast(withText(R.string.formula_editor_parse_fail)) + onView(withText(R.string.formula_editor_parse_fail)) .check(matches(isDisplayed())); onView(isRoot()).perform(CustomActions.wait(3000)); } @@ -147,7 +144,7 @@ public void testFormulaIsNotValidToast2() { onFormulaEditor() .performEnterFormula("1+1+"); pressBack(); - onToast(withText(R.string.formula_editor_parse_fail)) + onView(withText(R.string.formula_editor_parse_fail)) .check(matches(isDisplayed())); onView(isRoot()).perform(CustomActions.wait(3000)); } @@ -160,9 +157,44 @@ public void testFormulaIsNotValidToast3() { onFormulaEditor() .performEnterFormula("+"); pressBack(); - onToast(withText(R.string.formula_editor_parse_fail)) + onView(withText(R.string.formula_editor_parse_fail)) .check(matches(isDisplayed())); + onView(isRoot()).perform(CustomActions.wait(3000)); + } + @Category({Cat.CatrobatLanguage.class, Level.Smoke.class}) + @Test(expected = NoMatchingViewException.class) + public void testFormulaIsNotValidToastFail1() { + onFormulaEditor() + .performClickOn(BACKSPACE); + pressBack(); + onView(withText(R.string.formula_editor_parse_fail_formula_too_long)) + .check(matches(isDisplayed())); + onView(isRoot()).perform(CustomActions.wait(3000)); + } + + @Category({Cat.CatrobatLanguage.class, Level.Smoke.class}) + @Test(expected = NoMatchingViewException.class) + public void testFormulaIsNotValidToastFail2() { + onFormulaEditor() + .performClickOn(BACKSPACE); + onFormulaEditor() + .performEnterFormula("1+1+"); + pressBack(); + onView(withText(R.string.formula_editor_parse_fail_formula_too_long)) + .check(matches(isDisplayed())); + onView(isRoot()).perform(CustomActions.wait(3000)); + } + @Category({Cat.CatrobatLanguage.class, Level.Smoke.class}) + @Test(expected = NoMatchingViewException.class) + public void testFormulaIsNotValidToastFail3() { + onFormulaEditor() + .performClickOn(BACKSPACE); + onFormulaEditor() + .performEnterFormula("+"); + pressBack(); + onView(withText(R.string.formula_editor_parse_fail_formula_too_long)) + .check(matches(isDisplayed())); onView(isRoot()).perform(CustomActions.wait(3000)); } diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ProjectOptionsTest.java b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ProjectOptionsTest.java index 7c8d8b555fa..cfa817dce16 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ProjectOptionsTest.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ProjectOptionsTest.java @@ -327,7 +327,7 @@ public void saveExternal() throws IOException { .perform(click()); onToast(withText(pendingToastText)) - .check(matches(isDisplayed())); + .check(matches((isDisplayed()))); onView(isRoot()).perform(CustomActions .wait(DURATION_WAIT_FOR_ZIP_FILE_IN_MILLISECONDS)); diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ScriptFragmentTest.java b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ScriptFragmentTest.java index 41ef9e6e6f2..93b064ee01d 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ScriptFragmentTest.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/ui/fragment/ScriptFragmentTest.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2022 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify diff --git a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java index deeef549441..7deb7e20f71 100644 --- a/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java +++ b/catroid/src/androidTest/java/org/catrobat/catroid/uiespresso/util/matchers/SuperToastMatchers.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2022 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -23,7 +23,6 @@ package org.catrobat.catroid.uiespresso.util.matchers; -import android.os.IBinder; import android.view.WindowManager; import org.hamcrest.Description; @@ -32,31 +31,18 @@ import androidx.test.espresso.Root; -public final class SuperToastMatchers implements Matcher { - public SuperToastMatchers() { +public final class SuperToastMatchers { + private SuperToastMatchers() { throw new AssertionError(); } public static Matcher isToast() { return new TypeSafeMatcher() { - //@Override - //public boolean matchesSafely(Root root) { - // int type = root.getWindowLayoutParams().get().type; - // return (type == WindowManager.LayoutParams.TYPE_TOAST); - //} - @Override public boolean matchesSafely(Root root) { int type = root.getWindowLayoutParams().get().type; - if ((type == WindowManager.LayoutParams.TYPE_TOAST)) { - IBinder windowToken = root.getDecorView().getWindowToken(); - IBinder appToken = root.getDecorView().getApplicationWindowToken(); - if (windowToken == appToken) { - return true; - } - } - return false; + return (type == WindowManager.LayoutParams.TYPE_TOAST); } @Override @@ -65,24 +51,4 @@ public void describeTo(Description description) { } }; } - - @Override - public boolean matches(Object o) { - return false; - } - - @Override - public void describeMismatch(Object o, Description description) { - - } - - @Override - public void _dont_implement_Matcher___instead_extend_BaseMatcher_() { - - } - - @Override - public void describeTo(Description description) { - - } -} +} \ No newline at end of file diff --git a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java index d446e44878d..bc9a95692fa 100644 --- a/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java +++ b/catroid/src/main/java/org/catrobat/catroid/ui/fragment/FormulaEditorFragment.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2023 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -92,7 +92,6 @@ import org.catrobat.catroid.utils.ProjectManagerExtensionsKt; import org.catrobat.catroid.utils.ShowTextUtils.AndroidStringProvider; import org.catrobat.catroid.utils.SnackbarUtil; -import org.catrobat.catroid.utils.ToastUtil; import org.catrobat.paintroid.colorpicker.ColorPickerDialog; import java.io.File; @@ -100,6 +99,7 @@ import java.nio.charset.StandardCharsets; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import androidx.annotation.NonNull; import androidx.annotation.VisibleForTesting; @@ -708,7 +708,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_GPS && resultCode == AppCompatActivity.RESULT_CANCELED && SensorHandler.gpsAvailable()) { showComputeDialog(); } else { - ToastUtil.showError(getActivity(), R.string.error_gps_not_available); + SnackbarUtil.hintSnackbar(requireActivity(), R.string.error_gps_not_available); } } @@ -874,15 +874,15 @@ private boolean checkReturnWithoutSaving(int errorType) { confirmSwitchEditTextTimeStamp[0] = 0; confirmSwitchEditTextTimeStamp[1] = 0; confirmSwitchEditTextCounter = 0; - ToastUtil.showSuccess(getActivity(), R.string.formula_editor_changes_discarded); + SnackbarUtil.wasHintAlreadyShown(getActivity(), String.valueOf(R.string.formula_editor_changes_discarded)); return true; } else { switch (errorType) { case InternFormulaParser.PARSER_INPUT_SYNTAX_ERROR: - ToastUtil.showError(getActivity(), R.string.formula_editor_parse_fail); + SnackbarUtil.hintSnackbar(requireActivity(), R.string.formula_editor_parse_fail); break; case InternFormulaParser.PARSER_STACK_OVERFLOW: - ToastUtil.showError(getActivity(), R.string.formula_editor_parse_fail_formula_too_long); + SnackbarUtil.hintSnackbar(requireActivity(),R.string.formula_editor_parse_fail_formula_too_long); break; } return false; diff --git a/catroid/src/main/java/org/catrobat/catroid/utils/SnackbarUtil.java b/catroid/src/main/java/org/catrobat/catroid/utils/SnackbarUtil.java index affdc17f99c..2aff5f9ad54 100644 --- a/catroid/src/main/java/org/catrobat/catroid/utils/SnackbarUtil.java +++ b/catroid/src/main/java/org/catrobat/catroid/utils/SnackbarUtil.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2022 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify @@ -170,4 +170,9 @@ public static void dismissAllHints() { hint.dismiss(); } } + +// public static void showError(Context context, String message) { +// Snackbar.make(context, message, Toast.LENGTH_SHORT, DEFAULT_COLOR); +// } + } diff --git a/catroid/src/main/java/org/catrobat/catroid/utils/ToastUtil.java b/catroid/src/main/java/org/catrobat/catroid/utils/ToastUtil.java index 4d41a248dcc..64eefe7e69c 100644 --- a/catroid/src/main/java/org/catrobat/catroid/utils/ToastUtil.java +++ b/catroid/src/main/java/org/catrobat/catroid/utils/ToastUtil.java @@ -1,6 +1,6 @@ /* * Catroid: An on-device visual programming system for Android devices - * Copyright (C) 2010-2022 The Catrobat Team + * Copyright (C) 2010-2024 The Catrobat Team * () * * This program is free software: you can redistribute it and/or modify