mirror of
https://github.com/recloudstream/cloudstream.git
synced 2024-08-15 01:53:11 +00:00
added tests for layout
This commit is contained in:
parent
273a947f8e
commit
04f52f4a6d
6 changed files with 107 additions and 8 deletions
|
@ -142,6 +142,7 @@ dependencies {
|
||||||
testImplementation("junit:junit:4.13.2")
|
testImplementation("junit:junit:4.13.2")
|
||||||
androidTestImplementation("androidx.test.ext:junit:1.1.3")
|
androidTestImplementation("androidx.test.ext:junit:1.1.3")
|
||||||
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
|
androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0")
|
||||||
|
androidTestImplementation("androidx.test:core")
|
||||||
|
|
||||||
//implementation("io.karn:khttp-android:0.1.2") //okhttp instead
|
//implementation("io.karn:khttp-android:0.1.2") //okhttp instead
|
||||||
// implementation("org.jsoup:jsoup:1.13.1")
|
// implementation("org.jsoup:jsoup:1.13.1")
|
||||||
|
|
|
@ -1,6 +1,19 @@
|
||||||
package com.lagradost.cloudstream3
|
package com.lagradost.cloudstream3
|
||||||
|
|
||||||
|
import android.app.Activity
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.os.PersistableBundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
|
import androidx.test.core.app.ActivityScenario
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import androidx.viewbinding.ViewBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.FragmentHomeBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.FragmentHomeTvBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.FragmentSearchBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.FragmentSearchTvBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.HomeResultGridBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.RepositoryItemBinding
|
||||||
|
import com.lagradost.cloudstream3.databinding.RepositoryItemTvBinding
|
||||||
import com.lagradost.cloudstream3.utils.SubtitleHelper
|
import com.lagradost.cloudstream3.utils.SubtitleHelper
|
||||||
import com.lagradost.cloudstream3.utils.TestingUtils
|
import com.lagradost.cloudstream3.utils.TestingUtils
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
|
@ -8,11 +21,18 @@ import org.junit.Assert
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Instrumented test, which will execute on an Android device.
|
* Instrumented test, which will execute on an Android device.
|
||||||
*
|
*
|
||||||
* See [testing documentation](http://d.android.com/tools/testing).
|
* See [testing documentation](http://d.android.com/tools/testing).
|
||||||
*/
|
*/
|
||||||
|
class TestApplication : Activity() {
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
|
||||||
|
super.onCreate(savedInstanceState, persistentState)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class ExampleInstrumentedTest {
|
class ExampleInstrumentedTest {
|
||||||
private fun getAllProviders(): List<MainAPI> {
|
private fun getAllProviders(): List<MainAPI> {
|
||||||
|
@ -26,6 +46,49 @@ class ExampleInstrumentedTest {
|
||||||
println("Done providersExist")
|
println("Done providersExist")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Throws
|
||||||
|
private inline fun <reified T : ViewBinding> testAllLayouts(
|
||||||
|
activity: Activity,
|
||||||
|
vararg layouts: Int
|
||||||
|
) {
|
||||||
|
|
||||||
|
val bind = T::class.java.methods.first { it.name == "bind" }
|
||||||
|
val inflater = LayoutInflater.from(activity)
|
||||||
|
for (layout in layouts) {
|
||||||
|
val root = inflater.inflate(layout, null, false)
|
||||||
|
bind.invoke(null, root)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Throws
|
||||||
|
fun layoutTest() {
|
||||||
|
ActivityScenario.launch(MainActivity::class.java).use { scenario ->
|
||||||
|
scenario.onActivity { activity: MainActivity ->
|
||||||
|
// FragmentHomeHeadBinding and FragmentHomeHeadTvBinding CANT be the same
|
||||||
|
//testAllLayouts<FragmentHomeHeadBinding>(activity, R.layout.fragment_home_head, R.layout.fragment_home_head_tv)
|
||||||
|
//testAllLayouts<FragmentHomeHeadTvBinding>(activity, R.layout.fragment_home_head, R.layout.fragment_home_head_tv)
|
||||||
|
|
||||||
|
// main cant be tested
|
||||||
|
// testAllLayouts<ActivityMainTvBinding>(activity,R.layout.activity_main, R.layout.activity_main_tv)
|
||||||
|
// testAllLayouts<ActivityMainBinding>(activity,R.layout.activity_main, R.layout.activity_main_tv)
|
||||||
|
//testAllLayouts<ActivityMainBinding>(activity, R.layout.activity_main_tv)
|
||||||
|
|
||||||
|
testAllLayouts<RepositoryItemBinding>(activity, R.layout.repository_item_tv, R.layout.repository_item)
|
||||||
|
testAllLayouts<RepositoryItemTvBinding>(activity, R.layout.repository_item_tv, R.layout.repository_item)
|
||||||
|
|
||||||
|
testAllLayouts<FragmentHomeBinding>(activity, R.layout.fragment_home_tv, R.layout.fragment_home)
|
||||||
|
testAllLayouts<FragmentHomeTvBinding>(activity, R.layout.fragment_home_tv, R.layout.fragment_home)
|
||||||
|
|
||||||
|
testAllLayouts<FragmentSearchBinding>(activity, R.layout.fragment_search_tv, R.layout.fragment_search)
|
||||||
|
testAllLayouts<FragmentSearchTvBinding>(activity, R.layout.fragment_search_tv, R.layout.fragment_search)
|
||||||
|
|
||||||
|
testAllLayouts<HomeResultGridBinding>(activity, R.layout.home_result_grid_expanded, R.layout.home_result_grid)
|
||||||
|
//testAllLayouts<HomeResultGridExpandedBinding>(activity, R.layout.home_result_grid_expanded, R.layout.home_result_grid) ??? fails ???
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Throws(AssertionError::class)
|
@Throws(AssertionError::class)
|
||||||
fun providerCorrectData() {
|
fun providerCorrectData() {
|
||||||
|
|
|
@ -97,6 +97,7 @@ import com.lagradost.cloudstream3.utils.AppUtils.loadRepository
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
import com.lagradost.cloudstream3.utils.AppUtils.loadResult
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult
|
import com.lagradost.cloudstream3.utils.AppUtils.loadSearchResult
|
||||||
import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus
|
import com.lagradost.cloudstream3.utils.AppUtils.setDefaultFocus
|
||||||
|
import com.lagradost.cloudstream3.utils.BackupUtils.backup
|
||||||
import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup
|
import com.lagradost.cloudstream3.utils.BackupUtils.setUpBackup
|
||||||
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
import com.lagradost.cloudstream3.utils.Coroutines.ioSafe
|
||||||
import com.lagradost.cloudstream3.utils.Coroutines.main
|
import com.lagradost.cloudstream3.utils.Coroutines.main
|
||||||
|
@ -753,13 +754,25 @@ class MainActivity : AppCompatActivity(), ColorPickerDialogListener {
|
||||||
if (isCastApiAvailable()) {
|
if (isCastApiAvailable()) {
|
||||||
mSessionManager = CastContext.getSharedInstance(this).sessionManager
|
mSessionManager = CastContext.getSharedInstance(this).sessionManager
|
||||||
}
|
}
|
||||||
} catch (e: Exception) {
|
} catch (t: Throwable) {
|
||||||
logError(e)
|
logError(t)
|
||||||
}
|
}
|
||||||
|
|
||||||
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)
|
||||||
updateTv()
|
updateTv()
|
||||||
|
|
||||||
|
// backup when we update the app, I don't trust myself to not boot lock users, might want to make this a setting?
|
||||||
|
try {
|
||||||
|
val appVer = BuildConfig.VERSION_NAME
|
||||||
|
val lastAppAutoBackup = getKey<String>("VERSION_NAME") ?: 0
|
||||||
|
if (appVer != lastAppAutoBackup) {
|
||||||
|
setKey("VERSION_NAME", BuildConfig.VERSION_NAME)
|
||||||
|
backup()
|
||||||
|
}
|
||||||
|
} catch (t : Throwable) {
|
||||||
|
logError(t)
|
||||||
|
}
|
||||||
|
|
||||||
// just in case, MAIN SHOULD *NEVER* BOOT LOOP CRASH
|
// just in case, MAIN SHOULD *NEVER* BOOT LOOP CRASH
|
||||||
binding = try {
|
binding = try {
|
||||||
if (isTvSettings()) {
|
if (isTvSettings()) {
|
||||||
|
|
|
@ -87,7 +87,7 @@ class HomeChildItemAdapter(
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
|
|
||||||
(itemView.image_holder ?: itemView.background_card)?.apply {
|
(itemView.background_card)?.apply {
|
||||||
val min = 114.toPx
|
val min = 114.toPx
|
||||||
val max = 180.toPx
|
val max = 180.toPx
|
||||||
|
|
||||||
|
|
|
@ -32,15 +32,28 @@ import com.lagradost.cloudstream3.utils.SingleSelectionHelper.showOptionSelectSt
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbar
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView
|
import com.lagradost.cloudstream3.utils.UIHelper.fixPaddingStatusbarView
|
||||||
import com.lagradost.cloudstream3.utils.UIHelper.setImage
|
import com.lagradost.cloudstream3.utils.UIHelper.setImage
|
||||||
import kotlinx.android.synthetic.main.activity_main.view.*
|
import kotlinx.android.synthetic.main.activity_main.view.nav_rail_view
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head.view.*
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmark_parent_item_title
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmarked_child_recyclerview
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_bookmarked_child_recyclerview
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_bookmark
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_image
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_info
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_preview_play
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_search
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head.view.home_watch_parent_item_title
|
import kotlinx.android.synthetic.main.fragment_home_head.view.home_watch_parent_item_title
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.*
|
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_bookmarked_holder
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_bookmarked_holder
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_none_padding
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_none_padding
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_plan_to_watch_btt
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_plan_to_watch_btt
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_change_api
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_change_api2
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_description
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_hidden_next_focus
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_hidden_prev_focus
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_info_btt
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_play_btt
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_tags
|
||||||
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_text
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_viewpager
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_preview_viewpager
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_type_completed_btt
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_type_completed_btt
|
||||||
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_type_dropped_btt
|
import kotlinx.android.synthetic.main.fragment_home_head_tv.view.home_type_dropped_btt
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/background_card"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_margin="2dp"
|
android:layout_margin="2dp"
|
||||||
|
@ -16,13 +16,22 @@
|
||||||
app:cardCornerRadius="@dimen/rounded_image_radius"
|
app:cardCornerRadius="@dimen/rounded_image_radius"
|
||||||
app:cardElevation="0dp">
|
app:cardElevation="0dp">
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
android:id="@+id/title_shadow"
|
||||||
|
android:visibility="gone"
|
||||||
|
android:layout_width="0dp"
|
||||||
|
android:layout_height="0dp"
|
||||||
|
android:layout_gravity="bottom"
|
||||||
|
android:clickable="false"
|
||||||
|
android:focusable="false"
|
||||||
|
tools:ignore="ContentDescription" />
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:orientation="vertical">
|
android:orientation="vertical">
|
||||||
|
|
||||||
<androidx.cardview.widget.CardView
|
<androidx.cardview.widget.CardView
|
||||||
android:id="@+id/image_holder"
|
android:id="@+id/background_card"
|
||||||
android:layout_width="114dp"
|
android:layout_width="114dp"
|
||||||
android:layout_height="180dp"
|
android:layout_height="180dp"
|
||||||
android:elevation="10dp"
|
android:elevation="10dp"
|
||||||
|
|
Loading…
Reference in a new issue