diff options
author | ByteHamster <info@bytehamster.com> | 2020-08-15 19:56:21 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2020-08-15 19:56:34 +0200 |
commit | b25e0933ab606ac45ef9c26a745f25845d3af3fc (patch) | |
tree | 0344f78cbc1bbf1148ea07c63bdd1212a412a2e7 /app/src/androidTest/java | |
parent | 3c5e1138ca1c616dd7add9d567442cc0d9a510ac (diff) | |
parent | d8674e8050fd98961f7eaa9fa844eb03d8bbfb48 (diff) | |
download | AntennaPod-b25e0933ab606ac45ef9c26a745f25845d3af3fc.zip |
Merge branch 'develop' into add-local-feeds
Diffstat (limited to 'app/src/androidTest/java')
32 files changed, 516 insertions, 237 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java b/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java index 41c8365fb..3c8c5d7f0 100644 --- a/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/EspressoTestUtils.java @@ -5,7 +5,7 @@ import android.content.Intent; import androidx.annotation.IdRes; import androidx.annotation.StringRes; import androidx.preference.PreferenceManager; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.espresso.PerformException; import androidx.test.espresso.UiController; import androidx.test.espresso.ViewAction; @@ -116,38 +116,39 @@ public class EspressoTestUtils { * Clear all app databases */ public static void clearPreferences() { - File root = InstrumentationRegistry.getTargetContext().getFilesDir().getParentFile(); + File root = InstrumentationRegistry.getInstrumentation().getTargetContext().getFilesDir().getParentFile(); String[] sharedPreferencesFileNames = new File(root, "shared_prefs").list(); for (String fileName : sharedPreferencesFileNames) { System.out.println("Cleared database: " + fileName); - InstrumentationRegistry.getTargetContext().getSharedPreferences( + InstrumentationRegistry.getInstrumentation().getTargetContext().getSharedPreferences( fileName.replace(".xml", ""), Context.MODE_PRIVATE).edit().clear().commit(); } - InstrumentationRegistry.getTargetContext().getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE) + InstrumentationRegistry.getInstrumentation().getTargetContext() + .getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE) .edit() .putBoolean(MainActivity.PREF_IS_FIRST_LAUNCH, false) .commit(); - PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getTargetContext()) + PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getInstrumentation().getTargetContext()) .edit() .putString(UserPreferences.PREF_UPDATE_INTERVAL, "0") .commit(); - RatingDialog.init(InstrumentationRegistry.getTargetContext()); + RatingDialog.init(InstrumentationRegistry.getInstrumentation().getTargetContext()); RatingDialog.saveRated(); } public static void setLastNavFragment(String tag) { - InstrumentationRegistry.getTargetContext().getSharedPreferences( - NavDrawerFragment.PREF_NAME, Context.MODE_PRIVATE) + InstrumentationRegistry.getInstrumentation().getTargetContext() + .getSharedPreferences(NavDrawerFragment.PREF_NAME, Context.MODE_PRIVATE) .edit() .putString(NavDrawerFragment.PREF_LAST_FRAGMENT_TAG, tag) .commit(); } public static void clearDatabase() { - PodDBAdapter.init(InstrumentationRegistry.getTargetContext()); + PodDBAdapter.init(InstrumentationRegistry.getInstrumentation().getTargetContext()); PodDBAdapter.deleteDatabase(); PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); @@ -172,7 +173,7 @@ public class EspressoTestUtils { } public static void tryKillPlaybackService() { - Context context = InstrumentationRegistry.getTargetContext(); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); context.stopService(new Intent(context, PlaybackService.class)); try { // Android has no reliable way to stop a service instantly. @@ -183,11 +184,11 @@ public class EspressoTestUtils { } catch (ConditionTimeoutException e) { e.printStackTrace(); } - androidx.test.platform.app.InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } public static void tryKillDownloadService() { - Context context = InstrumentationRegistry.getTargetContext(); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); context.stopService(new Intent(context, DownloadService.class)); try { // Android has no reliable way to stop a service instantly. @@ -198,7 +199,7 @@ public class EspressoTestUtils { } catch (ConditionTimeoutException e) { e.printStackTrace(); } - androidx.test.platform.app.InstrumentationRegistry.getInstrumentation().waitForIdleSync(); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } public static Matcher<View> actionBarOverflow() { diff --git a/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java new file mode 100644 index 000000000..8c628efd5 --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/dialogs/ShareDialogTest.java @@ -0,0 +1,92 @@ +package de.test.antennapod.dialogs; + +import android.content.Context; +import android.content.Intent; +import android.view.View; + +import org.hamcrest.Matcher; +import org.hamcrest.Matchers; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.List; + +import androidx.test.espresso.intent.rule.IntentsTestRule; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.fragment.EpisodesFragment; +import de.test.antennapod.EspressoTestUtils; +import de.test.antennapod.ui.UITestUtils; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.action.ViewActions.scrollTo; +import static androidx.test.espresso.assertion.ViewAssertions.matches; +import static androidx.test.espresso.contrib.RecyclerViewActions.actionOnItemAtPosition; +import static androidx.test.espresso.matcher.ViewMatchers.hasMinimumChildCount; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.isRoot; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static de.test.antennapod.EspressoTestUtils.onDrawerItem; +import static de.test.antennapod.EspressoTestUtils.openNavDrawer; +import static de.test.antennapod.EspressoTestUtils.waitForView; +import static de.test.antennapod.NthMatcher.first; +import static org.hamcrest.CoreMatchers.allOf; + +/** + * User interface tests for share dialog. + */ +@RunWith(AndroidJUnit4.class) +public class ShareDialogTest { + + @Rule + public IntentsTestRule<MainActivity> activityRule = new IntentsTestRule<>(MainActivity.class, false, false); + + private UITestUtils uiTestUtils; + protected Context context; + + @Before + public void setUp() throws Exception { + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); + EspressoTestUtils.clearPreferences(); + EspressoTestUtils.clearDatabase(); + EspressoTestUtils.setLastNavFragment(EpisodesFragment.TAG); + uiTestUtils = new UITestUtils(context); + uiTestUtils.setup(); + uiTestUtils.addLocalFeedData(true); + + activityRule.launchActivity(new Intent()); + + openNavDrawer(); + onDrawerItem(withText(R.string.episodes_label)).perform(click()); + onView(isRoot()).perform(waitForView(withText(R.string.all_episodes_short_label), 1000)); + onView(withText(R.string.all_episodes_short_label)).perform(click()); + + Matcher<View> allEpisodesMatcher; + final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10); + allEpisodesMatcher = Matchers.allOf(withId(android.R.id.list), isDisplayed(), hasMinimumChildCount(2)); + onView(isRoot()).perform(waitForView(allEpisodesMatcher, 1000)); + onView(allEpisodesMatcher).perform(actionOnItemAtPosition(0, click())); + onView(first(EspressoTestUtils.actionBarOverflow())).perform(click()); + } + + @Test + public void testShareDialogDisplayed() throws InterruptedException { + onView(withText(R.string.share_label_with_ellipses)).perform(click()); + onView(allOf(isDisplayed(), withText(R.string.share_label))); + } + + @Test + public void testShareDialogCancelButton() { + onView(withText(R.string.share_label_with_ellipses)).perform(scrollTo()).perform(click()); + onView(withText(R.string.cancel_label)).check(matches(isDisplayed())).perform(scrollTo()).perform(click()); + } + +} diff --git a/app/src/androidTest/java/de/test/antennapod/entities/ExternalMediaTest.java b/app/src/androidTest/java/de/test/antennapod/entities/ExternalMediaTest.java index b3c79367f..6da4e60a1 100644 --- a/app/src/androidTest/java/de/test/antennapod/entities/ExternalMediaTest.java +++ b/app/src/androidTest/java/de/test/antennapod/entities/ExternalMediaTest.java @@ -4,7 +4,7 @@ import android.annotation.SuppressLint; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.LargeTest; import androidx.test.filters.SmallTest; import de.danoeh.antennapod.core.feed.MediaType; @@ -36,7 +36,7 @@ public class ExternalMediaTest { } private SharedPreferences getDefaultSharedPrefs() { - return PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getTargetContext()); + return PreferenceManager.getDefaultSharedPreferences(InstrumentationRegistry.getInstrumentation().getTargetContext()); } @Test diff --git a/app/src/androidTest/java/de/test/antennapod/feed/FeedFilterTest.java b/app/src/androidTest/java/de/test/antennapod/feed/FeedFilterTest.java index 4b81a4f2b..fc2943205 100644 --- a/app/src/androidTest/java/de/test/antennapod/feed/FeedFilterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/feed/FeedFilterTest.java @@ -6,6 +6,7 @@ import de.danoeh.antennapod.core.feed.FeedItem; import org.junit.Test; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @SmallTest @@ -17,8 +18,8 @@ public class FeedFilterTest { FeedItem item = new FeedItem(); item.setTitle("Hello world"); - assertTrue(!filter.excludeOnly()); - assertTrue(!filter.includeOnly()); + assertFalse(filter.excludeOnly()); + assertFalse(filter.includeOnly()); assertEquals("", filter.getExcludeFilter()); assertEquals("", filter.getIncludeFilter()); assertTrue(filter.shouldAutoDownload(item)); @@ -34,12 +35,12 @@ public class FeedFilterTest { FeedItem item2 = new FeedItem(); item2.setTitle("Don't include me"); - assertTrue(!filter.excludeOnly()); + assertFalse(filter.excludeOnly()); assertTrue(filter.includeOnly()); assertEquals("", filter.getExcludeFilter()); assertEquals(includeFilter, filter.getIncludeFilter()); assertTrue(filter.shouldAutoDownload(item)); - assertTrue(!filter.shouldAutoDownload(item2)); + assertFalse(filter.shouldAutoDownload(item2)); } @Test @@ -53,10 +54,10 @@ public class FeedFilterTest { item2.setTitle("Item2"); assertTrue(filter.excludeOnly()); - assertTrue(!filter.includeOnly()); + assertFalse(filter.includeOnly()); assertEquals(excludeFilter, filter.getExcludeFilter()); assertEquals("", filter.getIncludeFilter()); - assertTrue(!filter.shouldAutoDownload(item)); + assertFalse(filter.shouldAutoDownload(item)); assertTrue(filter.shouldAutoDownload(item2)); } @@ -73,12 +74,12 @@ public class FeedFilterTest { FeedItem item3 = new FeedItem(); item3.setTitle("One two words"); - assertTrue(!filter.excludeOnly()); + assertFalse(filter.excludeOnly()); assertTrue(filter.includeOnly()); assertEquals("", filter.getExcludeFilter()); assertEquals(includeFilter, filter.getIncludeFilter()); assertTrue(filter.shouldAutoDownload(item)); - assertTrue(!filter.shouldAutoDownload(item2)); + assertFalse(filter.shouldAutoDownload(item2)); assertTrue(filter.shouldAutoDownload(item3)); } @@ -96,12 +97,12 @@ public class FeedFilterTest { item3.setTitle("One two words"); assertTrue(filter.excludeOnly()); - assertTrue(!filter.includeOnly()); + assertFalse(filter.includeOnly()); assertEquals(excludeFilter, filter.getExcludeFilter()); assertEquals("", filter.getIncludeFilter()); - assertTrue(!filter.shouldAutoDownload(item)); + assertFalse(filter.shouldAutoDownload(item)); assertTrue(filter.shouldAutoDownload(item2)); - assertTrue(!filter.shouldAutoDownload(item3)); + assertFalse(filter.shouldAutoDownload(item3)); } @Test @@ -122,8 +123,8 @@ public class FeedFilterTest { assertTrue(filter.hasExcludeFilter()); assertTrue(filter.hasIncludeFilter()); assertTrue(filter.shouldAutoDownload(download)); - assertTrue(!filter.shouldAutoDownload(doNotDownload)); - assertTrue(!filter.shouldAutoDownload(doNotDownload2)); + assertFalse(filter.shouldAutoDownload(doNotDownload)); + assertFalse(filter.shouldAutoDownload(doNotDownload2)); } } diff --git a/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java index e7e8c5b09..9b3422a5d 100644 --- a/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/gpodnet/GPodnetServiceTest.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.ext.junit.runners.AndroidJUnit4; import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; import de.danoeh.antennapod.core.sync.gpoddernet.GpodnetService; import de.danoeh.antennapod.core.sync.gpoddernet.GpodnetServiceException; diff --git a/app/src/androidTest/java/de/test/antennapod/handler/AtomParserTest.java b/app/src/androidTest/java/de/test/antennapod/handler/AtomParserTest.java new file mode 100644 index 000000000..de9f53ae2 --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/handler/AtomParserTest.java @@ -0,0 +1,40 @@ +package de.test.antennapod.handler; + +import androidx.test.filters.SmallTest; +import de.danoeh.antennapod.core.feed.Feed; +import de.test.antennapod.util.syndication.feedgenerator.AtomGenerator; +import org.junit.Test; +import org.xmlpull.v1.XmlSerializer; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + +/** + * Tests for Atom feeds in FeedHandler. + */ +@SmallTest +public class AtomParserTest extends FeedParserTestBase { + @Test + public void testAtomBasic() throws Exception { + Feed f1 = createTestFeed(10, true); + Feed f2 = runFeedTest(f1, new AtomGenerator(), "UTF-8", 0); + feedValid(f1, f2, Feed.TYPE_ATOM1); + } + + @Test + public void testLogoWithWhitespace() throws Exception { + String logo = "https://example.com/image.png"; + Feed f1 = createTestFeed(0, false); + f1.setImageUrl(null); + Feed f2 = runFeedTest(f1, new AtomGenerator() { + @Override + protected void writeAdditionalAttributes(XmlSerializer xml) throws IOException { + xml.startTag(null, "logo"); + xml.text(" " + logo + "\n"); + xml.endTag(null, "logo"); + } + }, "UTF-8", 0); + assertEquals(logo, f2.getImageUrl()); + } +} diff --git a/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java b/app/src/androidTest/java/de/test/antennapod/handler/FeedParserTestBase.java index ba4a944f7..83f334633 100644 --- a/app/src/androidTest/java/de/test/antennapod/handler/FeedHandlerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/handler/FeedParserTestBase.java @@ -1,13 +1,19 @@ package de.test.antennapod.handler; import android.content.Context; -import androidx.test.InstrumentationRegistry; -import androidx.test.filters.SmallTest; +import androidx.test.platform.app.InstrumentationRegistry; +import de.danoeh.antennapod.core.feed.Chapter; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.FeedItem; +import de.danoeh.antennapod.core.feed.FeedMedia; +import de.danoeh.antennapod.core.syndication.handler.FeedHandler; +import de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException; +import de.test.antennapod.util.syndication.feedgenerator.FeedGenerator; import org.junit.After; import org.junit.Before; -import org.junit.Test; import org.xml.sax.SAXException; +import javax.xml.parsers.ParserConfigurationException; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -16,28 +22,15 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import javax.xml.parsers.ParserConfigurationException; - -import de.danoeh.antennapod.core.feed.Chapter; -import de.danoeh.antennapod.core.feed.Feed; -import de.danoeh.antennapod.core.feed.FeedItem; -import de.danoeh.antennapod.core.feed.FeedMedia; -import de.danoeh.antennapod.core.syndication.handler.FeedHandler; -import de.danoeh.antennapod.core.syndication.handler.UnsupportedFeedtypeException; -import de.test.antennapod.util.syndication.feedgenerator.AtomGenerator; -import de.test.antennapod.util.syndication.feedgenerator.FeedGenerator; -import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator; - import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; /** - * Tests for FeedHandler + * Tests for FeedHandler. */ -@SmallTest -public class FeedHandlerTest { +public abstract class FeedParserTestBase { private static final String FEEDS_DIR = "testfeeds"; private File file = null; @@ -45,7 +38,7 @@ public class FeedHandlerTest { @Before public void setUp() throws Exception { - Context context = InstrumentationRegistry.getTargetContext(); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); File destDir = context.getExternalFilesDir(FEEDS_DIR); assertNotNull(destDir); @@ -68,7 +61,8 @@ public class FeedHandlerTest { outputStream = null; } - private Feed runFeedTest(Feed feed, FeedGenerator g, String encoding, long flags) throws IOException, UnsupportedFeedtypeException, SAXException, ParserConfigurationException { + protected Feed runFeedTest(Feed feed, FeedGenerator g, String encoding, long flags) + throws IOException, UnsupportedFeedtypeException, SAXException, ParserConfigurationException { g.writeFeed(feed, outputStream, encoding, flags); FeedHandler handler = new FeedHandler(); Feed parsedFeed = new Feed(feed.getDownload_url(), feed.getLastUpdate()); @@ -78,7 +72,7 @@ public class FeedHandlerTest { return parsedFeed; } - private void feedValid(Feed feed, Feed parsedFeed, String feedType) { + protected void feedValid(Feed feed, Feed parsedFeed, String feedType) { assertEquals(feed.getTitle(), parsedFeed.getTitle()); if (feedType.equals(Feed.TYPE_ATOM1)) { assertEquals(feed.getFeedIdentifier(), parsedFeed.getFeedIdentifier()); @@ -99,8 +93,9 @@ public class FeedHandlerTest { FeedItem item = feed.getItems().get(i); FeedItem parsedItem = parsedFeed.getItems().get(i); - if (item.getItemIdentifier() != null) + if (item.getItemIdentifier() != null) { assertEquals(item.getItemIdentifier(), parsedItem.getItemIdentifier()); + } assertEquals(item.getTitle(), parsedItem.getTitle()); assertEquals(item.getDescription(), parsedItem.getDescription()); assertEquals(item.getContentEncoded(), parsedItem.getContentEncoded()); @@ -137,33 +132,19 @@ public class FeedHandlerTest { } } - @Test - public void testRSS2Basic() throws IOException, UnsupportedFeedtypeException, SAXException, ParserConfigurationException { - Feed f1 = createTestFeed(10, true); - Feed f2 = runFeedTest(f1, new RSS2Generator(), "UTF-8", RSS2Generator.FEATURE_WRITE_GUID); - feedValid(f1, f2, Feed.TYPE_RSS2); - } - - @Test - public void testAtomBasic() throws IOException, UnsupportedFeedtypeException, SAXException, ParserConfigurationException { - Feed f1 = createTestFeed(10, true); - Feed f2 = runFeedTest(f1, new AtomGenerator(), "UTF-8", 0); - feedValid(f1, f2, Feed.TYPE_ATOM1); - } - - private Feed createTestFeed(int numItems, boolean withFeedMedia) { + protected Feed createTestFeed(int numItems, boolean withFeedMedia) { Feed feed = new Feed(0, null, "title", "http://example.com", "This is the description", - "http://example.com/payment", "Daniel", "en", null, "http://example.com/feed", "http://example.com/picture", file.getAbsolutePath(), - "http://example.com/feed", true); + "http://example.com/payment", "Daniel", "en", null, "http://example.com/feed", + "http://example.com/picture", file.getAbsolutePath(), "http://example.com/feed", true); feed.setItems(new ArrayList<>()); for (int i = 0; i < numItems; i++) { FeedItem item = new FeedItem(0, "item-" + i, "http://example.com/item-" + i, - "http://example.com/items/" + i, new Date(i*60000), FeedItem.UNPLAYED, feed); + "http://example.com/items/" + i, new Date(i * 60000), FeedItem.UNPLAYED, feed); feed.getItems().add(item); if (withFeedMedia) { - item.setMedia(new FeedMedia(0, item, 4711, 0, 1024*1024, "audio/mp3", null, "http://example.com/media-" + i, - false, null, 0, 0)); + item.setMedia(new FeedMedia(0, item, 4711, 0, 1024 * 1024, "audio/mp3", null, + "http://example.com/media-" + i, false, null, 0, 0)); } } diff --git a/app/src/androidTest/java/de/test/antennapod/handler/RssParserTest.java b/app/src/androidTest/java/de/test/antennapod/handler/RssParserTest.java new file mode 100644 index 000000000..c2e319233 --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/handler/RssParserTest.java @@ -0,0 +1,63 @@ +package de.test.antennapod.handler; + +import androidx.test.filters.SmallTest; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.feed.MediaType; +import de.danoeh.antennapod.core.syndication.namespace.NSMedia; +import de.test.antennapod.util.syndication.feedgenerator.Rss2Generator; +import org.junit.Test; +import org.xmlpull.v1.XmlSerializer; + +import java.io.IOException; + +import static org.junit.Assert.assertEquals; + +/** + * Tests for RSS feeds in FeedHandler. + */ +@SmallTest +public class RssParserTest extends FeedParserTestBase { + @Test + public void testRss2Basic() throws Exception { + Feed f1 = createTestFeed(10, true); + Feed f2 = runFeedTest(f1, new Rss2Generator(), "UTF-8", Rss2Generator.FEATURE_WRITE_GUID); + feedValid(f1, f2, Feed.TYPE_RSS2); + } + + @Test + public void testImageWithWhitespace() throws Exception { + String image = "https://example.com/image.png"; + Feed f1 = createTestFeed(0, false); + f1.setImageUrl(null); + Feed f2 = runFeedTest(f1, new Rss2Generator() { + @Override + protected void writeAdditionalAttributes(XmlSerializer xml) throws IOException { + xml.startTag(null, "image"); + xml.startTag(null, "url"); + xml.text(" " + image + "\n"); + xml.endTag(null, "url"); + xml.endTag(null, "image"); + } + }, "UTF-8", 0); + assertEquals(image, f2.getImageUrl()); + } + + @Test + public void testMediaContentMime() throws Exception { + Feed f1 = createTestFeed(0, false); + f1.setImageUrl(null); + Feed f2 = runFeedTest(f1, new Rss2Generator() { + @Override + protected void writeAdditionalAttributes(XmlSerializer xml) throws IOException { + xml.setPrefix(NSMedia.NSTAG, NSMedia.NSURI); + xml.startTag(null, "item"); + xml.startTag(NSMedia.NSURI, "content"); + xml.attribute(null, "url", "https://www.example.com/file.mp4"); + xml.attribute(null, "medium", "video"); + xml.endTag(NSMedia.NSURI, "content"); + xml.endTag(null, "item"); + } + }, "UTF-8", 0); + assertEquals(MediaType.VIDEO, f2.getItems().get(0).getMedia().getMediaType()); + } +} diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java index b75044d73..fd395f7c1 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java @@ -5,8 +5,8 @@ import android.content.Intent; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.core.util.Consumer; -import androidx.test.InstrumentationRegistry; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; import de.test.antennapod.EspressoTestUtils; import org.awaitility.Awaitility; @@ -81,7 +81,7 @@ public class DownloadServiceTest { @After public void tearDown() throws Exception { DownloadService.setDownloaderFactory(origFactory); - Context context = InstrumentationRegistry.getTargetContext(); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); DownloadRequester.getInstance().cancelAllDownloads(context); context.stopService(new Intent(context, DownloadService.class)); EspressoTestUtils.tryKillDownloadService(); @@ -106,9 +106,7 @@ public class DownloadServiceTest { // OPEN: Ideally, I'd like the download time long enough so that multiple in-progress DownloadEvents // are generated (to simulate typical download), but it'll make download time quite long (1-2 seconds) // to do so - DownloadService.setDownloaderFactory(new StubDownloaderFactory(50, downloadStatus -> { - downloadStatus.setSuccessful(); - })); + DownloadService.setDownloaderFactory(new StubDownloaderFactory(50, DownloadStatus::setSuccessful)); UserPreferences.setEnqueueDownloadedEpisodes(enqueueDownloaded); withFeedItemEventListener(feedItemEventListener -> { @@ -117,7 +115,8 @@ public class DownloadServiceTest { assertFalse("The media in test should not yet been downloaded", DBReader.getFeedMedia(testMedia11.getId()).isDownloaded()); - DownloadRequester.getInstance().downloadMedia(false, InstrumentationRegistry.getTargetContext(), true, testMedia11.getItem()); + DownloadRequester.getInstance().downloadMedia(false, InstrumentationRegistry + .getInstrumentation().getTargetContext(), true, testMedia11.getItem()); Awaitility.await() .atMost(5000, TimeUnit.MILLISECONDS) .until(() -> feedItemEventListener.getEvents().size() >= numEventsExpected); @@ -144,11 +143,10 @@ public class DownloadServiceTest { } private void doTestCancelDownload_UndoEnqueue(boolean itemAlreadyInQueue) throws Exception { - Context context = InstrumentationRegistry.getTargetContext(); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); // let download take longer to ensure the test can cancel the download in time - DownloadService.setDownloaderFactory(new StubDownloaderFactory(30000, downloadStatus -> { - downloadStatus.setSuccessful(); - })); + DownloadService.setDownloaderFactory( + new StubDownloaderFactory(30000, DownloadStatus::setSuccessful)); UserPreferences.setEnqueueDownloadedEpisodes(true); UserPreferences.setEnableAutodownload(false); diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java index 301ceea6c..4ef6594e3 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/HttpDownloaderTest.java @@ -1,6 +1,6 @@ package de.test.antennapod.service.download; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.LargeTest; import android.util.Log; @@ -51,7 +51,7 @@ public class HttpDownloaderTest { @Before public void setUp() throws Exception { UserPreferences.init(InstrumentationRegistry.getInstrumentation().getTargetContext()); - destDir = InstrumentationRegistry.getTargetContext().getExternalFilesDir(DOWNLOAD_DIR); + destDir = InstrumentationRegistry.getInstrumentation().getTargetContext().getExternalFilesDir(DOWNLOAD_DIR); assertNotNull(destDir); assertTrue(destDir.exists()); httpServer = new HTTPBin(); @@ -82,7 +82,7 @@ public class HttpDownloaderTest { downloader.call(); DownloadStatus status = downloader.getResult(); assertNotNull(status); - assertTrue(status.isSuccessful() == expectedResult); + assertEquals(expectedResult, status.isSuccessful()); assertTrue(status.isDone()); // the file should not exist if the download has failed and deleteExisting was true assertTrue(!deleteExisting || new File(feedFile.getFile_url()).exists() == expectedResult); diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java index cfce069ec..c9cbf1bb2 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceMediaPlayerTest.java @@ -38,6 +38,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; @@ -173,7 +174,7 @@ public class PlaybackServiceMediaPlayerTest { throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); + assertSame(PlayerStatus.INITIALIZED, psmp.getPSMPInfo().playerStatus); assertFalse(psmp.isStartWhenPrepared()); callback.cancel(); psmp.shutdown(); @@ -214,7 +215,7 @@ public class PlaybackServiceMediaPlayerTest { throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); + assertSame(PlayerStatus.INITIALIZED, psmp.getPSMPInfo().playerStatus); assertTrue(psmp.isStartWhenPrepared()); callback.cancel(); psmp.shutdown(); @@ -256,7 +257,7 @@ public class PlaybackServiceMediaPlayerTest { if (assertionError != null) throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PREPARED); + assertSame(PlayerStatus.PREPARED, psmp.getPSMPInfo().playerStatus); callback.cancel(); psmp.shutdown(); @@ -301,7 +302,7 @@ public class PlaybackServiceMediaPlayerTest { if (assertionError != null) throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PLAYING); + assertSame(PlayerStatus.PLAYING, psmp.getPSMPInfo().playerStatus); callback.cancel(); psmp.shutdown(); } @@ -339,7 +340,7 @@ public class PlaybackServiceMediaPlayerTest { if (assertionError != null) throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); + assertSame(PlayerStatus.INITIALIZED, psmp.getPSMPInfo().playerStatus); assertFalse(psmp.isStartWhenPrepared()); callback.cancel(); psmp.shutdown(); @@ -378,7 +379,7 @@ public class PlaybackServiceMediaPlayerTest { if (assertionError != null) throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.INITIALIZED); + assertSame(PlayerStatus.INITIALIZED, psmp.getPSMPInfo().playerStatus); assertTrue(psmp.isStartWhenPrepared()); callback.cancel(); psmp.shutdown(); @@ -420,7 +421,7 @@ public class PlaybackServiceMediaPlayerTest { if (assertionError != null) throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PREPARED); + assertSame(PlayerStatus.PREPARED, psmp.getPSMPInfo().playerStatus); callback.cancel(); psmp.shutdown(); } @@ -465,7 +466,7 @@ public class PlaybackServiceMediaPlayerTest { if (assertionError != null) throw assertionError; assertTrue(res); - assertTrue(psmp.getPSMPInfo().playerStatus == PlayerStatus.PLAYING); + assertSame(PlayerStatus.PLAYING, psmp.getPSMPInfo().playerStatus); callback.cancel(); psmp.shutdown(); } diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index fce78ea4f..f039c8bdf 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -1,7 +1,7 @@ package de.test.antennapod.service.playback; import android.content.Context; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.annotation.UiThreadTest; import androidx.test.filters.LargeTest; @@ -29,6 +29,7 @@ import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; import static de.test.antennapod.util.event.FeedItemEventListener.withFeedItemEventListener; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -92,9 +93,9 @@ public class PlaybackServiceTaskManagerTest { PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM); List<FeedItem> testQueue = pstm.getQueue(); assertNotNull(testQueue); - assertTrue(queue.size() == testQueue.size()); + assertEquals(testQueue.size(), queue.size()); for (int i = 0; i < queue.size(); i++) { - assertTrue(queue.get(i).getId() == testQueue.get(i).getId()); + assertEquals(testQueue.get(i).getId(), queue.get(i).getId()); } pstm.shutdown(); } @@ -114,9 +115,9 @@ public class PlaybackServiceTaskManagerTest { assertNotNull(queue); testQueue = pstm.getQueue(); assertNotNull(testQueue); - assertTrue(queue.size() == testQueue.size()); + assertEquals(testQueue.size(), queue.size()); for (int i = 0; i < queue.size(); i++) { - assertTrue(queue.get(i).getId() == testQueue.get(i).getId()); + assertEquals(testQueue.get(i).getId(), queue.get(i).getId()); } pstm.shutdown(); } @@ -171,7 +172,7 @@ public class PlaybackServiceTaskManagerTest { } @Override - public void onSleepTimerAlmostExpired() { + public void onSleepTimerAlmostExpired(long timeLeft) { } @@ -232,7 +233,7 @@ public class PlaybackServiceTaskManagerTest { } @Override - public void onSleepTimerAlmostExpired() { + public void onSleepTimerAlmostExpired(long timeLeft) { } @@ -329,7 +330,7 @@ public class PlaybackServiceTaskManagerTest { } @Override - public void onSleepTimerAlmostExpired() { + public void onSleepTimerAlmostExpired(long timeLeft) { } @@ -375,7 +376,7 @@ public class PlaybackServiceTaskManagerTest { } @Override - public void onSleepTimerAlmostExpired() { + public void onSleepTimerAlmostExpired(long timeLeft) { } @@ -433,7 +434,7 @@ public class PlaybackServiceTaskManagerTest { } @Override - public void onSleepTimerAlmostExpired() { + public void onSleepTimerAlmostExpired(long timeLeft) { } diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java b/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java index 88d78fd14..0e38979b2 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBCleanupTests.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.LargeTest; import androidx.test.filters.SmallTest; import de.danoeh.antennapod.core.feed.Feed; @@ -64,7 +64,7 @@ public class DBCleanupTests { @Before public void setUp() throws Exception { - context = InstrumentationRegistry.getTargetContext(); + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); destFolder = new File(context.getCacheDir(), "DDCleanupTests"); destFolder.mkdir(); cleanupDestFolder(destFolder); diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java index 24cc80061..b76e0d1f3 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBNullCleanupAlgorithmTest.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.Date; import java.util.List; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.LargeTest; import androidx.test.filters.SmallTest; import de.danoeh.antennapod.core.feed.Feed; @@ -55,7 +55,7 @@ public class DBNullCleanupAlgorithmTest { @Before public void setUp() throws Exception { - context = InstrumentationRegistry.getTargetContext(); + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); destFolder = context.getExternalCacheDir(); cleanupDestFolder(destFolder); assertNotNull(destFolder); diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java index b2458bac6..409100e26 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java @@ -5,7 +5,7 @@ import java.util.Date; import java.util.List; import java.util.Random; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.SmallTest; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; @@ -38,7 +38,7 @@ public class DBReaderTest { @Before public void setUp() throws Exception { // create new database - PodDBAdapter.init(InstrumentationRegistry.getTargetContext()); + PodDBAdapter.init(InstrumentationRegistry.getInstrumentation().getTargetContext()); PodDBAdapter.deleteDatabase(); PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); @@ -52,7 +52,7 @@ public class DBReaderTest { assertNotNull(savedFeeds); assertEquals(feeds.size(), savedFeeds.size()); for (int i = 0; i < feeds.size(); i++) { - assertTrue(savedFeeds.get(i).getId() == feeds.get(i).getId()); + assertEquals(feeds.get(i).getId(), savedFeeds.get(i).getId()); } } @@ -91,7 +91,7 @@ public class DBReaderTest { List<Feed> feeds = saveFeedlist(10, 0, false); List<String> urls = DBReader.getFeedListDownloadUrls(); assertNotNull(urls); - assertTrue(urls.size() == feeds.size()); + assertEquals(feeds.size(), urls.size()); for (int i = 0; i < urls.size(); i++) { assertEquals(urls.get(i), feeds.get(i).getDownload_url()); } @@ -115,8 +115,8 @@ public class DBReaderTest { for (int j = 0; j < numItems; j++) { FeedItem item = feeds.get(i).getItems().get(j); assertNotNull(item.getFeed()); - assertTrue(item.getFeed().getId() == feeds.get(i).getId()); - assertTrue(item.getFeedId() == item.getFeed().getId()); + assertEquals(feeds.get(i).getId(), item.getFeed().getId()); + assertEquals(item.getFeed().getId(), item.getFeedId()); } } } @@ -130,9 +130,9 @@ public class DBReaderTest { feed.setItems(null); List<FeedItem> savedItems = DBReader.getFeedItemList(feed); assertNotNull(savedItems); - assertTrue(savedItems.size() == items.size()); + assertEquals(items.size(), savedItems.size()); for (int i = 0; i < savedItems.size(); i++) { - assertTrue(items.get(i).getId() == savedItems.get(i).getId()); + assertEquals(savedItems.get(i).getId(), items.get(i).getId()); } } @@ -167,10 +167,10 @@ public class DBReaderTest { List<FeedItem> queue = saveQueue(numItems); LongList ids = DBReader.getQueueIDList(); assertNotNull(ids); - assertTrue(queue.size() == ids.size()); + assertEquals(ids.size(), queue.size()); for (int i = 0; i < queue.size(); i++) { assertTrue(ids.get(i) != 0); - assertTrue(queue.get(i).getId() == ids.get(i)); + assertEquals(ids.get(i), queue.get(i).getId()); } } @@ -180,10 +180,10 @@ public class DBReaderTest { List<FeedItem> queue = saveQueue(numItems); List<FeedItem> savedQueue = DBReader.getQueue(); assertNotNull(savedQueue); - assertTrue(queue.size() == savedQueue.size()); + assertEquals(savedQueue.size(), queue.size()); for (int i = 0; i < queue.size(); i++) { assertTrue(savedQueue.get(i).getId() != 0); - assertTrue(queue.get(i).getId() == savedQueue.get(i).getId()); + assertEquals(savedQueue.get(i).getId(), queue.get(i).getId()); } } @@ -221,7 +221,7 @@ public class DBReaderTest { List<FeedItem> downloaded = saveDownloadedItems(numItems); List<FeedItem> downloaded_saved = DBReader.getDownloadedItems(); assertNotNull(downloaded_saved); - assertTrue(downloaded_saved.size() == downloaded.size()); + assertEquals(downloaded.size(), downloaded_saved.size()); for (FeedItem item : downloaded_saved) { assertNotNull(item.getMedia()); assertTrue(item.getMedia().isDownloaded()); @@ -264,7 +264,7 @@ public class DBReaderTest { } List<FeedItem> newItemsSaved = DBReader.getNewItemsList(0, Integer.MAX_VALUE); assertNotNull(newItemsSaved); - assertTrue(newItems.size() == newItemsSaved.size()); + assertEquals(newItemsSaved.size(), newItems.size()); for (FeedItem feedItem : newItemsSaved) { long savedId = feedItem.getId(); boolean found = false; diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java index 806d5a07a..84b8d0e09 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java @@ -2,7 +2,7 @@ package de.test.antennapod.storage; import android.content.Context; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.SmallTest; import org.junit.After; @@ -30,6 +30,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; +import static org.junit.Assert.assertSame; import static org.junit.Assert.assertTrue; /** @@ -46,7 +47,7 @@ public class DBTasksTest { @Before public void setUp() throws Exception { - context = InstrumentationRegistry.getTargetContext(); + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); // create new database PodDBAdapter.init(context); @@ -69,7 +70,7 @@ public class DBTasksTest { } Feed newFeed = DBTasks.updateFeed(context, feed, false); - assertTrue(newFeed == feed); + assertSame(feed, newFeed); assertTrue(feed.getId() != 0); for (FeedItem item : feed.getItems()) { assertFalse(item.isPlayed()); @@ -124,13 +125,13 @@ public class DBTasksTest { } final Feed newFeed = DBTasks.updateFeed(context, feed, false); - assertTrue(feed != newFeed); + assertNotSame(newFeed, feed); updatedFeedTest(newFeed, feedID, itemIDs, NUM_ITEMS_OLD, NUM_ITEMS_NEW); final Feed feedFromDB = DBReader.getFeed(newFeed.getId()); assertNotNull(feedFromDB); - assertTrue(feedFromDB.getId() == newFeed.getId()); + assertEquals(newFeed.getId(), feedFromDB.getId()); updatedFeedTest(feedFromDB, feedID, itemIDs, NUM_ITEMS_OLD, NUM_ITEMS_NEW); } @@ -156,7 +157,7 @@ public class DBTasksTest { feed.setItems(list); final Feed newFeed = DBTasks.updateFeed(context, feed, false); - assertTrue(feed != newFeed); + assertNotSame(newFeed, feed); final Feed feedFromDB = DBReader.getFeed(newFeed.getId()); final FeedItem feedItemFromDB = feedFromDB.getItems().get(0); @@ -186,21 +187,21 @@ public class DBTasksTest { } private void updatedFeedTest(final Feed newFeed, long feedID, List<Long> itemIDs, final int NUM_ITEMS_OLD, final int NUM_ITEMS_NEW) { - assertTrue(newFeed.getId() == feedID); - assertTrue(newFeed.getItems().size() == NUM_ITEMS_NEW + NUM_ITEMS_OLD); + assertEquals(feedID, newFeed.getId()); + assertEquals(NUM_ITEMS_NEW + NUM_ITEMS_OLD, newFeed.getItems().size()); Collections.reverse(newFeed.getItems()); Date lastDate = new Date(0); for (int i = 0; i < NUM_ITEMS_OLD; i++) { FeedItem item = newFeed.getItems().get(i); - assertTrue(item.getFeed() == newFeed); - assertTrue(item.getId() == itemIDs.get(i)); + assertSame(newFeed, item.getFeed()); + assertEquals((long) itemIDs.get(i), item.getId()); assertTrue(item.isPlayed()); assertTrue(item.getPubDate().getTime() >= lastDate.getTime()); lastDate = item.getPubDate(); } for (int i = NUM_ITEMS_OLD; i < NUM_ITEMS_NEW + NUM_ITEMS_OLD; i++) { FeedItem item = newFeed.getItems().get(i); - assertTrue(item.getFeed() == newFeed); + assertSame(newFeed, item.getFeed()); assertTrue(item.getId() != 0); assertFalse(item.isPlayed()); assertTrue(item.getPubDate().getTime() >= lastDate.getTime()); diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java index 5d18619a7..f7be8a371 100644 --- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java +++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java @@ -7,7 +7,7 @@ import android.preference.PreferenceManager; import android.util.Log; import androidx.core.util.Consumer; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.MediumTest; import org.awaitility.Awaitility; @@ -35,9 +35,9 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.FeedItemUtil; -import static androidx.test.InstrumentationRegistry.getInstrumentation; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -56,7 +56,7 @@ public class DBWriterTest { public void tearDown() throws Exception { assertTrue(PodDBAdapter.deleteDatabase()); - final Context context = InstrumentationRegistry.getTargetContext(); + final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); File testDir = context.getExternalFilesDir(TEST_FOLDER); assertNotNull(testDir); for (File f : testDir.listFiles()) { @@ -67,13 +67,13 @@ public class DBWriterTest { @Before public void setUp() throws Exception { // create new database - PodDBAdapter.init(InstrumentationRegistry.getTargetContext()); + PodDBAdapter.init(InstrumentationRegistry.getInstrumentation().getTargetContext()); PodDBAdapter.deleteDatabase(); PodDBAdapter adapter = PodDBAdapter.getInstance(); adapter.open(); adapter.close(); - Context context = InstrumentationRegistry.getTargetContext(); + Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); SharedPreferences.Editor prefEdit = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()).edit(); prefEdit.putBoolean(UserPreferences.PREF_DELETE_REMOVES_FROM_QUEUE, true).commit(); @@ -116,7 +116,8 @@ public class DBWriterTest { @Test public void testDeleteFeedMediaOfItemFileExists() throws IOException, ExecutionException, InterruptedException, TimeoutException { - File dest = new File(getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER), "testFile"); + File dest = new File(InstrumentationRegistry + .getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER), "testFile"); assertTrue(dest.createNewFile()); @@ -137,7 +138,7 @@ public class DBWriterTest { assertTrue(media.getId() != 0); assertTrue(item.getId() != 0); - DBWriter.deleteFeedMediaOfItem(getInstrumentation().getTargetContext(), media.getId()) + DBWriter.deleteFeedMediaOfItem(InstrumentationRegistry.getInstrumentation().getTargetContext(), media.getId()) .get(TIMEOUT, TimeUnit.SECONDS); media = DBReader.getFeedMedia(media.getId()); assertNotNull(media); @@ -151,7 +152,8 @@ public class DBWriterTest { throws IOException, ExecutionException, InterruptedException, TimeoutException { assertTrue(UserPreferences.shouldDeleteRemoveFromQueue()); - File dest = new File(getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER), "testFile"); + File dest = new File(InstrumentationRegistry + .getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER), "testFile"); assertTrue(dest.createNewFile()); @@ -177,7 +179,7 @@ public class DBWriterTest { queue = DBReader.getQueue(); assertTrue(queue.size() != 0); - DBWriter.deleteFeedMediaOfItem(getInstrumentation().getTargetContext(), media.getId()); + DBWriter.deleteFeedMediaOfItem(InstrumentationRegistry.getInstrumentation().getTargetContext(), media.getId()); Awaitility.await().until(() -> !dest.exists()); media = DBReader.getFeedMedia(media.getId()); assertNotNull(media); @@ -185,12 +187,12 @@ public class DBWriterTest { assertFalse(media.isDownloaded()); assertNull(media.getFile_url()); queue = DBReader.getQueue(); - assertTrue(queue.size() == 0); + assertEquals(0, queue.size()); } @Test public void testDeleteFeed() throws ExecutionException, InterruptedException, IOException, TimeoutException { - File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); + File destFolder = InstrumentationRegistry.getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); assertNotNull(destFolder); Feed feed = new Feed("url", null, "title"); @@ -221,7 +223,8 @@ public class DBWriterTest { assertTrue(item.getMedia().getId() != 0); } - DBWriter.deleteFeed(getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.deleteFeed(InstrumentationRegistry + .getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); // check if files still exist for (File f : itemFiles) { @@ -231,14 +234,14 @@ public class DBWriterTest { adapter = PodDBAdapter.getInstance(); adapter.open(); Cursor c = adapter.getFeedCursor(feed.getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); for (FeedItem item : feed.getItems()) { c = adapter.getFeedItemCursor(String.valueOf(item.getId())); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); c = adapter.getSingleFeedMediaCursor(item.getMedia().getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); } adapter.close(); @@ -246,7 +249,7 @@ public class DBWriterTest { @Test public void testDeleteFeedNoItems() throws IOException, ExecutionException, InterruptedException, TimeoutException { - File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); + File destFolder = InstrumentationRegistry.getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); assertNotNull(destFolder); Feed feed = new Feed("url", null, "title"); @@ -260,19 +263,20 @@ public class DBWriterTest { assertTrue(feed.getId() != 0); - DBWriter.deleteFeed(getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.deleteFeed(InstrumentationRegistry + .getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); Cursor c = adapter.getFeedCursor(feed.getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); adapter.close(); } @Test public void testDeleteFeedNoFeedMedia() throws IOException, ExecutionException, InterruptedException, TimeoutException { - File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); + File destFolder = InstrumentationRegistry.getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); assertNotNull(destFolder); Feed feed = new Feed("url", null, "title"); @@ -297,17 +301,18 @@ public class DBWriterTest { assertTrue(item.getId() != 0); } - DBWriter.deleteFeed(getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.deleteFeed(InstrumentationRegistry + .getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); Cursor c = adapter.getFeedCursor(feed.getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); for (FeedItem item : feed.getItems()) { c = adapter.getFeedItemCursor(String.valueOf(item.getId())); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); } adapter.close(); @@ -315,7 +320,7 @@ public class DBWriterTest { @Test public void testDeleteFeedWithQueueItems() throws ExecutionException, InterruptedException, TimeoutException { - File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); + File destFolder = InstrumentationRegistry.getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); assertNotNull(destFolder); Feed feed = new Feed("url", null, "title"); @@ -344,39 +349,39 @@ public class DBWriterTest { } - List<FeedItem> queue = new ArrayList<>(); - queue.addAll(feed.getItems()); + List<FeedItem> queue = new ArrayList<>(feed.getItems()); adapter.open(); adapter.setQueue(queue); Cursor queueCursor = adapter.getQueueIDCursor(); - assertTrue(queueCursor.getCount() == queue.size()); + assertEquals(queue.size(), queueCursor.getCount()); queueCursor.close(); adapter.close(); - DBWriter.deleteFeed(getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.deleteFeed(InstrumentationRegistry + .getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); adapter.open(); Cursor c = adapter.getFeedCursor(feed.getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); for (FeedItem item : feed.getItems()) { c = adapter.getFeedItemCursor(String.valueOf(item.getId())); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); c = adapter.getSingleFeedMediaCursor(item.getMedia().getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); } c = adapter.getQueueCursor(); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); adapter.close(); } @Test public void testDeleteFeedNoDownloadedFiles() throws ExecutionException, InterruptedException, TimeoutException { - File destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); + File destFolder = InstrumentationRegistry.getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER); assertNotNull(destFolder); Feed feed = new Feed("url", null, "title"); @@ -404,19 +409,20 @@ public class DBWriterTest { assertTrue(item.getMedia().getId() != 0); } - DBWriter.deleteFeed(getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.deleteFeed(InstrumentationRegistry + .getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); Cursor c = adapter.getFeedCursor(feed.getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); for (FeedItem item : feed.getItems()) { c = adapter.getFeedItemCursor(String.valueOf(item.getId())); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); c = adapter.getSingleFeedMediaCursor(item.getMedia().getId()); - assertTrue(c.getCount() == 0); + assertEquals(0, c.getCount()); c.close(); } adapter.close(); @@ -440,7 +446,8 @@ public class DBWriterTest { adapter.close(); List<FeedItem> itemsToDelete = feed.getItems().subList(0, 2); - DBWriter.deleteFeedItems(getInstrumentation().getTargetContext(), itemsToDelete).get(TIMEOUT, TimeUnit.SECONDS); + DBWriter.deleteFeedItems(InstrumentationRegistry.getInstrumentation() + .getTargetContext(), itemsToDelete).get(TIMEOUT, TimeUnit.SECONDS); adapter = PodDBAdapter.getInstance(); adapter.open(); @@ -500,11 +507,11 @@ public class DBWriterTest { assertNotNull(media); assertNotNull(media.getPlaybackCompletionDate()); - assertFalse(OLD_DATE == media.getPlaybackCompletionDate().getTime()); + assertNotEquals(media.getPlaybackCompletionDate().getTime(), OLD_DATE); } private Feed queueTestSetupMultipleItems(final int numItems) throws InterruptedException, ExecutionException, TimeoutException { - final Context context = getInstrumentation().getTargetContext(); + final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); UserPreferences.setEnqueueLocation(UserPreferences.EnqueueLocation.BACK); Feed feed = new Feed("url", null, "title"); feed.setItems(new ArrayList<>()); @@ -533,7 +540,7 @@ public class DBWriterTest { @Test public void testAddQueueItemSingleItem() throws InterruptedException, ExecutionException, TimeoutException { - final Context context = getInstrumentation().getTargetContext(); + final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); Feed feed = new Feed("url", null, "title"); feed.setItems(new ArrayList<>()); FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), FeedItem.PLAYED, feed); @@ -551,14 +558,14 @@ public class DBWriterTest { adapter.open(); Cursor cursor = adapter.getQueueIDCursor(); assertTrue(cursor.moveToFirst()); - assertTrue(cursor.getLong(0) == item.getId()); + assertEquals(item.getId(), cursor.getLong(0)); cursor.close(); adapter.close(); } @Test public void testAddQueueItemSingleItemAlreadyInQueue() throws InterruptedException, ExecutionException, TimeoutException { - final Context context = getInstrumentation().getTargetContext(); + final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); Feed feed = new Feed("url", null, "title"); feed.setItems(new ArrayList<>()); FeedItem item = new FeedItem(0, "title", "id", "link", new Date(), FeedItem.PLAYED, feed); @@ -576,7 +583,7 @@ public class DBWriterTest { adapter.open(); Cursor cursor = adapter.getQueueIDCursor(); assertTrue(cursor.moveToFirst()); - assertTrue(cursor.getLong(0) == item.getId()); + assertEquals(item.getId(), cursor.getLong(0)); cursor.close(); adapter.close(); @@ -585,8 +592,8 @@ public class DBWriterTest { adapter.open(); cursor = adapter.getQueueIDCursor(); assertTrue(cursor.moveToFirst()); - assertTrue(cursor.getLong(0) == item.getId()); - assertTrue(cursor.getCount() == 1); + assertEquals(item.getId(), cursor.getLong(0)); + assertEquals(1, cursor.getCount()); cursor.close(); adapter.close(); } @@ -600,7 +607,7 @@ public class DBWriterTest { adapter.open(); Cursor cursor = adapter.getQueueIDCursor(); assertTrue(cursor.moveToFirst()); - assertTrue(cursor.getCount() == NUM_ITEMS); + assertEquals(NUM_ITEMS, cursor.getCount()); List<Long> expectedIds = FeedItemUtil.getIdList(feed.getItems()); List<Long> actualIds = new ArrayList<>(); for (int i = 0; i < NUM_ITEMS; i++) { @@ -630,7 +637,7 @@ public class DBWriterTest { @Test public void testRemoveQueueItem() throws InterruptedException, ExecutionException, TimeoutException { final int NUM_ITEMS = 10; - final Context context = getInstrumentation().getTargetContext(); + final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); Feed feed = createTestFeed(NUM_ITEMS); for (int removeIndex = 0; removeIndex < NUM_ITEMS; removeIndex++) { @@ -644,7 +651,7 @@ public class DBWriterTest { adapter = PodDBAdapter.getInstance(); adapter.open(); Cursor queue = adapter.getQueueIDCursor(); - assertTrue(queue.getCount() == NUM_ITEMS - 1); + assertEquals(NUM_ITEMS - 1, queue.getCount()); for (int i = 0; i < queue.getCount(); i++) { assertTrue(queue.moveToPosition(i)); final long queueID = queue.getLong(0); @@ -666,7 +673,7 @@ public class DBWriterTest { // final int NUM_ITEMS = 5; final int NUM_IN_QUEUE = NUM_ITEMS - 1; // the last one not in queue for boundary condition - final Context context = getInstrumentation().getTargetContext(); + final Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); Feed feed = createTestFeed(NUM_ITEMS); List<FeedItem> itemsToAdd = feed.getItems().subList(0, NUM_IN_QUEUE); @@ -733,11 +740,11 @@ public class DBWriterTest { adapter = PodDBAdapter.getInstance(); adapter.open(); Cursor queue = adapter.getQueueIDCursor(); - assertTrue(queue.getCount() == NUM_ITEMS); + assertEquals(NUM_ITEMS, queue.getCount()); assertTrue(queue.moveToPosition(from)); - assertFalse(queue.getLong(0) == fromID); + assertNotEquals(fromID, queue.getLong(0)); assertTrue(queue.moveToPosition(to)); - assertTrue(queue.getLong(0) == fromID); + assertEquals(fromID, queue.getLong(0)); queue.close(); adapter.close(); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/FeedSettingsTest.java b/app/src/androidTest/java/de/test/antennapod/ui/FeedSettingsTest.java new file mode 100644 index 000000000..8bd4f1be6 --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/ui/FeedSettingsTest.java @@ -0,0 +1,79 @@ +package de.test.antennapod.ui; + +import android.content.Intent; +import androidx.test.espresso.intent.rule.IntentsTestRule; +import androidx.test.platform.app.InstrumentationRegistry; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.core.feed.Feed; +import de.test.antennapod.EspressoTestUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import static androidx.test.espresso.Espresso.onView; +import static androidx.test.espresso.action.ViewActions.click; +import static androidx.test.espresso.matcher.ViewMatchers.isDescendantOfA; +import static androidx.test.espresso.matcher.ViewMatchers.isDisplayed; +import static androidx.test.espresso.matcher.ViewMatchers.isRoot; +import static androidx.test.espresso.matcher.ViewMatchers.withId; +import static androidx.test.espresso.matcher.ViewMatchers.withText; +import static de.test.antennapod.EspressoTestUtils.clickPreference; +import static de.test.antennapod.EspressoTestUtils.waitForView; +import static org.hamcrest.Matchers.allOf; + +@RunWith(AndroidJUnit4.class) +public class FeedSettingsTest { + private UITestUtils uiTestUtils; + private Feed feed; + + @Rule + public IntentsTestRule<MainActivity> activityRule = new IntentsTestRule<>(MainActivity.class, false, false); + + @Before + public void setUp() throws Exception { + uiTestUtils = new UITestUtils(InstrumentationRegistry.getInstrumentation().getTargetContext()); + uiTestUtils.setup(); + + EspressoTestUtils.clearPreferences(); + EspressoTestUtils.clearDatabase(); + + uiTestUtils.addLocalFeedData(false); + feed = uiTestUtils.hostedFeeds.get(0); + Intent intent = new Intent(InstrumentationRegistry.getInstrumentation().getTargetContext(), MainActivity.class); + intent.putExtra(MainActivity.EXTRA_FEED_ID, feed.getId()); + activityRule.launchActivity(intent); + } + + @After + public void tearDown() throws Exception { + uiTestUtils.tearDown(); + } + + @Test + public void testClickFeedSettings() { + onView(isRoot()).perform(waitForView(allOf(isDescendantOfA(withId(R.id.appBar)), + withText(feed.getTitle()), isDisplayed()), 1000)); + onView(withId(R.id.butShowSettings)).perform(click()); + + clickPreference(R.string.keep_updated); + + clickPreference(R.string.authentication_label); + onView(withText(R.string.cancel_label)).perform(click()); + + clickPreference(R.string.playback_speed); + onView(withText(R.string.cancel_label)).perform(click()); + + clickPreference(R.string.pref_feed_skip); + onView(withText(R.string.cancel_label)).perform(click()); + + clickPreference(R.string.auto_delete_label); + onView(withText(R.string.cancel_label)).perform(click()); + + clickPreference(R.string.feed_volume_reduction); + onView(withText(R.string.cancel_label)).perform(click()); + } +} diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java index 47988d23f..c7520a2e6 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java @@ -2,10 +2,10 @@ package de.test.antennapod.ui; import android.app.Activity; import android.content.Intent; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.espresso.Espresso; import androidx.test.espresso.intent.rule.IntentsTestRule; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.ext.junit.runners.AndroidJUnit4; import com.robotium.solo.Solo; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; @@ -20,7 +20,6 @@ import org.junit.runner.RunWith; import java.io.IOException; -import static androidx.test.InstrumentationRegistry.getInstrumentation; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.replaceText; @@ -55,10 +54,10 @@ public class MainActivityTest { mActivityRule.launchActivity(new Intent()); - uiTestUtils = new UITestUtils(InstrumentationRegistry.getTargetContext()); + uiTestUtils = new UITestUtils(InstrumentationRegistry.getInstrumentation().getTargetContext()); uiTestUtils.setup(); - solo = new Solo(getInstrumentation(), mActivityRule.getActivity()); + solo = new Solo(InstrumentationRegistry.getInstrumentation(), mActivityRule.getActivity()); } @After diff --git a/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java b/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java index bf4dae882..ade5ea298 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java @@ -1,10 +1,10 @@ package de.test.antennapod.ui; import android.content.Intent; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.espresso.contrib.DrawerActions; import androidx.test.espresso.intent.rule.IntentsTestRule; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.ext.junit.runners.AndroidJUnit4; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.activity.PreferenceActivity; @@ -59,7 +59,7 @@ public class NavigationDrawerTest { @Before public void setUp() throws IOException { - uiTestUtils = new UITestUtils(InstrumentationRegistry.getTargetContext()); + uiTestUtils = new UITestUtils(InstrumentationRegistry.getInstrumentation().getTargetContext()); uiTestUtils.setup(); EspressoTestUtils.clearPreferences(); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java index 6741cbc86..ddce8b1e3 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -7,7 +7,6 @@ import android.preference.PreferenceManager; import androidx.annotation.StringRes; import androidx.test.filters.LargeTest; import androidx.test.rule.ActivityTestRule; -import com.google.android.material.snackbar.Snackbar; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.PreferenceActivity; import de.danoeh.antennapod.core.preferences.UserPreferences; @@ -31,7 +30,6 @@ import java.util.concurrent.TimeUnit; import static androidx.test.espresso.Espresso.onView; import static androidx.test.espresso.action.ViewActions.click; import static androidx.test.espresso.action.ViewActions.replaceText; -import static androidx.test.espresso.action.ViewActions.scrollTo; import static androidx.test.espresso.action.ViewActions.swipeDown; import static androidx.test.espresso.action.ViewActions.swipeUp; import static androidx.test.espresso.assertion.ViewAssertions.doesNotExist; @@ -46,7 +44,6 @@ import static de.test.antennapod.EspressoTestUtils.clickPreference; import static de.test.antennapod.EspressoTestUtils.waitForView; import static java.util.concurrent.TimeUnit.MILLISECONDS; import static junit.framework.TestCase.assertTrue; -import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.endsWith; import static org.hamcrest.Matchers.not; @@ -235,12 +232,10 @@ public class PreferencesTest { @Test public void testPlaybackSpeeds() { clickPreference(R.string.playback_pref); - clickPreference(R.string.media_player); - onView(withText(R.string.media_player_exoplayer)).perform(click()); - clickPreference(R.string.pref_playback_speed_title); - onView(isRoot()).perform(waitForView(withText("0.50"), 1000)); - onView(withText("0.50")).check(matches(isDisplayed())); - onView(withText(R.string.cancel_label)).perform(click()); + clickPreference(R.string.playback_speed); + onView(isRoot()).perform(waitForView(withText("0.75"), 1000)); + onView(withText("0.75")).check(matches(isDisplayed())); + onView(withText(R.string.close_label)).perform(click()); } @Test diff --git a/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java b/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java index b5c7dd0d1..634904f71 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/QueueFragmentTest.java @@ -4,7 +4,7 @@ import android.content.Intent; import android.view.View; import androidx.test.espresso.Espresso; import androidx.test.espresso.intent.rule.IntentsTestRule; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.ext.junit.runners.AndroidJUnit4; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.fragment.QueueFragment; diff --git a/app/src/androidTest/java/de/test/antennapod/ui/SpeedChangeTest.java b/app/src/androidTest/java/de/test/antennapod/ui/SpeedChangeTest.java index 6c26078c1..ac5887069 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/SpeedChangeTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/SpeedChangeTest.java @@ -5,7 +5,7 @@ import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; import androidx.test.rule.ActivityTestRule; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.ext.junit.runners.AndroidJUnit4; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.FeedItem; @@ -25,6 +25,7 @@ import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; +import java.util.Arrays; import java.util.List; import java.util.concurrent.TimeUnit; @@ -70,7 +71,7 @@ public class SpeedChangeTest { List<FeedItem> queue = DBReader.getQueue(); PlaybackPreferences.writeMediaPlaying(queue.get(0).getMedia(), PlayerStatus.PAUSED, false); availableSpeeds = new String[] {"1.00", "2.00", "3.00"}; - UserPreferences.setPlaybackSpeedArray(availableSpeeds); + UserPreferences.setPlaybackSpeedArray(Arrays.asList(1.0f, 2.0f, 3.0f)); EspressoTestUtils.tryKillPlaybackService(); activityRule.launchActivity(new Intent().putExtra(MainActivity.EXTRA_OPEN_PLAYER, true)); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/TextOnlyFeedsTest.java b/app/src/androidTest/java/de/test/antennapod/ui/TextOnlyFeedsTest.java index 782bb09d8..488c87052 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/TextOnlyFeedsTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/TextOnlyFeedsTest.java @@ -3,7 +3,7 @@ package de.test.antennapod.ui; import android.content.Intent; import androidx.test.espresso.intent.rule.IntentsTestRule; import androidx.test.platform.app.InstrumentationRegistry; -import androidx.test.runner.AndroidJUnit4; +import androidx.test.ext.junit.runners.AndroidJUnit4; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.core.feed.Feed; diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java index 1dddca6b5..b989b519e 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java @@ -9,7 +9,7 @@ import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.test.antennapod.util.service.download.HTTPBin; -import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator; +import de.test.antennapod.util.syndication.feedgenerator.Rss2Generator; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -78,7 +78,7 @@ public class UITestUtils { private String hostFeed(Feed feed) throws IOException { File feedFile = new File(hostedFeedDir, feed.getTitle()); FileOutputStream out = new FileOutputStream(feedFile); - RSS2Generator generator = new RSS2Generator(); + Rss2Generator generator = new Rss2Generator(); generator.writeFeed(feed, out, "UTF-8", 0); out.close(); int id = server.serveFile(feedFile); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java index a183b648e..60516454f 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java @@ -5,7 +5,7 @@ import java.net.HttpURLConnection; import java.net.URL; import java.util.List; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.LargeTest; import androidx.test.filters.MediumTest; import de.danoeh.antennapod.core.feed.Feed; @@ -29,7 +29,7 @@ public class UITestUtilsTest { @Before public void setUp() throws Exception { - uiTestUtils = new UITestUtils(InstrumentationRegistry.getTargetContext()); + uiTestUtils = new UITestUtils(InstrumentationRegistry.getInstrumentation().getTargetContext()); uiTestUtils.setup(); } diff --git a/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java b/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java index 6f8042d61..93e5bcb74 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/FilenameGeneratorTest.java @@ -21,32 +21,28 @@ import static org.junit.Assert.assertTrue; @SmallTest public class FilenameGeneratorTest { - private static final String VALID1 = "abc abc"; - private static final String INVALID1 = "ab/c: <abc"; - private static final String INVALID2 = "abc abc "; - public FilenameGeneratorTest() { super(); } @Test public void testGenerateFileName() throws IOException { - String result = FileNameGenerator.generateFileName(VALID1); - assertEquals(result, VALID1); + String result = FileNameGenerator.generateFileName("abc abc"); + assertEquals(result, "abc abc"); createFiles(result); } @Test public void testGenerateFileName1() throws IOException { - String result = FileNameGenerator.generateFileName(INVALID1); - assertEquals(result, VALID1); + String result = FileNameGenerator.generateFileName("ab/c: <abc"); + assertEquals(result, "abc abc"); createFiles(result); } @Test public void testGenerateFileName2() throws IOException { - String result = FileNameGenerator.generateFileName(INVALID2); - assertEquals(result, VALID1); + String result = FileNameGenerator.generateFileName("abc abc "); + assertEquals(result, "abc abc"); createFiles(result); } @@ -63,6 +59,12 @@ public class FilenameGeneratorTest { } @Test + public void testFeedTitleContainsAccents() { + String result = FileNameGenerator.generateFileName("Äàáâãå"); + assertEquals("Aaaaaa", result); + } + + @Test public void testInvalidInput() { String result = FileNameGenerator.generateFileName("???"); assertFalse(TextUtils.isEmpty(result)); @@ -97,14 +99,6 @@ public class FilenameGeneratorTest { assertTrue(testFile.exists()); testFile.delete(); assertTrue(testFile.createNewFile()); - - } - - @After - public void tearDown() { - Context context = InstrumentationRegistry.getInstrumentation().getTargetContext(); - File f = new File(context.getExternalCacheDir(), VALID1); - f.delete(); } } diff --git a/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java b/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java index 4893d7d82..7f26ff612 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/URLCheckerTest.java @@ -57,6 +57,13 @@ public class URLCheckerTest { } @Test + public void testItpcProtocolWithScheme() { + final String in = "itpc://https://example.com"; + final String out = URLChecker.prepareURL(in); + assertEquals("https://example.com", out); + } + + @Test public void testWhiteSpaceUrlShouldNotAppend() { final String in = "\n http://example.com \t"; final String out = URLChecker.prepareURL(in); diff --git a/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java b/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java index 59b9ceaca..ed37b7daa 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/playback/TimelineTest.java @@ -2,7 +2,7 @@ package de.test.antennapod.util.playback; import android.content.Context; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.filters.SmallTest; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -35,7 +35,7 @@ public class TimelineTest { @Before public void setUp() { - context = InstrumentationRegistry.getTargetContext(); + context = InstrumentationRegistry.getInstrumentation().getTargetContext(); } private Playable newTestPlayable(List<Chapter> chapters, String shownotes, int duration) { diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java index 2dda77524..b213a5efa 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/FeedDiscovererTest.java @@ -1,11 +1,12 @@ package de.test.antennapod.util.syndication; -import androidx.test.InstrumentationRegistry; +import androidx.test.platform.app.InstrumentationRegistry; import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import java.io.File; import java.io.FileOutputStream; +import java.nio.charset.Charset; import java.util.Map; import de.danoeh.antennapod.core.util.syndication.FeedDiscoverer; @@ -29,7 +30,8 @@ public class FeedDiscovererTest { @Before public void setUp() throws Exception { fd = new FeedDiscoverer(); - testDir = new File(InstrumentationRegistry.getTargetContext().getFilesDir(), "FeedDiscovererTest"); + testDir = new File(InstrumentationRegistry + .getInstrumentation().getTargetContext().getFilesDir(), "FeedDiscovererTest"); testDir.mkdir(); assertTrue(testDir.exists()); } @@ -67,7 +69,7 @@ public class FeedDiscovererTest { } else { File testFile = new File(testDir, "feed"); FileOutputStream out = new FileOutputStream(testFile); - IOUtils.write(html, out); + IOUtils.write(html, out, Charset.forName("UTF-8")); out.close(); res = fd.findLinks(testFile, base); } diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java index 8d2408b45..c80e3bbb1 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java @@ -15,7 +15,7 @@ import de.danoeh.antennapod.core.util.DateUtils; /** * Creates Atom feeds. See FeedGenerator for more information. */ -public class AtomGenerator implements FeedGenerator{ +public class AtomGenerator implements FeedGenerator { private static final String NS_ATOM = "http://www.w3.org/2005/Atom"; @@ -119,7 +119,13 @@ public class AtomGenerator implements FeedGenerator{ } } + writeAdditionalAttributes(xml); + xml.endTag(null, "feed"); xml.endDocument(); } + + protected void writeAdditionalAttributes(XmlSerializer xml) throws IOException { + + } } diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/Rss2Generator.java index 5f8b4d18c..a9a6f91e7 100644 --- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java +++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/Rss2Generator.java @@ -14,15 +14,19 @@ import de.danoeh.antennapod.core.util.DateUtils; /** * Creates RSS 2.0 feeds. See FeedGenerator for more information. */ -public class RSS2Generator implements FeedGenerator{ +public class Rss2Generator implements FeedGenerator { public static final long FEATURE_WRITE_GUID = 1; @Override public void writeFeed(Feed feed, OutputStream outputStream, String encoding, long flags) throws IOException { - if (feed == null) throw new IllegalArgumentException("feed = null"); - if (outputStream == null) throw new IllegalArgumentException("outputStream = null"); - if (encoding == null) throw new IllegalArgumentException("encoding = null"); + if (feed == null) { + throw new IllegalArgumentException("feed = null"); + } else if (outputStream == null) { + throw new IllegalArgumentException("outputStream = null"); + } else if (encoding == null) { + throw new IllegalArgumentException("encoding = null"); + } XmlSerializer xml = Xml.newSerializer(); xml.setOutput(outputStream, encoding); @@ -111,9 +115,15 @@ public class RSS2Generator implements FeedGenerator{ } } + writeAdditionalAttributes(xml); + xml.endTag(null, "channel"); xml.endTag(null, "rss"); xml.endDocument(); } + + protected void writeAdditionalAttributes(XmlSerializer xml) throws IOException { + + } } |