Skip to content

Commit 5548cb5

Browse files
seungsoo47claude
andauthored
[flutter_tts] Add integration tests for the supported TTS APIs (#1041)
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
1 parent e441419 commit 5548cb5

5 files changed

Lines changed: 93 additions & 8 deletions

File tree

packages/flutter_tts/CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## 1.7.0
2+
3+
* Return a boolean from `isLanguageAvailable` to match the behavior of other platforms.
4+
* Add integration tests for the supported TTS APIs.
5+
16
## 1.6.0
27

38
* Update flutter_tts 4.2.0 to 4.2.5.

packages/flutter_tts/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This package is not an _endorsed_ implementation of `flutter_tts`. Therefore, yo
1111
```yaml
1212
dependencies:
1313
flutter_tts: ^4.2.5
14-
flutter_tts_tizen: ^1.6.0
14+
flutter_tts_tizen: ^1.7.0
1515
```
1616
1717
Then you can import `flutter_tts` in your Dart code:

packages/flutter_tts/example/integration_test/flutter_tts_test.dart

Lines changed: 84 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,90 @@ import 'package:integration_test/integration_test.dart';
55
void main() {
66
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
77

8-
testWidgets('Can speak', (WidgetTester tester) async {
9-
final flutterTts = FlutterTts();
8+
late FlutterTts flutterTts;
9+
10+
setUpAll(() async {
11+
flutterTts = FlutterTts();
12+
// Give the native TTS engine time to initialize.
1013
await Future<void>.delayed(const Duration(seconds: 2));
11-
var result = await flutterTts.speak('Hello, world!');
12-
expect(result, 1);
14+
});
15+
16+
tearDown(() async {
17+
await flutterTts.stop();
18+
});
19+
20+
testWidgets('speak returns 1', (WidgetTester tester) async {
21+
expect(await flutterTts.speak('Hello, world!'), 1);
22+
});
23+
24+
testWidgets('stop returns 1', (WidgetTester tester) async {
25+
expect(await flutterTts.stop(), 1);
26+
});
27+
28+
testWidgets('getLanguages returns a non-empty list', (
29+
WidgetTester tester,
30+
) async {
31+
final languages = await flutterTts.getLanguages;
32+
expect(languages, isNotNull);
33+
expect(languages, isNotEmpty);
34+
});
35+
36+
testWidgets('isLanguageAvailable is true for a supported language', (
37+
WidgetTester tester,
38+
) async {
39+
final languages = (await flutterTts.getLanguages as List).cast<String>();
40+
expect(languages, isNotEmpty);
41+
expect(await flutterTts.isLanguageAvailable(languages.first), isTrue);
42+
});
43+
44+
testWidgets('setLanguage returns 1 for a supported language', (
45+
WidgetTester tester,
46+
) async {
47+
final languages = (await flutterTts.getLanguages as List).cast<String>();
48+
expect(languages, isNotEmpty);
49+
expect(await flutterTts.setLanguage(languages.first), 1);
50+
});
51+
52+
testWidgets('getVoices returns a non-empty list', (
53+
WidgetTester tester,
54+
) async {
55+
final voices = await flutterTts.getVoices;
56+
expect(voices, isNotNull);
57+
expect(voices, isNotEmpty);
58+
});
59+
60+
testWidgets('getDefaultVoice returns a voice', (WidgetTester tester) async {
61+
expect(await flutterTts.getDefaultVoice, isNotNull);
62+
});
63+
64+
testWidgets('setVoice returns 1', (WidgetTester tester) async {
65+
final voices = (await flutterTts.getVoices as List).cast<Map>();
66+
expect(voices, isNotEmpty);
67+
final voice = voices.first;
68+
expect(
69+
await flutterTts.setVoice(<String, String>{
70+
'name': voice['name'].toString(),
71+
'locale': voice['locale'].toString(),
72+
}),
73+
1,
74+
);
75+
});
76+
77+
testWidgets('setSpeechRate returns 1', (WidgetTester tester) async {
78+
expect(await flutterTts.setSpeechRate(0.5), 1);
79+
});
80+
81+
testWidgets('setVolume returns 1', (WidgetTester tester) async {
82+
expect(await flutterTts.setVolume(1), 1);
83+
});
84+
85+
testWidgets('getMaxSpeechInputLength is positive', (
86+
WidgetTester tester,
87+
) async {
88+
// tts_get_max_text_size requires the ready state; stop() ensures it.
89+
await flutterTts.stop();
90+
final maxLength = await flutterTts.getMaxSpeechInputLength;
91+
expect(maxLength, isNotNull);
92+
expect(maxLength, greaterThan(0));
1393
});
1494
}

packages/flutter_tts/pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ name: flutter_tts_tizen
22
description: The Tizen implementation of flutter_tts plugin.
33
homepage: https://github.com/flutter-tizen/plugins
44
repository: https://github.com/flutter-tizen/plugins/tree/master/packages/flutter_tts
5-
version: 1.6.0
5+
version: 1.7.0
66

77
environment:
88
sdk: ">=3.1.0 <4.0.0"

packages/flutter_tts/tizen/src/flutter_tts_tizen_plugin.cc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,11 +298,11 @@ class FlutterTtsTizenPlugin : public flutter::Plugin {
298298
if (std::holds_alternative<std::string>(arguments)) {
299299
std::string language = std::move(std::get<std::string>(arguments));
300300
if (!language.empty() && tts_->IsLanguageAvailable(language)) {
301-
SendResult(flutter::EncodableValue(1));
301+
SendResult(flutter::EncodableValue(true));
302302
return;
303303
}
304304
}
305-
SendResult(flutter::EncodableValue(0));
305+
SendResult(flutter::EncodableValue(false));
306306
}
307307

308308
void SendResult(const flutter::EncodableValue &result) {

0 commit comments

Comments
 (0)