Skip to content

Commit 3ec64b2

Browse files
committed
refactor(core): add a common device test class to manage permissions, context,...
1 parent 44c7631 commit 3ec64b2

File tree

5 files changed

+25
-54
lines changed

5 files changed

+25
-54
lines changed

core/src/androidTest/java/io/github/thibaultbee/streampack/core/streamer/file/CameraStreamerFileTest.kt

Lines changed: 15 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package io.github.thibaultbee.streampack.core.streamer.file
1717

18-
import android.Manifest
19-
import android.content.Context
2018
import android.media.MediaFormat.MIMETYPE_AUDIO_AAC
2119
import android.media.MediaFormat.MIMETYPE_AUDIO_OPUS
2220
import android.media.MediaFormat.MIMETYPE_VIDEO_AVC
@@ -25,8 +23,6 @@ import android.util.Size
2523
import androidx.core.net.toFile
2624
import androidx.core.net.toUri
2725
import androidx.test.filters.LargeTest
28-
import androidx.test.platform.app.InstrumentationRegistry
29-
import androidx.test.rule.GrantPermissionRule
3026
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.MediaDescriptor
3127
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.UriMediaDescriptor
3228
import io.github.thibaultbee.streampack.core.elements.endpoints.IEndpointInternal
@@ -36,9 +32,9 @@ import io.github.thibaultbee.streampack.core.elements.endpoints.composites.sinks
3632
import io.github.thibaultbee.streampack.core.streamers.single.AudioConfig
3733
import io.github.thibaultbee.streampack.core.streamers.single.CameraSingleStreamer
3834
import io.github.thibaultbee.streampack.core.streamers.single.VideoConfig
35+
import io.github.thibaultbee.streampack.core.utils.DeviceTest
3936
import io.github.thibaultbee.streampack.core.utils.FileUtils
4037
import kotlinx.coroutines.test.runTest
41-
import org.junit.Rule
4238
import org.junit.Test
4339
import org.junit.runner.RunWith
4440
import org.junit.runners.Parameterized
@@ -51,45 +47,45 @@ class CameraStreamerFileTest(
5147
private val descriptor: MediaDescriptor,
5248
private val verify: Boolean,
5349
endpoint: IEndpointInternal?
54-
) {
55-
private val context: Context = InstrumentationRegistry.getInstrumentation().context
56-
private val streamer = if (endpoint != null) {
57-
CameraSingleStreamer(context, internalEndpoint = endpoint)
58-
} else {
59-
CameraSingleStreamer(context)
50+
) : DeviceTest() {
51+
private val streamer by lazy {
52+
if (endpoint != null) {
53+
CameraSingleStreamer(context, internalEndpoint = endpoint)
54+
} else {
55+
CameraSingleStreamer(context)
56+
}
6057
}
61-
private val info = streamer.getInfo(descriptor)
58+
private val info by lazy { streamer.getInfo(descriptor) }
6259

63-
private val videoCodec =
60+
private val videoCodec by lazy {
6461
if (info.video.supportedEncoders.contains(MIMETYPE_VIDEO_AVC)) {
6562
MIMETYPE_VIDEO_AVC
6663
} else if (info.video.supportedEncoders.contains(MIMETYPE_VIDEO_VP9)) {
6764
MIMETYPE_VIDEO_VP9
6865
} else {
6966
throw IllegalArgumentException("No supported video codec")
7067
}
68+
}
7169

72-
private val audioCodec =
70+
private val audioCodec by lazy {
7371
if (info.audio.supportedEncoders.contains(MIMETYPE_AUDIO_AAC)) {
7472
MIMETYPE_AUDIO_AAC
7573
} else if (info.audio.supportedEncoders.contains(MIMETYPE_AUDIO_OPUS)) {
7674
MIMETYPE_AUDIO_OPUS
7775
} else {
7876
throw IllegalArgumentException("No supported audio codec")
7977
}
78+
}
8079

81-
private val audioSampleRate =
80+
private val audioSampleRate by lazy {
8281
if (info.audio.getSupportedSampleRates(audioCodec).contains(44_100)) {
8382
44100
8483
} else if (info.audio.getSupportedSampleRates(audioCodec).contains(48_000)) {
8584
48_000
8685
} else {
8786
throw IllegalArgumentException("No supported audio sample rate for $audioCodec")
8887
}
89-
90-
@get:Rule
91-
val runtimePermissionRule: GrantPermissionRule =
92-
GrantPermissionRule.grant(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
88+
}
9389

9490
@Test
9591
fun writeToFile() = runTest(timeout = 200.seconds) {

core/src/androidTest/java/io/github/thibaultbee/streampack/core/streamer/file/CameraStreamerMultiEndpointTest.kt

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,22 +15,18 @@
1515
*/
1616
package io.github.thibaultbee.streampack.core.streamer.file
1717

18-
import android.Manifest
19-
import android.content.Context
2018
import android.util.Log
2119
import android.util.Size
2220
import androidx.core.net.toFile
2321
import androidx.core.net.toUri
2422
import androidx.test.filters.LargeTest
25-
import androidx.test.platform.app.InstrumentationRegistry
26-
import androidx.test.rule.GrantPermissionRule
2723
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.UriMediaDescriptor
2824
import io.github.thibaultbee.streampack.core.streamers.single.AudioConfig
2925
import io.github.thibaultbee.streampack.core.streamers.single.CameraSingleStreamer
3026
import io.github.thibaultbee.streampack.core.streamers.single.VideoConfig
27+
import io.github.thibaultbee.streampack.core.utils.DeviceTest
3128
import io.github.thibaultbee.streampack.core.utils.FileUtils
3229
import kotlinx.coroutines.test.runTest
33-
import org.junit.Rule
3430
import org.junit.Test
3531
import kotlin.time.Duration.Companion.milliseconds
3632
import kotlin.time.Duration.Companion.seconds
@@ -39,9 +35,8 @@ import kotlin.time.Duration.Companion.seconds
3935
* Test [CameraSingleStreamer] with multiple streams.
4036
*/
4137
@LargeTest
42-
class CameraStreamerMultiEndpointTest {
43-
private val context: Context = InstrumentationRegistry.getInstrumentation().context
44-
private val streamer = CameraSingleStreamer(context)
38+
class CameraStreamerMultiEndpointTest : DeviceTest() {
39+
private val streamer by lazy { CameraSingleStreamer(context) }
4540

4641
private val descriptors = listOf(
4742
UriMediaDescriptor(FileUtils.createCacheFile("video.ts").toUri()),
@@ -50,10 +45,6 @@ class CameraStreamerMultiEndpointTest {
5045
UriMediaDescriptor(FileUtils.createCacheFile("video2.mp4").toUri()),
5146
)
5247

53-
@get:Rule
54-
val runtimePermissionRule: GrantPermissionRule =
55-
GrantPermissionRule.grant(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
56-
5748
@Test
5849
fun writeToEndpoints() = runTest(timeout = 200.seconds) {
5950
val audioConfig = AudioConfig()

core/src/androidTest/java/io/github/thibaultbee/streampack/core/streamer/state/AudioOnlyStreamerStateTest.kt

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -15,32 +15,24 @@
1515
*/
1616
package io.github.thibaultbee.streampack.core.streamer.state
1717

18-
import android.Manifest
19-
import android.content.Context
2018
import androidx.core.net.toUri
21-
import androidx.test.platform.app.InstrumentationRegistry
22-
import androidx.test.rule.GrantPermissionRule
2319
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.MediaDescriptor
2420
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.UriMediaDescriptor
2521
import io.github.thibaultbee.streampack.core.streamers.single.AudioOnlySingleStreamer
2622
import io.github.thibaultbee.streampack.core.streamers.single.startStream
23+
import io.github.thibaultbee.streampack.core.utils.DeviceTest
2724
import io.github.thibaultbee.streampack.core.utils.ConfigurationUtils
2825
import io.github.thibaultbee.streampack.core.utils.FileUtils
2926
import kotlinx.coroutines.test.runTest
3027
import org.junit.Assert.fail
31-
import org.junit.Rule
3228
import org.junit.Test
3329
import org.junit.runner.RunWith
3430
import org.junit.runners.Parameterized
3531

3632
@RunWith(Parameterized::class)
37-
class AudioOnlyStreamerStateTest(private val descriptor: MediaDescriptor) {
38-
private val context: Context = InstrumentationRegistry.getInstrumentation().context
39-
private val streamer = AudioOnlySingleStreamer(context)
40-
41-
@get:Rule
42-
val runtimePermissionRule: GrantPermissionRule =
43-
GrantPermissionRule.grant(Manifest.permission.RECORD_AUDIO)
33+
class AudioOnlyStreamerStateTest(private val descriptor: MediaDescriptor) :
34+
DeviceTest(withCamera = false) {
35+
private val streamer by lazy { AudioOnlySingleStreamer(context) }
4436

4537
@Test
4638
fun defaultUsageTest() = runTest {

core/src/androidTest/java/io/github/thibaultbee/streampack/core/streamer/state/CameraStreamerStateTest.kt

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,8 @@
1515
*/
1616
package io.github.thibaultbee.streampack.core.streamer.state
1717

18-
import android.Manifest
19-
import android.content.Context
2018
import androidx.core.net.toUri
2119
import androidx.test.ext.junit.rules.ActivityScenarioRule
22-
import androidx.test.platform.app.InstrumentationRegistry
23-
import androidx.test.rule.GrantPermissionRule
2420
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.MediaDescriptor
2521
import io.github.thibaultbee.streampack.core.configuration.mediadescriptor.UriMediaDescriptor
2622
import io.github.thibaultbee.streampack.core.streamer.surface.SurfaceUtils
@@ -41,12 +37,7 @@ class CameraStreamerStateTest(descriptor: MediaDescriptor) :
4137
StreamerStateTest(
4238
descriptor
4339
) {
44-
private val context: Context = InstrumentationRegistry.getInstrumentation().context
45-
override val streamer = CameraSingleStreamer(context)
46-
47-
@get:Rule
48-
val runtimePermissionRule: GrantPermissionRule =
49-
GrantPermissionRule.grant(Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO)
40+
override val streamer by lazy { CameraSingleStreamer(context) }
5041

5142
@get:Rule
5243
val activityScenarioRule = ActivityScenarioRule(SurfaceViewTestActivity::class.java)

core/src/androidTest/java/io/github/thibaultbee/streampack/core/streamer/state/StreamerStateTest.kt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@ import io.github.thibaultbee.streampack.core.streamers.interfaces.releaseBlockin
2020
import io.github.thibaultbee.streampack.core.streamers.single.SingleStreamer
2121
import io.github.thibaultbee.streampack.core.streamers.single.startStream
2222
import io.github.thibaultbee.streampack.core.utils.ConfigurationUtils
23+
import io.github.thibaultbee.streampack.core.utils.DeviceTest
2324
import kotlinx.coroutines.test.runTest
2425
import org.junit.After
2526
import org.junit.Assert.fail
2627
import org.junit.Test
2728

2829
abstract class StreamerStateTest(
2930
protected val descriptor: MediaDescriptor
30-
) {
31+
) : DeviceTest() {
3132
protected abstract val streamer: SingleStreamer
3233

3334
@After

0 commit comments

Comments
 (0)