Files
Qlyra/test/call_mic_selection_test.dart
T
sevenhill f74057ce9b
Build Android (FCM) / build-android-fcm (push) Canceled after 0s
Build Android / build-android (push) Canceled after 0s
Build iOS / build-ios (push) Canceled after 0s
Build Linux / build-linux (push) Canceled after 0s
Build macOS / build-macos (push) Canceled after 0s
Build Windows / build-windows (push) Canceled after 0s
Release (main) / android (oneme) (push) Canceled after 0s
Release (main) / android (qlyra) (push) Canceled after 0s
Release (main) / windows (push) Canceled after 0s
Release (main) / linux (push) Canceled after 0s
Release (main) / macos (push) Canceled after 0s
Release (main) / ios (push) Canceled after 0s
Release (main) / release (push) Canceled after 0s
Rebrand application as Qlyra
2026-08-30 13:16:17 +03:00

107 lines
3.6 KiB
Dart

import 'package:flutter/foundation.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:qlyra/core/calls/audio_devices.dart';
import 'package:qlyra/core/calls/pulse_audio.dart';
import 'package:qlyra/core/config/call_no_mute.dart';
const _deviceId = 'mic-test-0';
const _sourcesJson = '''
[
{
"name": "alsa_input.test-device",
"description": "(null)",
"monitor_source": "",
"properties": {"device.description": "Тестовая звуковая карта"}
},
{
"name": "alsa_output.test-device.monitor",
"description": "(null)",
"monitor_source": "alsa_output.test-device",
"properties": {"device.description": "Тестовая звуковая карта"}
},
{
"name": "virtual_sink.monitor",
"description": "Monitor of Virtual Sink",
"monitor_source": "virtual_sink",
"properties": {}
},
{
"name": "qlyra_capture_4242",
"description": "qlyra_capture_4242",
"monitor_source": "",
"properties": {}
}
]
''';
void main() {
tearDown(() {
debugDefaultTargetPlatformOverride = null;
CallNoMute.enabled = false;
});
test('--no-mute включается только своим флагом', () {
CallNoMute.enabled = false;
CallNoMute.parse(const ['--debug-test']);
expect(CallNoMute.enabled, isFalse);
CallNoMute.parse(const ['--debug-test', '--no-mute']);
expect(CallNoMute.enabled, isTrue);
});
test('desktop выбирает вход через sourceId', () {
debugDefaultTargetPlatformOverride = TargetPlatform.linux;
expect(AudioDevices.switchesInsideEngine, isFalse);
expect(AudioDevices.micConstraints(_deviceId), <String, dynamic>{
'optional': [
{'sourceId': _deviceId},
],
});
});
test('мобильные платформы переключают вход внутри движка', () {
debugDefaultTargetPlatformOverride = TargetPlatform.android;
expect(AudioDevices.switchesInsideEngine, isTrue);
expect(AudioDevices.micConstraints(_deviceId), isTrue);
});
test('без выбранного устройства ограничений нет', () {
debugDefaultTargetPlatformOverride = TargetPlatform.linux;
expect(AudioDevices.micConstraints(null), isTrue);
expect(AudioDevices.micConstraints(''), isTrue);
});
test('захват монитора глушит шумодав и АРУ, но оставляет эхоподавление', () {
debugDefaultTargetPlatformOverride = TargetPlatform.linux;
final constraints =
AudioDevices.micConstraints(_deviceId, monitorCapture: true)
as Map<String, dynamic>;
expect(constraints['optional'], [
{'sourceId': _deviceId},
]);
expect(constraints['echoCancellation'], isTrue);
expect(constraints['noiseSuppression'], isFalse);
expect(constraints['autoGainControl'], isFalse);
expect(constraints['highpassFilter'], isFalse);
});
test('источники pulse разбираются вместе с мониторами', () {
final sources = PulseAudio.parseSources(_sourcesJson);
expect(sources.map((s) => s.name), [
'alsa_input.test-device',
'alsa_output.test-device.monitor',
'virtual_sink.monitor',
]);
expect(sources[0].isMonitor, isFalse);
expect(sources[0].label, 'Тестовая звуковая карта');
expect(sources[1].isMonitor, isTrue);
expect(sources[1].label, 'Monitor of Тестовая звуковая карта');
expect(sources[2].label, 'Monitor of Virtual Sink');
});
test('битый вывод pactl не роняет разбор', () {
expect(PulseAudio.parseSources('не json'), isEmpty);
});
}