Compile the real SIM monitor in the Android host tests

This commit is contained in:
evgeny committed 2026-10-27 21:39:26 +01:00
1 parent 6e6260ab29
commit 6a38eaa4eb
3 files changed
+17 -2

No files matched your search

@@ -7,9 +7,9 @@ kotlin {
sourceSets.named("main") {
// Компилируем настоящие компоненты приложения; Android fixtures существуют только в этом JVM-модуле.
kotlin.srcDir(providers.gradleProperty("routerSourceDir").getOrElse("../app/src/main/java"))
kotlin.include("android/**", "com/utun/chat/RouterHostApp.kt", "com/utun/chat/data/RouterHostEnvironment.kt",
kotlin.include("android/**", "androidx/**", "com/utun/chat/RouterHostApp.kt", "com/utun/chat/data/RouterHostEnvironment.kt",
"com/utun/chat/data/CallAudioRouter.kt", "com/utun/chat/data/CoreActivity.kt",
"com/utun/chat/data/ProximityManager.kt",
"com/utun/chat/data/ProximityManager.kt", "com/utun/chat/data/PhoneStateMonitor.kt",
"com/utun/chat/data/NetworkActivityMonitor.kt", "com/utun/chat/data/NetworkChangeMonitor.kt")
}
}
@@ -20,6 +20,7 @@ providers.gradleProperty("routerTestsBuildDir").orNull?.let { layout.buildDirect
dependencies {
implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.7.3")
testImplementation("junit:junit:4.13.2")
testImplementation("org.jetbrains.kotlinx:kotlinx-coroutines-test:1.7.3")
}
tasks.test {
@@ -3,6 +3,8 @@ package android.content
import android.media.AudioManager
import android.net.ConnectivityManager
import android.hardware.SensorManager
import android.telephony.SubscriptionManager
import android.telephony.TelephonyManager
import com.utun.chat.data.HostConfigProvider
/** Только host-тест: управляемые Android managers, без устройств/разрешений ОС. */
@@ -11,6 +13,8 @@ class Context {
var permissionGranted = true
var connectivityManager: ConnectivityManager? = ConnectivityManager()
var sensorManager: SensorManager? = SensorManager()
var subscriptionManager: SubscriptionManager? = SubscriptionManager()
var telephonyManager: TelephonyManager? = TelephonyManager()
val configProvider = HostConfigProvider()
val applicationContext: Context get() = this
fun getSystemService(name: String): Any? = when (name) {
@@ -22,6 +26,8 @@ class Context {
return type.cast(when (type) {
ConnectivityManager::class.java -> connectivityManager
SensorManager::class.java -> sensorManager
SubscriptionManager::class.java -> subscriptionManager
TelephonyManager::class.java -> telephonyManager
else -> error("Unknown service: $type")
})
}
@@ -4,6 +4,7 @@ import java.util.Collections
import java.util.concurrent.atomic.AtomicInteger
import kotlinx.coroutines.CompletableDeferred
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.flow.MutableStateFlow
/** Минимальная поверхность Telecom; Bluetooth lifecycle не создаёт настоящую Connection. */
class UtunConnection {
@@ -35,8 +36,14 @@ object NativeLib {
var activityAttempts = 0
var failActivityRequest = false
var acceptActivityRequest = true
val phoneRequests = mutableListOf<Pair<Int, Int>>()
var acceptPhoneRequest = true
fun notifyNetworkActive() { networkNotifications.incrementAndGet() }
fun isReady(): Boolean = ready
fun setPhoneState(state: Int, policy: Int): Boolean {
phoneRequests.add(state to policy)
return acceptPhoneRequest
}
fun updateSockets(config: String): Boolean { socketUpdates.add(config); return acceptSocketUpdate }
fun setActive(active: Boolean): Boolean {
activityAttempts++
@@ -49,6 +56,7 @@ object NativeLib {
/** Управляемая подготовка конфига: тест удерживает реальный worker, считает перекрытия и затем дожидается его завершения. */
class HostConfigProvider {
val incomingCallOptions = MutableStateFlow(List(5) { false })
val builds = AtomicInteger()
val inBuild = AtomicInteger()
val maximumConcurrentBuilds = AtomicInteger()