Benoit Marty
10 months ago
3 changed files with 119 additions and 0 deletions
@ -0,0 +1,81 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package io.element.android.libraries.mediaviewer.impl.local |
||||||
|
|
||||||
|
import android.net.Uri |
||||||
|
import androidx.activity.compose.LocalActivityResultRegistryOwner |
||||||
|
import androidx.compose.runtime.CompositionLocalProvider |
||||||
|
import androidx.compose.ui.platform.LocalContext |
||||||
|
import app.cash.molecule.RecompositionMode |
||||||
|
import app.cash.molecule.moleculeFlow |
||||||
|
import app.cash.turbine.test |
||||||
|
import com.google.common.truth.Truth.assertThat |
||||||
|
import io.element.android.libraries.matrix.test.core.aBuildMeta |
||||||
|
import io.element.android.libraries.mediaviewer.test.viewer.aLocalMedia |
||||||
|
import io.element.android.tests.testutils.testCoroutineDispatchers |
||||||
|
import kotlinx.coroutines.test.TestScope |
||||||
|
import kotlinx.coroutines.test.runTest |
||||||
|
import org.junit.Test |
||||||
|
import org.junit.runner.RunWith |
||||||
|
import org.robolectric.RobolectricTestRunner |
||||||
|
import org.robolectric.RuntimeEnvironment |
||||||
|
|
||||||
|
@RunWith(RobolectricTestRunner::class) |
||||||
|
class AndroidLocalMediaActionsTest { |
||||||
|
|
||||||
|
@Test |
||||||
|
fun `present - AndroidLocalMediaAction configure`() = runTest { |
||||||
|
val sut = createAndroidLocalMediaActions() |
||||||
|
moleculeFlow(RecompositionMode.Immediate) { |
||||||
|
CompositionLocalProvider( |
||||||
|
LocalContext provides RuntimeEnvironment.getApplication(), |
||||||
|
LocalActivityResultRegistryOwner provides NoOpActivityResultRegistryOwner() |
||||||
|
) { |
||||||
|
sut.Configure() |
||||||
|
} |
||||||
|
}.test { |
||||||
|
awaitItem() |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun `test AndroidLocalMediaAction share`() = runTest { |
||||||
|
val sut = createAndroidLocalMediaActions() |
||||||
|
val result = sut.share(aLocalMedia(Uri.parse("file://afile"))) |
||||||
|
assertThat(result.exceptionOrNull()).isNotNull() |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun `test AndroidLocalMediaAction open`() = runTest { |
||||||
|
val sut = createAndroidLocalMediaActions() |
||||||
|
val result = sut.open(aLocalMedia(Uri.parse("file://afile"))) |
||||||
|
assertThat(result.exceptionOrNull()).isNotNull() |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
fun `test AndroidLocalMediaAction save on disk`() = runTest { |
||||||
|
val sut = createAndroidLocalMediaActions() |
||||||
|
val result = sut.saveOnDisk(aLocalMedia(Uri.parse("file://afile"))) |
||||||
|
assertThat(result.exceptionOrNull()).isNotNull() |
||||||
|
} |
||||||
|
|
||||||
|
private fun TestScope.createAndroidLocalMediaActions() = AndroidLocalMediaActions( |
||||||
|
RuntimeEnvironment.getApplication(), |
||||||
|
testCoroutineDispatchers(), |
||||||
|
aBuildMeta() |
||||||
|
) |
||||||
|
} |
@ -0,0 +1,36 @@ |
|||||||
|
/* |
||||||
|
* Copyright (c) 2023 New Vector Ltd |
||||||
|
* |
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License"); |
||||||
|
* you may not use this file except in compliance with the License. |
||||||
|
* You may obtain a copy of the License at |
||||||
|
* |
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0 |
||||||
|
* |
||||||
|
* Unless required by applicable law or agreed to in writing, software |
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS, |
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
||||||
|
* See the License for the specific language governing permissions and |
||||||
|
* limitations under the License. |
||||||
|
*/ |
||||||
|
|
||||||
|
package io.element.android.libraries.mediaviewer.impl.local |
||||||
|
|
||||||
|
import androidx.activity.result.ActivityResultRegistry |
||||||
|
import androidx.activity.result.ActivityResultRegistryOwner |
||||||
|
import androidx.activity.result.contract.ActivityResultContract |
||||||
|
import androidx.core.app.ActivityOptionsCompat |
||||||
|
|
||||||
|
class NoOpActivityResultRegistryOwner : ActivityResultRegistryOwner { |
||||||
|
override val activityResultRegistry: ActivityResultRegistry |
||||||
|
get() = NoOpActivityResultRegistry() |
||||||
|
} |
||||||
|
|
||||||
|
class NoOpActivityResultRegistry : ActivityResultRegistry() { |
||||||
|
override fun <I : Any?, O : Any?> onLaunch( |
||||||
|
requestCode: Int, |
||||||
|
contract: ActivityResultContract<I, O>, |
||||||
|
input: I, |
||||||
|
options: ActivityOptionsCompat?, |
||||||
|
) = Unit |
||||||
|
} |
Loading…
Reference in new issue