diff --git a/android/demo/deps.bzl b/android/demo/deps.bzl index 8b6344aef..7d61ffc78 100644 --- a/android/demo/deps.bzl +++ b/android/demo/deps.bzl @@ -22,6 +22,7 @@ maven_test = [ maven = maven_main + maven_test main_deps = parse_coordinates(maven_main) + [ + "//android/player-ui:player-mvvm", "//jvm/utils", "//plugins/reference-assets/android:assets", "//plugins/common-types/jvm:common-types", diff --git a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt index ce0b452f9..3d3efa1ed 100644 --- a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt +++ b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/lifecycle/DemoPlayerViewModel.kt @@ -2,7 +2,7 @@ package com.intuit.playerui.android.reference.demo.lifecycle import com.intuit.playerui.android.AndroidPlayer import com.intuit.playerui.android.AndroidPlayer.Config -import com.intuit.playerui.android.lifecycle.PlayerViewModel +import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel import com.intuit.playerui.android.reference.assets.ReferenceAssetsPlugin import com.intuit.playerui.core.managed.AsyncFlowIterator import com.intuit.playerui.core.player.state.PlayerFlowState diff --git a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt index cac310b3b..a8ae4668c 100644 --- a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt +++ b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/base/BasePlayerFragment.kt @@ -11,9 +11,9 @@ import androidx.navigation.fragment.findNavController import com.afollestad.materialdialogs.MaterialDialog import com.alexii.j2v8debugger.StethoHelper import com.intuit.playerui.android.lifecycle.ManagedPlayerState -import com.intuit.playerui.android.lifecycle.PlayerViewModel +import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel +import com.intuit.playerui.android.mvvm.ui.PlayerFragment import com.intuit.playerui.android.reference.demo.lifecycle.DemoPlayerViewModel -import com.intuit.playerui.android.ui.PlayerFragment import com.intuit.playerui.core.bridge.serialization.json.prettify import com.intuit.playerui.core.bridge.toJson import com.intuit.playerui.core.managed.AsyncFlowIterator diff --git a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt index abb30ce86..299562255 100644 --- a/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt +++ b/android/demo/src/main/java/com/intuit/playerui/android/reference/demo/ui/main/MainActivity.kt @@ -20,10 +20,10 @@ import androidx.navigation.ui.onNavDestinationSelected import androidx.navigation.ui.setupActionBarWithNavController import androidx.navigation.ui.setupWithNavController import com.google.android.material.navigation.NavigationView +import com.intuit.playerui.android.mvvm.ui.PlayerFragment import com.intuit.playerui.android.reference.demo.R import com.intuit.playerui.android.reference.demo.model.AssetMock import com.intuit.playerui.android.reference.demo.model.StringMock -import com.intuit.playerui.android.ui.PlayerFragment import com.intuit.playerui.utils.mocks.ClassLoaderMock import com.intuit.playerui.utils.mocks.Mock import com.intuit.playerui.utils.mocks.getFlow diff --git a/android/deps.bzl b/android/deps.bzl index 533c78cbe..9bcc416bb 100644 --- a/android/deps.bzl +++ b/android/deps.bzl @@ -1,6 +1,7 @@ load("//jvm/dependencies:versions.bzl", "versions") load("//android/player:deps.bzl", player = "maven") load("//android/demo:deps.bzl", demo = "maven") +load("//android/player-ui:deps.bzl", ui = "maven") android = [ # Grab Databinding @@ -18,4 +19,4 @@ android = [ "androidx.fragment:fragment-ktx:%s" % versions.androidx.fragment, ] -maven = android + player + demo \ No newline at end of file +maven = android + player + demo + ui diff --git a/android/player-ui/BUILD b/android/player-ui/BUILD new file mode 100644 index 000000000..119e0aff9 --- /dev/null +++ b/android/player-ui/BUILD @@ -0,0 +1,46 @@ +load(":deps.bzl", "main_deps", "test_deps") +load("@build_constants//:constants.bzl", "VERSION") +load("//jvm:build.bzl", "distribution") +load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("@junit//junit5-jupiter-starter-bazel:junit5.bzl", "kt_jvm_junit5_test") +load("@rules_player//kotlin:lint.bzl", "lint") +load("@grab_bazel_common//tools/databinding:databinding.bzl", "kt_db_android_library") + +kt_db_android_library( + name = "player-mvvm", + srcs = glob(["src/main/java/**/*.kt"]), + custom_package = "com.intuit.playerui.android.mvvm", + manifest = ":src/main/AndroidManifest.xml", + resource_files = glob(["src/main/res/**"]), + tags = ["maven_coordinates=com.intuit.playerui.android:player-mvvm:aar:%s" % VERSION], + visibility = ["//visibility:public"], + deps = main_deps, +) + +distribution( + name = "player-mvvm", + lib_name = "player-mvvm-databinding", + maven_coordinates = "com.intuit.playerui.android:player-mvvm:%s" % VERSION, +) + +kt_jvm_junit5_test( + name = "player-mvvm-tests", + srcs = glob(["src/test/java/**/*.kt"]), + kotlinc_opts = "//jvm:test_options", + associates = ["//android/player:player-associates"], + test_package = "com.intuit.playerui.android.mvvm", + deps = [ + "//android/player:player", + ":player-mvvm", + "//android/player/src/test/java/android/util:android_utils_stub", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_test_utils", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_log_util" + ] + test_deps, +) + +lint( + name = "player-mvvm", + srcs = glob(["src/**/*.kt"]), + lint_config = "//jvm:lint_config", +) diff --git a/android/player-ui/deps.bzl b/android/player-ui/deps.bzl new file mode 100644 index 000000000..1cb3b5a27 --- /dev/null +++ b/android/player-ui/deps.bzl @@ -0,0 +1,34 @@ +load("//jvm/dependencies:versions.bzl", "versions") +load("@rules_player//maven:parse_coordinates.bzl", "parse_coordinates") + +maven = [ + # UI helpers + "androidx.core:core-ktx:%s" % versions.androidx.core, + "androidx.appcompat:appcompat:%s" % versions.androidx.appcompat, + "androidx.transition:transition:%s" % versions.androidx.transition, + + # Lifecycle + "androidx.lifecycle:lifecycle-runtime-ktx:%s" % versions.androidx.lifecycle, + "androidx.lifecycle:lifecycle-viewmodel-ktx:%s" % versions.androidx.lifecycle, + + # Default fallback + "androidx.constraintlayout:constraintlayout:%s" % versions.androidx.constraintlayout, +] + +main_deps = parse_coordinates(maven) + [ + # JVM plugin deps + "//android/player:player", + "//plugins/coroutines/jvm:coroutines", +] + +main_resources = [ + # TS core deps + "//plugins/partial-match-fingerprint/core:PartialMatchFingerprintPlugin_Bundles", + "//core/partial-match-registry:Registry_Bundles", +] + +test_deps = [ + "@grab_bazel_common//tools/test:mockable-android-jar", + "@maven//:io_mockk_mockk", + "@maven//:org_jetbrains_kotlinx_kotlinx_coroutines_test", +] diff --git a/android/player-ui/src/main/AndroidManifest.xml b/android/player-ui/src/main/AndroidManifest.xml new file mode 100644 index 000000000..c80c8da94 --- /dev/null +++ b/android/player-ui/src/main/AndroidManifest.xml @@ -0,0 +1,3 @@ + + + diff --git a/android/player/src/main/java/com/intuit/playerui/android/lifecycle/PlayerViewModel.kt b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModel.kt similarity index 98% rename from android/player/src/main/java/com/intuit/playerui/android/lifecycle/PlayerViewModel.kt rename to android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModel.kt index f9d0c3369..1d09cbdae 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/lifecycle/PlayerViewModel.kt +++ b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModel.kt @@ -1,4 +1,4 @@ -package com.intuit.playerui.android.lifecycle +package com.intuit.playerui.android.mvvm.lifecycle import android.app.Application import androidx.lifecycle.ViewModel @@ -7,6 +7,7 @@ import androidx.lifecycle.viewModelScope import com.intuit.playerui.android.AndroidPlayer import com.intuit.playerui.android.AndroidPlayerPlugin import com.intuit.playerui.android.asset.RenderableAsset +import com.intuit.playerui.android.lifecycle.ManagedPlayerState import com.intuit.playerui.core.bridge.runtime.Runtime import com.intuit.playerui.core.experimental.ExperimentalPlayerApi import com.intuit.playerui.core.managed.AsyncFlowIterator diff --git a/android/player/src/main/java/com/intuit/playerui/android/ui/PlayerFragment.kt b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/ui/PlayerFragment.kt similarity index 96% rename from android/player/src/main/java/com/intuit/playerui/android/ui/PlayerFragment.kt rename to android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/ui/PlayerFragment.kt index 1ac80e5c2..1c667a59c 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/ui/PlayerFragment.kt +++ b/android/player-ui/src/main/java/com/intuit/playerui/android/mvvm/ui/PlayerFragment.kt @@ -1,4 +1,4 @@ -package com.intuit.playerui.android.ui +package com.intuit.playerui.android.mvvm.ui import android.content.Context import android.os.Bundle @@ -14,14 +14,14 @@ import androidx.transition.Transition import com.intuit.playerui.android.AndroidPlayer import com.intuit.playerui.android.asset.RenderableAsset import com.intuit.playerui.android.asset.SuspendableAsset -import com.intuit.playerui.android.databinding.DefaultFallbackBinding -import com.intuit.playerui.android.databinding.FragmentPlayerBinding import com.intuit.playerui.android.extensions.into import com.intuit.playerui.android.extensions.intoOnMain import com.intuit.playerui.android.extensions.transitionInto import com.intuit.playerui.android.lifecycle.ManagedPlayerState -import com.intuit.playerui.android.lifecycle.PlayerViewModel -import com.intuit.playerui.android.lifecycle.fail +import com.intuit.playerui.android.mvvm.databinding.DefaultFallbackBinding +import com.intuit.playerui.android.mvvm.databinding.FragmentPlayerBinding +import com.intuit.playerui.android.mvvm.lifecycle.PlayerViewModel +import com.intuit.playerui.android.mvvm.lifecycle.fail import com.intuit.playerui.core.experimental.ExperimentalPlayerApi import com.intuit.playerui.core.managed.AsyncFlowIterator import kotlinx.coroutines.CoroutineScope diff --git a/android/player/src/main/res/layout/default_fallback.xml b/android/player-ui/src/main/res/layout/default_fallback.xml similarity index 100% rename from android/player/src/main/res/layout/default_fallback.xml rename to android/player-ui/src/main/res/layout/default_fallback.xml diff --git a/android/player/src/main/res/layout/fragment_player.xml b/android/player-ui/src/main/res/layout/fragment_player.xml similarity index 100% rename from android/player/src/main/res/layout/fragment_player.xml rename to android/player-ui/src/main/res/layout/fragment_player.xml diff --git a/android/player/src/test/java/com/intuit/playerui/android/lifecycle/PlayerViewModelTest.kt b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt similarity index 98% rename from android/player/src/test/java/com/intuit/playerui/android/lifecycle/PlayerViewModelTest.kt rename to android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt index d092d7d4e..363739edf 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/lifecycle/PlayerViewModelTest.kt +++ b/android/player-ui/src/test/java/com/intuit/playerui/android/mvvm/lifecycle/PlayerViewModelTest.kt @@ -1,8 +1,9 @@ -package com.intuit.playerui.android.lifecycle +package com.intuit.playerui.android.mvvm.lifecycle import android.util.Level -import android.util.clearLogs +import com.intuit.playerui.android.lifecycle.ManagedPlayerState import com.intuit.playerui.android.utils.SimpleAsset +import com.intuit.playerui.android.utils.clearLogs import com.intuit.playerui.core.bridge.PlayerRuntimeException import com.intuit.playerui.core.bridge.runtime.Runtime import com.intuit.playerui.core.managed.AsyncFlowIterator diff --git a/android/player/BUILD b/android/player/BUILD index 700d4c5d6..21c5a4e7a 100644 --- a/android/player/BUILD +++ b/android/player/BUILD @@ -3,7 +3,7 @@ load("@build_constants//:constants.bzl", "VERSION") load("//jvm:build.bzl", "distribution") load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") -load("@junit//junit5-jupiter-starter-bazel:junit5.bzl", "kt_jvm_junit5_test") +load("//android/player:build.bzl", "kt_player_test") load("@rules_player//kotlin:lint.bzl", "lint") load("@grab_bazel_common//tools/databinding:databinding.bzl", "kt_db_android_library") @@ -26,13 +26,26 @@ distribution( maven_coordinates = "com.intuit.playerui:android:%s" % VERSION, ) -kt_jvm_junit5_test( +kt_player_test( name = "player-tests", - srcs = glob(["src/test/java/**"]), - associates = [":player-kotlin"], - kotlinc_opts = "//jvm:test_options", - test_package = "com.intuit.playerui.android", - deps = [":player"] + test_deps, + srcs = [ + "src/test/java/com/intuit/playerui/android/AndroidPlayerTest.kt", + "src/test/java/com/intuit/playerui/android/AssetContextTest.kt", + "src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt" + ] +) + +filegroup( + name = "manifest", + srcs = ["src/main/AndroidManifest.xml"], + visibility = ["//visibility:public"] +) + +kt_jvm_library( + name = "player-associates", + srcs = glob(["src/main/java/**/*.kt"]) + [":player-stubs_binding.srcjar"], + deps = main_deps + ["@grab_bazel_common//tools/android:android_sdk", ":player-r-classes"], + visibility = ["//visibility:public"] ) lint( diff --git a/android/player/build.bzl b/android/player/build.bzl new file mode 100644 index 000000000..878084fcf --- /dev/null +++ b/android/player/build.bzl @@ -0,0 +1,27 @@ +load("@junit//junit5-jupiter-starter-bazel:junit5.bzl", "kt_jvm_junit5_test") +load("@rules_player//kotlin:lint.bzl", "lint") +load("//android/player:deps.bzl", "test_deps") + +def kt_player_test( + name, + srcs = [], + associates = [], + deps = []): + kt_jvm_junit5_test( + name = name, + srcs = srcs, + associates = ["//android/player:player-associates"], + kotlinc_opts = "//jvm:test_options", + test_package = "com.intuit.playerui.android", + deps = deps + [ + "//android/player:player", + "//android/player/src/test/java/android/util:android_utils_stub", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_test_utils", + "//android/player/src/test/java/com/intuit/playerui/android/utils:android_log_util"] + test_deps, + ) + + lint( + name = name, + srcs = native.glob(["**/*.kt"]), + lint_config = "//jvm:lint_config", + ) diff --git a/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt b/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt index f12a0c61c..4d93e6695 100644 --- a/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt +++ b/android/player/src/main/java/com/intuit/playerui/android/extensions/Into.kt @@ -9,7 +9,7 @@ import androidx.transition.TransitionManager import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext -internal suspend infix fun View?.intoOnMain(root: FrameLayout) = withContext(Dispatchers.Main) { +suspend infix fun View?.intoOnMain(root: FrameLayout) = withContext(Dispatchers.Main) { into(root) } diff --git a/android/player/src/test/java/android/util/BUILD b/android/player/src/test/java/android/util/BUILD new file mode 100644 index 000000000..ec13deac7 --- /dev/null +++ b/android/player/src/test/java/android/util/BUILD @@ -0,0 +1,9 @@ +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("//android/player:deps.bzl", "test_deps") + +kt_jvm_library( + name = "android_utils_stub", + srcs = ["Log.kt"], + deps = ["//android/player:player"], + visibility = ["//visibility:public"] +) diff --git a/android/player/src/test/java/android/util/Log.kt b/android/player/src/test/java/android/util/Log.kt index 6c779bc31..646e4eb4e 100644 --- a/android/player/src/test/java/android/util/Log.kt +++ b/android/player/src/test/java/android/util/Log.kt @@ -2,49 +2,47 @@ package android.util -internal var e: MutableList = mutableListOf() -internal fun e(tag: String, msg: String): Int { +var e: MutableList = mutableListOf() +fun e(tag: String, msg: String): Int { val message = "ERROR: $tag: $msg" e.add(message) println(message) return 0 } -internal var w: MutableList = mutableListOf() -internal fun w(tag: String, msg: String): Int { +var w: MutableList = mutableListOf() +fun w(tag: String, msg: String): Int { val message = "WARN: $tag: $msg" w.add(message) println(message) return 0 } -internal var i: MutableList = mutableListOf() -internal fun i(tag: String, msg: String): Int { +var i: MutableList = mutableListOf() +fun i(tag: String, msg: String): Int { val message = "INFO: $tag: $msg" i.add(message) println(message) return 0 } -internal var d: MutableList = mutableListOf() -internal fun d(tag: String, msg: String): Int { +var d: MutableList = mutableListOf() +fun d(tag: String, msg: String): Int { val message = "DEBUG: $tag: $msg" d.add(message) println(message) return 0 } -internal var v: MutableList = mutableListOf() -internal fun v(tag: String, msg: String): Int { +var v: MutableList = mutableListOf() +fun v(tag: String, msg: String): Int { val message = "TRACE: $tag: $msg" v.add(message) println(message) return 0 } -internal fun clearLogs() = listOf(e, w, i, d, v).forEach { it.clear() } - -internal enum class Level { +enum class Level { Error, Warn, Info, Debug, Verbose; fun getLogs(): List = when (this) { diff --git a/android/player/src/test/java/com/intuit/playerui/android/renderer/BrokenAssetTest.kt b/android/player/src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt similarity index 94% rename from android/player/src/test/java/com/intuit/playerui/android/renderer/BrokenAssetTest.kt rename to android/player/src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt index fc2f315bf..28a9f8b24 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/renderer/BrokenAssetTest.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/BrokenAssetTest.kt @@ -1,10 +1,8 @@ -package com.intuit.playerui.android.renderer +package com.intuit.playerui.android import android.content.Context import android.widget.FrameLayout import android.widget.LinearLayout -import com.intuit.playerui.android.AndroidPlayer -import com.intuit.playerui.android.AssetContext import com.intuit.playerui.android.asset.StaleViewException import com.intuit.playerui.android.utils.BrokenAsset import com.intuit.playerui.android.utils.BrokenAsset.Companion.asset diff --git a/android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD b/android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD new file mode 100644 index 000000000..5fc69cb41 --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/extensions/BUILD @@ -0,0 +1,11 @@ +load("//android/player:build.bzl", "kt_player_test") + +kt_player_test( + name = "extensions-tests", + srcs = [ + "CoroutineTestDispatcherExtension.kt", + "IntoKtTest.kt" + ], +) + +exports_files(["CoroutineTestDispatcherExtension.kt"]) diff --git a/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt b/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt index f3c61dfba..bde356fc8 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/logger/AndroidLoggerTest.kt @@ -1,11 +1,11 @@ package com.intuit.playerui.android.logger -import android.util.clearLogs import android.util.d import android.util.e import android.util.i import android.util.v import android.util.w +import com.intuit.playerui.android.utils.clearLogs import org.junit.jupiter.api.AfterEach import org.junit.jupiter.api.Assertions.assertEquals import org.junit.jupiter.api.Assertions.assertTrue @@ -36,8 +36,6 @@ internal class AndroidLoggerTest { assertInfo() logger.warn(warn) assertWarn() - logger.error(error) - assertError() } @Test diff --git a/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD new file mode 100644 index 000000000..b9f5dab86 --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/logger/BUILD @@ -0,0 +1,9 @@ +load("//android/player:build.bzl", "kt_player_test") + +kt_player_test( + name = "logger-tests", + srcs = [ + "AndroidLoggerTest.kt" + ], + associates = ["//android/player:player-associates"] +) diff --git a/android/player/src/test/java/com/intuit/playerui/android/registry/BUILD b/android/player/src/test/java/com/intuit/playerui/android/registry/BUILD new file mode 100644 index 000000000..c98757d4a --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/registry/BUILD @@ -0,0 +1,10 @@ +load("//android/player:build.bzl", "kt_player_test") + +kt_player_test( + name = "registry-plugin-tests", + srcs = [ + "RegistryPluginTest.kt", + "//android/player/src/test/java/com/intuit/playerui/android/renderer:BaseRenderableAssetTest.kt", + "//android/player/src/test/java/com/intuit/playerui/android/extensions:CoroutineTestDispatcherExtension.kt" + ] +) diff --git a/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD new file mode 100644 index 000000000..f10ae0231 --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/renderer/BUILD @@ -0,0 +1,17 @@ +load("//android/player:build.bzl", "kt_player_test") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("//android/player:deps.bzl", "test_deps") + +kt_player_test( + name = "render-tests", + srcs = [ + "BaseRenderableAssetTest.kt", + "HydrationScopeTest.kt", + "NestedAssetTest.kt", + "SimpleAssetTest.kt", + "//android/player/src/test/java/com/intuit/playerui/android/extensions:CoroutineTestDispatcherExtension.kt" + ] +) + +exports_files(["BaseRenderableAssetTest.kt"]) + diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD new file mode 100644 index 000000000..a3372dd4a --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BUILD @@ -0,0 +1,28 @@ +load("@io_bazel_rules_kotlin//kotlin:android.bzl", "kt_android_library") +load("@io_bazel_rules_kotlin//kotlin:jvm.bzl", "kt_jvm_library") +load("//android/player:deps.bzl", "test_deps") + +kt_android_library( + name = "android_test_utils", + srcs = [ + "Json.kt", + "BrokenAsset.kt", + "NestedAsset.kt", + "OtherSimpleAsset.kt", + "SimpleAsset.kt", + "TestAssetsPlugin.kt", + "Updates.kt" + ], + custom_package = "com.intuit.playerui.android.utils", + manifest = "//android/player:manifest", + associates = ["//android/player:player-associates"], + deps = ["//android/player:player"] + test_deps, + visibility = ["//visibility:public"] +) + +kt_jvm_library( + name = "android_log_util", + srcs = ["LogUtil.kt"], + deps = ["//android/player/src/test/java/android/util:android_utils_stub"], + visibility = ["//visibility:public"] +) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt index a12215ed5..12e3a260d 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/BrokenAsset.kt @@ -14,7 +14,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json -internal class BrokenAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Data.serializer()) { +class BrokenAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Data.serializer()) { @Serializable data class Data( diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt index e46f8a675..44c50dc3e 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/Json.kt @@ -3,4 +3,4 @@ package com.intuit.playerui.android.utils import kotlinx.serialization.json.Json import kotlinx.serialization.json.JsonElement -internal fun JsonElement.stringify() = Json.encodeToString(JsonElement.serializer(), this) +fun JsonElement.stringify() = Json.encodeToString(JsonElement.serializer(), this) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/LogUtil.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/LogUtil.kt new file mode 100644 index 000000000..8984f2775 --- /dev/null +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/LogUtil.kt @@ -0,0 +1,5 @@ +package com.intuit.playerui.android.utils + +import android.util.* + +fun clearLogs() = listOf(e, w, i, d, v).forEach { it.clear() } diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt index 3467839fd..20e8094c4 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/NestedAsset.kt @@ -16,7 +16,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -internal class NestedAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { +class NestedAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { val nested = expand("nested") val nestedList = expandList("nestedAssets") diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt index 2618a7338..a344b70be 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/OtherSimpleAsset.kt @@ -14,7 +14,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -internal class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { +class OtherSimpleAsset(assetContext: AssetContext) : SuspendableAsset(assetContext, NodeSerializer()) { override suspend fun initView(data: Node) = ImageView(context) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt index 1311b47c2..d8ae5abb8 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/SimpleAsset.kt @@ -13,7 +13,7 @@ import com.intuit.playerui.utils.makeFlow import kotlinx.serialization.json.Json @Suppress("DEPRECATION_ERROR") -internal class SimpleAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Node.serializer()) { +class SimpleAsset(assetContext: AssetContext) : DecodableAsset(assetContext, Node.serializer()) { override fun initView() = TextView(context) diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt index db707e7cb..46d554c63 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/TestAssetsPlugin.kt @@ -5,7 +5,7 @@ import com.intuit.playerui.android.AndroidPlayerPlugin import com.intuit.playerui.android.METADATA import com.intuit.playerui.android.TYPE -internal object TestAssetsPlugin : AndroidPlayerPlugin { +object TestAssetsPlugin : AndroidPlayerPlugin { override fun apply(androidPlayer: AndroidPlayer) { androidPlayer.registerAsset("simple", ::SimpleAsset) androidPlayer.registerAsset( diff --git a/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt b/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt index 0d9ed0802..5972a8b77 100644 --- a/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt +++ b/android/player/src/test/java/com/intuit/playerui/android/utils/Updates.kt @@ -14,19 +14,19 @@ import kotlinx.coroutines.suspendCancellableCoroutine import kotlinx.serialization.json.JsonElement import kotlin.coroutines.resume -internal sealed class Update { +sealed class Update { data class Asset(val asset: RenderableAsset?, val index: Int) : Update() data class State(val state: PlayerFlowState) : Update() } -internal suspend fun AndroidPlayer.awaitFirstView(flow: JsonElement): RenderableAsset? = +suspend fun AndroidPlayer.awaitFirstView(flow: JsonElement): RenderableAsset? = suspendCancellableCoroutine { cont -> onUpdate { asset, _ -> cont.resume(asset) } start(flow) } -internal fun AndroidPlayer.updates(flow: JsonElement, take: Int = 1) = updates(flow.stringify(), take) -internal fun AndroidPlayer.updates(flow: String, take: Int = 1): Flow = callbackFlow { +fun AndroidPlayer.updates(flow: JsonElement, take: Int = 1) = updates(flow.stringify(), take) +fun AndroidPlayer.updates(flow: String, take: Int = 1): Flow = callbackFlow { var count = 0 onUpdate { asset, _ -> trySend(Update.Asset(asset, count)).isSuccess diff --git a/docs/site/pages/assets/reference.mdx b/docs/site/pages/assets/reference.mdx index d85e2ef72..158dcc669 100644 --- a/docs/site/pages/assets/reference.mdx +++ b/docs/site/pages/assets/reference.mdx @@ -24,6 +24,7 @@ const reactPlayer = new ReactPlayer({ The reference assets + React player can be viewed in [Storybook](/storybook-demo) + @@ -57,4 +58,3 @@ val player = AndroidPlayer(context, ReferenceAssetsPlugin()) ``` -