diff --git a/api/build.gradle b/api/build.gradle index 48edd34c..5a7c8119 100644 --- a/api/build.gradle +++ b/api/build.gradle @@ -48,7 +48,7 @@ dependencies { androidTestImplementation 'androidx.test:runner:1.3.0' androidTestImplementation 'androidx.test:rules:1.3.0' androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0' - androidTestImplementation 'com.squareup.okhttp3:mockwebserver:4.9.0' + testImplementation 'com.squareup.okhttp3:mockwebserver:4.9.0' androidTestImplementation "org.koin:koin-test:2.1.6" testImplementation "org.koin:koin-test:2.1.6" diff --git a/api/src/main/java/com/readrops/api/utils/AuthInterceptor.kt b/api/src/main/java/com/readrops/api/utils/AuthInterceptor.kt index 76828f4b..9c0e6797 100644 --- a/api/src/main/java/com/readrops/api/utils/AuthInterceptor.kt +++ b/api/src/main/java/com/readrops/api/utils/AuthInterceptor.kt @@ -1,14 +1,9 @@ package com.readrops.api.utils -import android.net.Uri import com.readrops.api.services.Credentials -import com.readrops.api.services.freshrss.FreshRSSService -import com.readrops.api.services.nextcloudnews.NextNewsService -import com.readrops.db.entities.account.Account -import com.readrops.db.entities.account.AccountType import okhttp3.Interceptor import okhttp3.Response -import java.lang.IllegalArgumentException +import java.net.URI class AuthInterceptor(var credentials: Credentials? = null) : Interceptor { @@ -18,11 +13,11 @@ class AuthInterceptor(var credentials: Credentials? = null) : Interceptor { if (credentials != null) { if (credentials!!.url != null) { - val uri = Uri.parse(credentials!!.url) + val uri = URI.create(credentials!!.url) urlBuilder .scheme(uri.scheme!!) .host(uri.host!!) - .encodedPath(uri.encodedPath + chain.request().url.encodedPath) + .encodedPath(uri.path + chain.request().url.encodedPath) } if (credentials!!.authorization != null) { diff --git a/api/src/test/java/com/readrops/api/TestUtils.kt b/api/src/test/java/com/readrops/api/TestUtils.kt new file mode 100644 index 00000000..dac26c4c --- /dev/null +++ b/api/src/test/java/com/readrops/api/TestUtils.kt @@ -0,0 +1,9 @@ +package com.readrops.api + +import java.io.InputStream + +object TestUtils { + + fun loadResource(path: String): InputStream = + javaClass.classLoader?.getResourceAsStream(path)!! +} \ No newline at end of file diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/LocalRSSDataSourceTest.kt b/api/src/test/java/com/readrops/api/localfeed/LocalRSSDataSourceTest.kt similarity index 88% rename from api/src/androidTest/java/com/readrops/api/localfeed/LocalRSSDataSourceTest.kt rename to api/src/test/java/com/readrops/api/localfeed/LocalRSSDataSourceTest.kt index f23d00d5..495ba5e3 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/LocalRSSDataSourceTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/LocalRSSDataSourceTest.kt @@ -1,10 +1,7 @@ package com.readrops.api.localfeed import android.accounts.NetworkErrorException -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry -import com.icapps.niddler.interceptor.okhttp.NiddlerOkHttpInterceptor +import com.readrops.api.TestUtils import com.readrops.api.apiModule import com.readrops.api.utils.ApiUtils import com.readrops.api.utils.AuthInterceptor @@ -21,8 +18,6 @@ import org.junit.After import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith -import org.koin.android.ext.koin.androidContext import org.koin.dsl.module import org.koin.test.KoinTest import org.koin.test.KoinTestRule @@ -31,10 +26,8 @@ import java.net.HttpURLConnection import java.util.concurrent.TimeUnit -@RunWith(AndroidJUnit4::class) class LocalRSSDataSourceTest : KoinTest { - private val context by inject() private lateinit var url: HttpUrl private val mockServer: MockWebServer = MockWebServer() @@ -42,7 +35,6 @@ class LocalRSSDataSourceTest : KoinTest { @get:Rule val koinTestRule = KoinTestRule.create { - androidContext(InstrumentationRegistry.getInstrumentation().context) modules(apiModule, module { single(override = true) { OkHttpClient.Builder() @@ -67,7 +59,7 @@ class LocalRSSDataSourceTest : KoinTest { @Test fun successfulQueryTest() { - val stream = context.resources.assets.open("localfeed/rss_feed.xml") + val stream = TestUtils.loadResource("localfeed/rss_feed.xml") mockServer.enqueue(MockResponse().setResponseCode(HttpURLConnection.HTTP_OK) .addHeader(ApiUtils.CONTENT_TYPE_HEADER, "application/xml; charset=UTF-8") @@ -91,7 +83,7 @@ class LocalRSSDataSourceTest : KoinTest { @Test fun headersTest() { - val stream = context.resources.assets.open("localfeed/rss_feed.xml") + val stream = TestUtils.loadResource("localfeed/rss_feed.xml") mockServer.enqueue(MockResponse().setResponseCode(HttpURLConnection.HTTP_OK) .addHeader("Content-Type", "application/rss+xml; charset=UTF-8") @@ -108,7 +100,7 @@ class LocalRSSDataSourceTest : KoinTest { @Test fun jsonFeedTest() { - val stream = context.resources.assets.open("localfeed/json/json_feed.json") + val stream = TestUtils.loadResource("localfeed/json/json_feed.json") mockServer.enqueue(MockResponse().setResponseCode(HttpURLConnection.HTTP_OK) .addHeader(ApiUtils.CONTENT_TYPE_HEADER, "application/feed+json") @@ -122,7 +114,7 @@ class LocalRSSDataSourceTest : KoinTest { @Test fun specialCasesAtomTest() { - val stream = context.resources.assets.open("localfeed/atom/atom_feed_no_url_siteurl.xml") + val stream = TestUtils.loadResource("localfeed/atom/atom_feed_no_url_siteurl.xml") mockServer.enqueue(MockResponse().setResponseCode(HttpURLConnection.HTTP_OK) .addHeader(ApiUtils.CONTENT_TYPE_HEADER, "application/atom+xml") @@ -136,7 +128,7 @@ class LocalRSSDataSourceTest : KoinTest { @Test fun specialCasesRSS1Test() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_feed_no_url_siteurl.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_feed_no_url_siteurl.xml") mockServer.enqueue(MockResponse().setResponseCode(HttpURLConnection.HTTP_OK) .addHeader(ApiUtils.CONTENT_TYPE_HEADER, "application/rdf+xml") diff --git a/api/src/test/java/com/readrops/api/localfeed/XmlAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/XmlAdapterTest.kt index 64e73791..bc3f729d 100644 --- a/api/src/test/java/com/readrops/api/localfeed/XmlAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/XmlAdapterTest.kt @@ -7,18 +7,23 @@ import com.readrops.api.localfeed.rss1.RSS1ItemsAdapter import com.readrops.api.localfeed.rss2.RSS2FeedAdapter import com.readrops.api.localfeed.rss2.RSS2ItemsAdapter import junit.framework.TestCase.assertTrue -import org.junit.Assert +import org.junit.Rule import org.junit.Test +import org.junit.rules.ExpectedException class XmlAdapterTest { + @get:Rule + val expectedException: ExpectedException = ExpectedException.none() + @Test fun xmlFeedAdapterFactoryTest() { assertTrue(XmlAdapter.xmlFeedAdapterFactory(LocalRSSHelper.RSSType.RSS_1) is RSS1FeedAdapter) assertTrue(XmlAdapter.xmlFeedAdapterFactory(LocalRSSHelper.RSSType.RSS_2) is RSS2FeedAdapter) assertTrue(XmlAdapter.xmlFeedAdapterFactory(LocalRSSHelper.RSSType.ATOM) is ATOMFeedAdapter) - Assert.assertThrows(IllegalArgumentException::class.java) { XmlAdapter.xmlFeedAdapterFactory(LocalRSSHelper.RSSType.UNKNOWN) } + expectedException.expect(IllegalArgumentException::class.java) + XmlAdapter.xmlFeedAdapterFactory(LocalRSSHelper.RSSType.UNKNOWN) } @Test @@ -27,6 +32,7 @@ class XmlAdapterTest { assertTrue(XmlAdapter.xmlItemsAdapterFactory(LocalRSSHelper.RSSType.RSS_2) is RSS2ItemsAdapter) assertTrue(XmlAdapter.xmlItemsAdapterFactory(LocalRSSHelper.RSSType.ATOM) is ATOMItemsAdapter) - Assert.assertThrows(IllegalArgumentException::class.java) { XmlAdapter.xmlItemsAdapterFactory(LocalRSSHelper.RSSType.UNKNOWN) } + expectedException.expect(IllegalArgumentException::class.java) + XmlAdapter.xmlItemsAdapterFactory(LocalRSSHelper.RSSType.UNKNOWN) } } \ No newline at end of file diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/atom/ATOMFeedAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/atom/ATOMFeedAdapterTest.kt similarity index 61% rename from api/src/androidTest/java/com/readrops/api/localfeed/atom/ATOMFeedAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/atom/ATOMFeedAdapterTest.kt index 57711b22..18cb0686 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/atom/ATOMFeedAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/atom/ATOMFeedAdapterTest.kt @@ -1,22 +1,16 @@ package com.readrops.api.localfeed.atom -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import junit.framework.TestCase.assertEquals import org.junit.Test -import org.junit.runner.RunWith -@RunWith(AndroidJUnit4::class) class ATOMFeedAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = ATOMFeedAdapter() @Test fun normalCasesTest() { - val stream = context.assets.open("localfeed/atom/atom_feed.xml") + val stream = TestUtils.loadResource("localfeed/atom/atom_feed.xml") val feed = adapter.fromXml(stream) diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/atom/ATOMItemsAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/atom/ATOMItemsAdapterTest.kt similarity index 51% rename from api/src/androidTest/java/com/readrops/api/localfeed/atom/ATOMItemsAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/atom/ATOMItemsAdapterTest.kt index b737272a..6b014126 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/atom/ATOMItemsAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/atom/ATOMItemsAdapterTest.kt @@ -1,25 +1,24 @@ package com.readrops.api.localfeed.atom -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import com.readrops.api.utils.DateUtils import com.readrops.api.utils.exceptions.ParseException -import junit.framework.TestCase.* -import org.junit.Assert +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertNotNull +import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith +import org.junit.rules.ExpectedException -@RunWith(AndroidJUnit4::class) class ATOMItemsAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = ATOMItemsAdapter() + @get:Rule + val expectedException: ExpectedException = ExpectedException.none() + @Test fun normalCasesTest() { - val stream = context.resources.assets.open("localfeed/atom/atom_items.xml") + val stream = TestUtils.loadResource("localfeed/atom/atom_items.xml") val items = adapter.fromXml(stream) val item = items[0] @@ -36,7 +35,7 @@ class ATOMItemsAdapterTest { @Test fun noDateTest() { - val stream = context.resources.assets.open("localfeed/atom/atom_items_no_date.xml") + val stream = TestUtils.loadResource("localfeed/atom/atom_items_no_date.xml") val item = adapter.fromXml(stream).first() assertNotNull(item.pubDate) @@ -44,18 +43,22 @@ class ATOMItemsAdapterTest { @Test fun noTitleTest() { - val stream = context.resources.assets.open("localfeed/atom/atom_items_no_title.xml") + val stream = TestUtils.loadResource("localfeed/atom/atom_items_no_title.xml") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromXml(stream) } - assertTrue(exception.message!!.contains("Item title is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item title is required") + + adapter.fromXml(stream) } @Test fun noLinkTest() { - val stream = context.resources.assets.open("localfeed/atom/atom_items_no_link.xml") + val stream = TestUtils.loadResource("localfeed/atom/atom_items_no_link.xml") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromXml(stream) } - assertTrue(exception.message!!.contains("Item link is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item link is required") + + adapter.fromXml(stream) } } \ No newline at end of file diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/json/JSONFeedAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/json/JSONFeedAdapterTest.kt similarity index 63% rename from api/src/androidTest/java/com/readrops/api/localfeed/json/JSONFeedAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/json/JSONFeedAdapterTest.kt index def7cd0c..bece7e27 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/json/JSONFeedAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/json/JSONFeedAdapterTest.kt @@ -1,28 +1,22 @@ package com.readrops.api.localfeed.json -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import com.readrops.db.entities.Feed import com.squareup.moshi.Moshi import junit.framework.TestCase.assertEquals import okio.Buffer import org.junit.Test -import org.junit.runner.RunWith -@RunWith(AndroidJUnit4::class) class JSONFeedAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = Moshi.Builder() .add(JSONFeedAdapter()) .build() - .adapter(Feed::class.java) + .adapter(Feed::class.java) @Test fun normalCasesTest() { - val stream = context.assets.open("localfeed/json/json_feed.json") + val stream = TestUtils.loadResource("localfeed/json/json_feed.json") val feed = adapter.fromJson(Buffer().readFrom(stream))!! diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/json/JSONItemsAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/json/JSONItemsAdapterTest.kt similarity index 59% rename from api/src/androidTest/java/com/readrops/api/localfeed/json/JSONItemsAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/json/JSONItemsAdapterTest.kt index 4b95a665..518520c2 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/json/JSONItemsAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/json/JSONItemsAdapterTest.kt @@ -1,33 +1,32 @@ package com.readrops.api.localfeed.json -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import com.readrops.api.utils.DateUtils import com.readrops.api.utils.exceptions.ParseException import com.readrops.db.entities.Item import com.squareup.moshi.Moshi import com.squareup.moshi.Types -import junit.framework.TestCase.* +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertNotNull import okio.Buffer -import org.junit.Assert +import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith +import org.junit.rules.ExpectedException -@RunWith(AndroidJUnit4::class) class JSONItemsAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = Moshi.Builder() .add(Types.newParameterizedType(List::class.java, Item::class.java), JSONItemsAdapter()) .build() .adapter>(Types.newParameterizedType(List::class.java, Item::class.java)) + @get:Rule + val expectedException: ExpectedException = ExpectedException.none() + @Test fun normalCasesTest() { - val stream = context.resources.assets.open("localfeed/json/json_feed.json") + val stream = TestUtils.loadResource("localfeed/json/json_feed.json") val items = adapter.fromJson(Buffer().readFrom(stream))!! val item = items.first() @@ -43,7 +42,7 @@ class JSONItemsAdapterTest { @Test fun otherCasesTest() { - val stream = context.resources.assets.open("localfeed/json/json_items_other_cases.json") + val stream = TestUtils.loadResource("localfeed/json/json_items_other_cases.json") val item = adapter.fromJson(Buffer().readFrom(stream))!!.first() @@ -55,7 +54,7 @@ class JSONItemsAdapterTest { @Test fun nullDateTest() { - val stream = context.resources.assets.open("localfeed/json/json_items_no_date.json") + val stream = TestUtils.loadResource("localfeed/json/json_items_no_date.json") val item = adapter.fromJson(Buffer().readFrom(stream))!!.first() assertNotNull(item.pubDate) @@ -63,18 +62,22 @@ class JSONItemsAdapterTest { @Test fun nullTitleTest() { - val stream = context.resources.assets.open("localfeed/json/json_items_no_title.json") + val stream = TestUtils.loadResource("localfeed/json/json_items_no_title.json") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromJson(Buffer().readFrom(stream)) } - assertTrue(exception.message!!.contains("Item title is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item title is required") + + adapter.fromJson(Buffer().readFrom(stream)) } @Test fun nullLinkTest() { - val stream = context.resources.assets.open("localfeed/json/json_items_no_link.json") + val stream = TestUtils.loadResource("localfeed/json/json_items_no_link.json") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromJson(Buffer().readFrom(stream)) } - assertTrue(exception.message!!.contains("Item link is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item link is required") + + adapter.fromJson(Buffer().readFrom(stream)) } } \ No newline at end of file diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/rss1/RSS1FeedAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/rss1/RSS1FeedAdapterTest.kt similarity index 57% rename from api/src/androidTest/java/com/readrops/api/localfeed/rss1/RSS1FeedAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/rss1/RSS1FeedAdapterTest.kt index 47d023b0..ddee8ead 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/rss1/RSS1FeedAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/rss1/RSS1FeedAdapterTest.kt @@ -1,22 +1,16 @@ package com.readrops.api.localfeed.rss1 -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import junit.framework.Assert.assertEquals import org.junit.Test -import org.junit.runner.RunWith -@RunWith(AndroidJUnit4::class) class RSS1FeedAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = RSS1FeedAdapter() @Test fun normalCaseTest() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_feed.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_feed.xml") val feed = adapter.fromXml(stream) diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/rss1/RSS1ItemsAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/rss1/RSS1ItemsAdapterTest.kt similarity index 60% rename from api/src/androidTest/java/com/readrops/api/localfeed/rss1/RSS1ItemsAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/rss1/RSS1ItemsAdapterTest.kt index 99ce97f4..7efda78f 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/rss1/RSS1ItemsAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/rss1/RSS1ItemsAdapterTest.kt @@ -1,25 +1,24 @@ package com.readrops.api.localfeed.rss1 -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import com.readrops.api.utils.DateUtils import com.readrops.api.utils.exceptions.ParseException -import junit.framework.TestCase.* -import org.junit.Assert +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertNotNull +import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith +import org.junit.rules.ExpectedException -@RunWith(AndroidJUnit4::class) class RSS1ItemsAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = RSS1ItemsAdapter() + @get:Rule + val expectedException: ExpectedException = ExpectedException.none() + @Test fun normalCasesTest() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_feed.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_feed.xml") val items = adapter.fromXml(stream) val item = items.first() @@ -38,7 +37,7 @@ class RSS1ItemsAdapterTest { @Test fun specialCasesTest() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_items_special_cases.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_items_special_cases.xml") val item = adapter.fromXml(stream).first() @@ -49,7 +48,7 @@ class RSS1ItemsAdapterTest { @Test fun nullDateTest() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_items_no_date.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_items_no_date.xml") val item = adapter.fromXml(stream).first() assertNotNull(item.pubDate) @@ -57,17 +56,21 @@ class RSS1ItemsAdapterTest { @Test fun nullTitleTest() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_items_no_title.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_items_no_title.xml") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromXml(stream) } - assertTrue(exception.message!!.contains("Item title is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item title is required") + + adapter.fromXml(stream) } @Test fun nullLinkTest() { - val stream = context.resources.assets.open("localfeed/rss1/rss1_items_no_link.xml") + val stream = TestUtils.loadResource("localfeed/rss1/rss1_items_no_link.xml") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromXml(stream) } - assertTrue(exception.message!!.contains("RSS1 link or about element is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("RSS1 link or about element is required") + + adapter.fromXml(stream) } } \ No newline at end of file diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/rss2/RSS2FeedAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/rss2/RSS2FeedAdapterTest.kt similarity index 60% rename from api/src/androidTest/java/com/readrops/api/localfeed/rss2/RSS2FeedAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/rss2/RSS2FeedAdapterTest.kt index 3368c0e6..c16a1581 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/rss2/RSS2FeedAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/rss2/RSS2FeedAdapterTest.kt @@ -1,23 +1,18 @@ package com.readrops.api.localfeed.rss2 -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import com.readrops.api.utils.exceptions.ParseException import junit.framework.TestCase.assertEquals import org.junit.Test -import org.junit.runner.RunWith -@RunWith(AndroidJUnit4::class) class RSS2FeedAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context private val adapter = RSS2FeedAdapter() @Test fun normalCasesTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_full_feed.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_full_feed.xml") val feed = adapter.fromXml(stream) @@ -30,7 +25,7 @@ class RSS2FeedAdapterTest { @Test(expected = ParseException::class) fun nullTitleTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_feed_special_cases.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_feed_special_cases.xml") adapter.fromXml(stream) } } \ No newline at end of file diff --git a/api/src/androidTest/java/com/readrops/api/localfeed/rss2/RSS2ItemsAdapterTest.kt b/api/src/test/java/com/readrops/api/localfeed/rss2/RSS2ItemsAdapterTest.kt similarity index 57% rename from api/src/androidTest/java/com/readrops/api/localfeed/rss2/RSS2ItemsAdapterTest.kt rename to api/src/test/java/com/readrops/api/localfeed/rss2/RSS2ItemsAdapterTest.kt index 4154f924..49862135 100644 --- a/api/src/androidTest/java/com/readrops/api/localfeed/rss2/RSS2ItemsAdapterTest.kt +++ b/api/src/test/java/com/readrops/api/localfeed/rss2/RSS2ItemsAdapterTest.kt @@ -1,25 +1,24 @@ package com.readrops.api.localfeed.rss2 -import android.content.Context -import androidx.test.ext.junit.runners.AndroidJUnit4 -import androidx.test.platform.app.InstrumentationRegistry +import com.readrops.api.TestUtils import com.readrops.api.utils.DateUtils import com.readrops.api.utils.exceptions.ParseException -import junit.framework.TestCase.* -import org.junit.Assert +import junit.framework.TestCase.assertEquals +import junit.framework.TestCase.assertNotNull +import org.junit.Rule import org.junit.Test -import org.junit.runner.RunWith +import org.junit.rules.ExpectedException -@RunWith(AndroidJUnit4::class) class RSS2ItemsAdapterTest { - private val context: Context = InstrumentationRegistry.getInstrumentation().context - private val adapter = RSS2ItemsAdapter() + @get:Rule + val expectedException: ExpectedException = ExpectedException.none() + @Test fun normalCasesTest() { - val stream = context.resources.assets.open("localfeed/rss_feed.xml") + val stream = TestUtils.loadResource("localfeed/rss_feed.xml") val items = adapter.fromXml(stream) val item = items.first() @@ -35,7 +34,7 @@ class RSS2ItemsAdapterTest { @Test fun otherNamespacesTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_other_namespaces.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_other_namespaces.xml") val item = adapter.fromXml(stream).first() assertEquals(item.guid, "guid") @@ -46,7 +45,7 @@ class RSS2ItemsAdapterTest { @Test fun noDateTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_no_date.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_no_date.xml") val item = adapter.fromXml(stream).first() assertNotNull(item.pubDate) @@ -54,23 +53,27 @@ class RSS2ItemsAdapterTest { @Test fun noTitleTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_no_title.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_no_title.xml") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromXml(stream) } - assertTrue(exception.message!!.contains("Item title is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item title is required") + + adapter.fromXml(stream) } @Test fun noLinkTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_no_link.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_no_link.xml") - val exception = Assert.assertThrows(ParseException::class.java) { adapter.fromXml(stream) } - assertTrue(exception.message!!.contains("Item link is required")) + expectedException.expect(ParseException::class.java) + expectedException.expectMessage("Item link is required") + + adapter.fromXml(stream) } @Test fun enclosureTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_enclosure.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_enclosure.xml") val item = adapter.fromXml(stream).first() assertEquals(item.imageLink, "https://image1.jpg") @@ -78,7 +81,7 @@ class RSS2ItemsAdapterTest { @Test fun mediaContentTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_media_content.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_media_content.xml") val items = adapter.fromXml(stream) assertEquals(items.first().imageLink, "https://image1.jpg") @@ -87,7 +90,7 @@ class RSS2ItemsAdapterTest { @Test fun mediaGroupTest() { - val stream = context.resources.assets.open("localfeed/rss2/rss_items_media_group.xml") + val stream = TestUtils.loadResource("localfeed/rss2/rss_items_media_group.xml") val item = adapter.fromXml(stream).first() assertEquals(item.imageLink, "https://image1.jpg") diff --git a/api/src/androidTest/java/com/readrops/api/utils/AuthInterceptorTest.kt b/api/src/test/java/com/readrops/api/utils/AuthInterceptorTest.kt similarity index 100% rename from api/src/androidTest/java/com/readrops/api/utils/AuthInterceptorTest.kt rename to api/src/test/java/com/readrops/api/utils/AuthInterceptorTest.kt diff --git a/api/src/test/java/com/readrops/api/utils/JsonReaderExtensionsTest.kt b/api/src/test/java/com/readrops/api/utils/JsonReaderExtensionsTest.kt index fb27e07a..92b95a8f 100644 --- a/api/src/test/java/com/readrops/api/utils/JsonReaderExtensionsTest.kt +++ b/api/src/test/java/com/readrops/api/utils/JsonReaderExtensionsTest.kt @@ -67,7 +67,7 @@ class JsonReaderExtensionsTest { reader.beginObject() reader.nextName() - assertEquals(reader.nextNullableString(), "value") + assertEquals(reader.nextNonEmptyString(), "value") reader.endObject() } diff --git a/api/src/androidTest/assets/localfeed/atom/atom_feed.xml b/api/src/test/resources/localfeed/atom/atom_feed.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/atom/atom_feed.xml rename to api/src/test/resources/localfeed/atom/atom_feed.xml diff --git a/api/src/androidTest/assets/localfeed/atom/atom_feed_no_url_siteurl.xml b/api/src/test/resources/localfeed/atom/atom_feed_no_url_siteurl.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/atom/atom_feed_no_url_siteurl.xml rename to api/src/test/resources/localfeed/atom/atom_feed_no_url_siteurl.xml diff --git a/api/src/androidTest/assets/localfeed/atom/atom_items.xml b/api/src/test/resources/localfeed/atom/atom_items.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/atom/atom_items.xml rename to api/src/test/resources/localfeed/atom/atom_items.xml diff --git a/api/src/androidTest/assets/localfeed/atom/atom_items_no_date.xml b/api/src/test/resources/localfeed/atom/atom_items_no_date.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/atom/atom_items_no_date.xml rename to api/src/test/resources/localfeed/atom/atom_items_no_date.xml diff --git a/api/src/androidTest/assets/localfeed/atom/atom_items_no_link.xml b/api/src/test/resources/localfeed/atom/atom_items_no_link.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/atom/atom_items_no_link.xml rename to api/src/test/resources/localfeed/atom/atom_items_no_link.xml diff --git a/api/src/androidTest/assets/localfeed/atom/atom_items_no_title.xml b/api/src/test/resources/localfeed/atom/atom_items_no_title.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/atom/atom_items_no_title.xml rename to api/src/test/resources/localfeed/atom/atom_items_no_title.xml diff --git a/api/src/androidTest/assets/localfeed/json/json_feed.json b/api/src/test/resources/localfeed/json/json_feed.json similarity index 100% rename from api/src/androidTest/assets/localfeed/json/json_feed.json rename to api/src/test/resources/localfeed/json/json_feed.json diff --git a/api/src/androidTest/assets/localfeed/json/json_items_no_date.json b/api/src/test/resources/localfeed/json/json_items_no_date.json similarity index 100% rename from api/src/androidTest/assets/localfeed/json/json_items_no_date.json rename to api/src/test/resources/localfeed/json/json_items_no_date.json diff --git a/api/src/androidTest/assets/localfeed/json/json_items_no_link.json b/api/src/test/resources/localfeed/json/json_items_no_link.json similarity index 100% rename from api/src/androidTest/assets/localfeed/json/json_items_no_link.json rename to api/src/test/resources/localfeed/json/json_items_no_link.json diff --git a/api/src/androidTest/assets/localfeed/json/json_items_no_title.json b/api/src/test/resources/localfeed/json/json_items_no_title.json similarity index 100% rename from api/src/androidTest/assets/localfeed/json/json_items_no_title.json rename to api/src/test/resources/localfeed/json/json_items_no_title.json diff --git a/api/src/androidTest/assets/localfeed/json/json_items_other_cases.json b/api/src/test/resources/localfeed/json/json_items_other_cases.json similarity index 100% rename from api/src/androidTest/assets/localfeed/json/json_items_other_cases.json rename to api/src/test/resources/localfeed/json/json_items_other_cases.json diff --git a/api/src/androidTest/assets/localfeed/rss1/rss1_feed.xml b/api/src/test/resources/localfeed/rss1/rss1_feed.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss1/rss1_feed.xml rename to api/src/test/resources/localfeed/rss1/rss1_feed.xml diff --git a/api/src/androidTest/assets/localfeed/rss1/rss1_feed_no_url_siteurl.xml b/api/src/test/resources/localfeed/rss1/rss1_feed_no_url_siteurl.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss1/rss1_feed_no_url_siteurl.xml rename to api/src/test/resources/localfeed/rss1/rss1_feed_no_url_siteurl.xml diff --git a/api/src/androidTest/assets/localfeed/rss1/rss1_items_no_date.xml b/api/src/test/resources/localfeed/rss1/rss1_items_no_date.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss1/rss1_items_no_date.xml rename to api/src/test/resources/localfeed/rss1/rss1_items_no_date.xml diff --git a/api/src/androidTest/assets/localfeed/rss1/rss1_items_no_link.xml b/api/src/test/resources/localfeed/rss1/rss1_items_no_link.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss1/rss1_items_no_link.xml rename to api/src/test/resources/localfeed/rss1/rss1_items_no_link.xml diff --git a/api/src/androidTest/assets/localfeed/rss1/rss1_items_no_title.xml b/api/src/test/resources/localfeed/rss1/rss1_items_no_title.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss1/rss1_items_no_title.xml rename to api/src/test/resources/localfeed/rss1/rss1_items_no_title.xml diff --git a/api/src/androidTest/assets/localfeed/rss1/rss1_items_special_cases.xml b/api/src/test/resources/localfeed/rss1/rss1_items_special_cases.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss1/rss1_items_special_cases.xml rename to api/src/test/resources/localfeed/rss1/rss1_items_special_cases.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_feed_special_cases.xml b/api/src/test/resources/localfeed/rss2/rss_feed_special_cases.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_feed_special_cases.xml rename to api/src/test/resources/localfeed/rss2/rss_feed_special_cases.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_full_feed.xml b/api/src/test/resources/localfeed/rss2/rss_full_feed.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_full_feed.xml rename to api/src/test/resources/localfeed/rss2/rss_full_feed.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_enclosure.xml b/api/src/test/resources/localfeed/rss2/rss_items_enclosure.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_enclosure.xml rename to api/src/test/resources/localfeed/rss2/rss_items_enclosure.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_media_content.xml b/api/src/test/resources/localfeed/rss2/rss_items_media_content.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_media_content.xml rename to api/src/test/resources/localfeed/rss2/rss_items_media_content.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_media_group.xml b/api/src/test/resources/localfeed/rss2/rss_items_media_group.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_media_group.xml rename to api/src/test/resources/localfeed/rss2/rss_items_media_group.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_no_date.xml b/api/src/test/resources/localfeed/rss2/rss_items_no_date.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_no_date.xml rename to api/src/test/resources/localfeed/rss2/rss_items_no_date.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_no_link.xml b/api/src/test/resources/localfeed/rss2/rss_items_no_link.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_no_link.xml rename to api/src/test/resources/localfeed/rss2/rss_items_no_link.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_no_title.xml b/api/src/test/resources/localfeed/rss2/rss_items_no_title.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_no_title.xml rename to api/src/test/resources/localfeed/rss2/rss_items_no_title.xml diff --git a/api/src/androidTest/assets/localfeed/rss2/rss_items_other_namespaces.xml b/api/src/test/resources/localfeed/rss2/rss_items_other_namespaces.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss2/rss_items_other_namespaces.xml rename to api/src/test/resources/localfeed/rss2/rss_items_other_namespaces.xml diff --git a/api/src/androidTest/assets/localfeed/rss_feed.xml b/api/src/test/resources/localfeed/rss_feed.xml similarity index 100% rename from api/src/androidTest/assets/localfeed/rss_feed.xml rename to api/src/test/resources/localfeed/rss_feed.xml