//package com.mogo.functions.test // //import androidx.test.core.app.* //import androidx.test.ext.junit.runners.* //import androidx.test.filters.* //import com.mogo.eagle.core.function.hmi.ui.* //import com.mogo.eagle.core.function.main.* //import com.mogo.launcher.patch.* //import com.mogo.launcher.patch.utils.* //import kotlinx.coroutines.* //import org.junit.* //import org.junit.runner.* //import java.io.* //import java.util.concurrent.* //import java.util.concurrent.TimeUnit.MILLISECONDS //import kotlin.Result // //@RunWith(AndroidJUnit4::class) //@LargeTest //class PatchUtilsTest { // // // lateinit var launch: ActivityScenario // // @Before // fun before() { // launch = ActivityScenario.launch(MainLauncherActivity::class.java) // } // // // @Test // fun testGeneratePatchAndMergeThenInstall() = runBlocking { // val f = ensureMoGoHmiFragmentShow() // withContext(Dispatchers.Default) { // // // val context = f.context ?: return@withContext // val oldApkPath = context.let { // it.packageManager.getPackageInfo(it.packageName, 0)?.applicationInfo?.sourceDir // } ?: return@withContext // // val oldApk = File(oldApkPath) // if (!oldApk.exists()) { // throw AssertionError("old apk file is not exist.") // } // val oldApkTemp = File(context.getExternalFilesDir(null), "patches/old.apk") // if (oldApkTemp.exists()) { // oldApkTemp.delete() // } // oldApkTemp.parentFile?.takeIf { !it.exists() }?.also { it.mkdirs() } // // oldApk.copyTo(oldApkTemp) // val patch = File(context.getExternalFilesDir(null), "patches/patch.zip") // if (!patch.exists()) { // throw AssertionError("patch file is not exist.") // } // val newApk = File(context.getExternalFilesDir(null), "patches/new.apk") //// PatchUtils.applyPatch(context, File(oldApkPath), patch, newApk) //// PatchUtils.install(context, newApk) // } // delay(TimeUnit.MINUTES.toMillis(1)) // } // // // private suspend fun ensureMoGoHmiFragmentShow(): MoGoHmiFragment = suspendCancellableCoroutine { // launch.onActivity { itx -> // val executor = Executors.newSingleThreadScheduledExecutor() // executor.scheduleAtFixedRate({ // var find = // itx.supportFragmentManager.fragments.find { it is MoGoHmiFragment } as? MoGoHmiFragment // while (find == null) { // find = // itx.supportFragmentManager.fragments.find { it is MoGoHmiFragment } as? MoGoHmiFragment // } // while (!find.isResumed) { // Thread.sleep(500) // } // it.resumeWith(Result.success(find)) // try { // Thread.sleep(500) // executor.shutdownNow() // } catch (e: Throwable) { // e.printStackTrace() // } // }, 50, 500, MILLISECONDS) // } // } // //}