diff --git a/app/build.gradle b/app/build.gradle
index d16c98c..22f89d9 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -81,11 +81,11 @@ android {
freeCompilerArgs = freeCompilerArgs + "-opt-in=kotlin.RequiresOptIn"
}
compileOptions {
- sourceCompatibility JavaVersion.VERSION_1_8
- targetCompatibility JavaVersion.VERSION_1_8
+ sourceCompatibility JavaVersion.VERSION_11
+ targetCompatibility JavaVersion.VERSION_11
}
kotlinOptions {
- jvmTarget = "1.8"
+ jvmTarget = JavaVersion.VERSION_11
}
buildFeatures {
compose true
@@ -214,7 +214,11 @@ dependencies {
implementation "androidx.activity:activity-compose:1.8.2"
implementation 'androidx.appcompat:appcompat:1.7.0-alpha03'
testImplementation "junit:junit:4.13.2"
- androidTestImplementation "androidx.test.ext:junit:1.1.3"
- androidTestImplementation "androidx.test.espresso:espresso-core:3.4.0"
+ androidTestImplementation "androidx.test.ext:junit:1.1.5"
+ androidTestImplementation "androidx.test.espresso:espresso-core:3.5.1"
+ // mockito
+ testImplementation "org.mockito:mockito-core:5.11.0"
+ testImplementation 'org.mockito:mockito-junit-jupiter:5.11.0'
+ testImplementation "org.mockito.kotlin:mockito-kotlin:5.2.1"
}
diff --git a/app/src/test/java/me/ash/reader/infrastructure/rss/RssHelperTest.kt b/app/src/test/java/me/ash/reader/infrastructure/rss/RssHelperTest.kt
new file mode 100644
index 0000000..ab4bf5b
--- /dev/null
+++ b/app/src/test/java/me/ash/reader/infrastructure/rss/RssHelperTest.kt
@@ -0,0 +1,74 @@
+package me.ash.reader.infrastructure.rss
+
+import android.content.Context
+import kotlinx.coroutines.CoroutineDispatcher
+import okhttp3.OkHttpClient
+import org.junit.Assert
+import org.junit.Before
+import org.junit.Test
+import org.junit.runner.RunWith
+import org.mockito.Mock
+import org.mockito.junit.MockitoJUnitRunner
+import org.mockito.kotlin.mock
+
+const val enclosureUrlString1: String = "https://example.com/enclosure.jpg"
+const val enclosureUrlString2: String = "https://github.blog/wp-content/uploads/2024/03/github_copilot_header.png"
+const val imageUrlString: String = "https://example.com/image.jpg"
+const val enclosureHtmlCase1: String = """
+
+
+ """
+const val enclosureHtmlCase2: String = """
+
+
+
+ """
+const val enclosureHtmlCase3: String = """
+
+
+
+ """
+const val imageHtmlCase1: String = """
+
+
+ """
+const val imageHtmlCase2: String = """
+
+
+
+ """
+
+@RunWith(MockitoJUnitRunner::class)
+class RssHelperTest {
+
+ @Mock
+ private lateinit var mockContext: Context
+
+ @Mock
+ private lateinit var mockIODispatcher: CoroutineDispatcher
+
+ @Mock
+ private lateinit var mockOkHttpClient: OkHttpClient
+
+ private lateinit var rssHelper: RssHelper
+
+ @Before
+ fun setUp() {
+ mockContext = mock { }
+ mockIODispatcher = mock {}
+ mockOkHttpClient = mock {}
+ rssHelper = RssHelper(mockContext, mockIODispatcher, mockOkHttpClient)
+ }
+
+ @Test
+ fun testFindThumbnail() {
+ Assert.assertNull(rssHelper.findThumbnail(""))
+ Assert.assertNull(rssHelper.findThumbnail(" "))
+ Assert.assertNull(rssHelper.findThumbnail(null))
+ Assert.assertEquals(enclosureUrlString1, rssHelper.findThumbnail(enclosureHtmlCase1))
+ Assert.assertEquals(enclosureUrlString1, rssHelper.findThumbnail(enclosureHtmlCase2))
+ Assert.assertEquals(enclosureUrlString2, rssHelper.findThumbnail(enclosureHtmlCase3))
+ Assert.assertEquals(enclosureUrlString1, rssHelper.findThumbnail(imageHtmlCase1))
+ Assert.assertEquals(imageUrlString, rssHelper.findThumbnail(imageHtmlCase2))
+ }
+}