You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
135 lines
5.4 KiB
Dart
135 lines
5.4 KiB
Dart
import 'dart:convert';
|
|
|
|
import 'package:flutter_test/flutter_test.dart';
|
|
import 'package:speech_to_text/speech_recognition_result.dart';
|
|
|
|
void main() {
|
|
final String firstRecognizedWords = 'hello';
|
|
final String secondRecognizedWords = 'hello there';
|
|
final double firstConfidence = 0.85;
|
|
final double secondConfidence = 0.62;
|
|
final String firstRecognizedJson =
|
|
'{"alternates":[{"recognizedWords":"$firstRecognizedWords","confidence":$firstConfidence}],"finalResult":false}';
|
|
final String secondRecognizedJson =
|
|
'{"alternates":[{"recognizedWords":"$secondRecognizedWords","confidence":$secondConfidence}],"finalResult":false}';
|
|
final SpeechRecognitionWords firstWords =
|
|
SpeechRecognitionWords(firstRecognizedWords, firstConfidence);
|
|
final SpeechRecognitionWords secondWords =
|
|
SpeechRecognitionWords(secondRecognizedWords, secondConfidence);
|
|
|
|
setUp(() {});
|
|
|
|
group('recognizedWords', () {
|
|
test('empty if no alternates', () {
|
|
SpeechRecognitionResult result = SpeechRecognitionResult([], true);
|
|
expect(result.recognizedWords, isEmpty);
|
|
});
|
|
test('matches first alternate', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords, secondWords], true);
|
|
expect(result.recognizedWords, firstRecognizedWords);
|
|
});
|
|
});
|
|
group('alternates', () {
|
|
test('empty if no alternates', () {
|
|
SpeechRecognitionResult result = SpeechRecognitionResult([], true);
|
|
expect(result.alternates, isEmpty);
|
|
});
|
|
test('expected contents', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords, secondWords], true);
|
|
expect(result.alternates, contains(firstWords));
|
|
expect(result.alternates, contains(secondWords));
|
|
});
|
|
test('in order', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords, secondWords], true);
|
|
expect(result.alternates.first, firstWords);
|
|
});
|
|
});
|
|
group('confidence', () {
|
|
test('0 if no alternates', () {
|
|
SpeechRecognitionResult result = SpeechRecognitionResult([], true);
|
|
expect(result.confidence, 0);
|
|
});
|
|
test('isConfident false if no alternates', () {
|
|
SpeechRecognitionResult result = SpeechRecognitionResult([], true);
|
|
expect(result.isConfident(), isFalse);
|
|
});
|
|
test('isConfident matches first alternate', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords, secondWords], true);
|
|
expect(result.isConfident(), firstWords.isConfident());
|
|
});
|
|
test('hasConfidenceRating false if no alternates', () {
|
|
SpeechRecognitionResult result = SpeechRecognitionResult([], true);
|
|
expect(result.hasConfidenceRating, isFalse);
|
|
});
|
|
test('hasConfidenceRating matches first alternate', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords, secondWords], true);
|
|
expect(result.hasConfidenceRating, firstWords.hasConfidenceRating);
|
|
});
|
|
});
|
|
group('json', () {
|
|
test('loads correctly', () {
|
|
var json = jsonDecode(firstRecognizedJson);
|
|
SpeechRecognitionResult result = SpeechRecognitionResult.fromJson(json);
|
|
expect(result.recognizedWords, firstRecognizedWords);
|
|
expect(result.confidence, firstConfidence);
|
|
});
|
|
test('roundtrips correctly', () {
|
|
var json = jsonDecode(firstRecognizedJson);
|
|
SpeechRecognitionResult result = SpeechRecognitionResult.fromJson(json);
|
|
var roundTripJson = result.toJson();
|
|
SpeechRecognitionResult roundtripResult =
|
|
SpeechRecognitionResult.fromJson(roundTripJson);
|
|
expect(result, roundtripResult);
|
|
});
|
|
});
|
|
group('overrides', () {
|
|
test('toString works with no alternates', () {
|
|
SpeechRecognitionResult result = SpeechRecognitionResult([], true);
|
|
expect(
|
|
result.toString(), "SpeechRecognitionResult words: [], final: true");
|
|
});
|
|
test('toString works with alternates', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
expect(result.toString(),
|
|
"SpeechRecognitionResult words: [SpeechRecognitionWords words: hello, confidence: 0.85], final: true");
|
|
});
|
|
test('hash same for same object', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
expect(result.hashCode, result.hashCode);
|
|
});
|
|
test('hash differs for different objects', () {
|
|
SpeechRecognitionResult result1 =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
SpeechRecognitionResult result2 =
|
|
SpeechRecognitionResult([secondWords], true);
|
|
expect(result1.hashCode, isNot(result2.hashCode));
|
|
});
|
|
test('equals same for same object', () {
|
|
SpeechRecognitionResult result =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
expect(result, result);
|
|
});
|
|
test('equals same for different object same values', () {
|
|
SpeechRecognitionResult result1 =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
SpeechRecognitionResult result1a =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
expect(result1, result1a);
|
|
});
|
|
test('equals differs for different objects', () {
|
|
SpeechRecognitionResult result1 =
|
|
SpeechRecognitionResult([firstWords], true);
|
|
SpeechRecognitionResult result2 =
|
|
SpeechRecognitionResult([secondWords], true);
|
|
expect(result1, isNot(result2));
|
|
});
|
|
});
|
|
}
|