From d259179bffbdb2350b57e66c7a8d9552e5fa50d3 Mon Sep 17 00:00:00 2001 From: Seungsoo Lee Date: Tue, 23 Jun 2026 18:23:15 +0900 Subject: [PATCH 1/2] [tizen_audio_manager] Add regression integration tests Add 2 integration test cases for previously untested public API: - currentPlaybackType returns a valid AudioVolumeType: verifies the getter returns a recognized enum value. - onChanged emits VolumeChangedEvent when volume is changed: subscribes to the stream, triggers a volume change via setLevel, and asserts the emitted event carries the correct type and level. All 19 tests pass on the Samsung TV emulator (T-samsung-10.0-x86_64). --- packages/tizen_audio_manager/CHANGELOG.md | 1 + .../integration_test/audio_manager_test.dart | 40 +++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/packages/tizen_audio_manager/CHANGELOG.md b/packages/tizen_audio_manager/CHANGELOG.md index b9b073c5b..4505f6c0a 100644 --- a/packages/tizen_audio_manager/CHANGELOG.md +++ b/packages/tizen_audio_manager/CHANGELOG.md @@ -5,6 +5,7 @@ * Update code format. * Add a 3-second delay in integration_test to support the media volume reset feature of the Tizen Volume app for hearing protection. +* Add 2 integration test cases. ## 0.1.1 diff --git a/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart b/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart index 3374aab27..fd1c02890 100644 --- a/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart +++ b/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart @@ -2,6 +2,8 @@ // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. +import 'dart:async'; + import 'package:flutter_test/flutter_test.dart'; import 'package:integration_test/integration_test.dart'; import 'package:tizen_audio_manager/tizen_audio_manager.dart'; @@ -204,4 +206,42 @@ void main() { level = await AudioManager.volumeController.getLevel(AudioVolumeType.voip); expect(level, equals(0)); }); + + testWidgets('currentPlaybackType returns a valid AudioVolumeType', + (WidgetTester tester) async { + final AudioVolumeType type = + await AudioManager.volumeController.currentPlaybackType; + expect(AudioVolumeType.values, contains(type)); + }); + + testWidgets('onChanged emits VolumeChangedEvent when volume is changed', + (WidgetTester tester) async { + final int originalLevel = + await AudioManager.volumeController.getLevel(AudioVolumeType.system); + final int maxLevel = + await AudioManager.volumeController.getMaxLevel(AudioVolumeType.system); + final int targetLevel = originalLevel == maxLevel ? 0 : maxLevel; + + final Completer completer = + Completer(); + final StreamSubscription subscription = + AudioManager.volumeController.onChanged + .listen((VolumeChangedEvent event) { + if (event.type == AudioVolumeType.system && !completer.isCompleted) { + completer.complete(event); + } + }); + + await AudioManager.volumeController.setLevel( + AudioVolumeType.system, targetLevel); + final VolumeChangedEvent event = + await completer.future.timeout(const Duration(seconds: 5)); + + expect(event.type, equals(AudioVolumeType.system)); + expect(event.level, equals(targetLevel)); + + await AudioManager.volumeController.setLevel( + AudioVolumeType.system, originalLevel); + await subscription.cancel(); + }); } From 7a2d1ab450f637bd1468856a912e92915ef0608e Mon Sep 17 00:00:00 2001 From: Seungsoo Lee Date: Tue, 30 Jun 2026 16:07:10 +0900 Subject: [PATCH 2/2] [tizen_audio_manager] Ensure cleanup runs on test failure Wrap the onChanged stream test body in a try-finally block so that the original volume is restored and the stream subscription is cancelled even when the timeout or an assertion fails. --- .../integration_test/audio_manager_test.dart | 30 ++++++++++--------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart b/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart index fd1c02890..2cc76d261 100644 --- a/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart +++ b/packages/tizen_audio_manager/example/integration_test/audio_manager_test.dart @@ -224,24 +224,26 @@ void main() { final Completer completer = Completer(); - final StreamSubscription subscription = - AudioManager.volumeController.onChanged - .listen((VolumeChangedEvent event) { + final StreamSubscription subscription = AudioManager + .volumeController.onChanged + .listen((VolumeChangedEvent event) { if (event.type == AudioVolumeType.system && !completer.isCompleted) { completer.complete(event); } }); - await AudioManager.volumeController.setLevel( - AudioVolumeType.system, targetLevel); - final VolumeChangedEvent event = - await completer.future.timeout(const Duration(seconds: 5)); - - expect(event.type, equals(AudioVolumeType.system)); - expect(event.level, equals(targetLevel)); - - await AudioManager.volumeController.setLevel( - AudioVolumeType.system, originalLevel); - await subscription.cancel(); + try { + await AudioManager.volumeController + .setLevel(AudioVolumeType.system, targetLevel); + final VolumeChangedEvent event = + await completer.future.timeout(const Duration(seconds: 5)); + + expect(event.type, equals(AudioVolumeType.system)); + expect(event.level, equals(targetLevel)); + } finally { + await AudioManager.volumeController + .setLevel(AudioVolumeType.system, originalLevel); + await subscription.cancel(); + } }); }