blob: a95cca264235ac5e9ce317e48513bdc9466b0a70 [file] [log] [blame]
// Copyright 2019 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
import 'package:firebase_ml_vision/firebase_ml_vision.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('$FirebaseVision', () {
final List<MethodCall> log = <MethodCall>[];
dynamic returnValue;
setUp(() {
FirebaseVision.channel
.setMockMethodCallHandler((MethodCall methodCall) async {
log.add(methodCall);
switch (methodCall.method) {
case 'ImageLabeler#processImage':
return returnValue;
default:
return null;
}
});
log.clear();
FirebaseVision.nextHandle = 0;
});
group('$ImageLabeler', () {
test('processImage', () async {
final List<dynamic> labelData = <dynamic>[
<dynamic, dynamic>{
'confidence': 0.6,
'entityId': 'hello',
'text': 'friend',
},
<dynamic, dynamic>{
'confidence': 0.8,
'entityId': 'hi',
'text': 'brother',
},
];
returnValue = labelData;
final ImageLabeler detector = FirebaseVision.instance.imageLabeler(
const ImageLabelerOptions(confidenceThreshold: 0.2),
);
final FirebaseVisionImage image = FirebaseVisionImage.fromFilePath(
'empty',
);
final List<ImageLabel> labels = await detector.processImage(image);
expect(log, <Matcher>[
isMethodCall(
'ImageLabeler#processImage',
arguments: <String, dynamic>{
'handle': 0,
'type': 'file',
'path': 'empty',
'bytes': null,
'metadata': null,
'options': <String, dynamic>{
'modelType': 'onDevice',
'confidenceThreshold': 0.2,
},
},
),
]);
expect(labels[0].confidence, 0.6);
expect(labels[0].entityId, 'hello');
expect(labels[0].text, 'friend');
expect(labels[1].confidence, 0.8);
expect(labels[1].entityId, 'hi');
expect(labels[1].text, 'brother');
});
test('processImage no blocks', () async {
returnValue = <dynamic>[];
final ImageLabeler detector = FirebaseVision.instance.imageLabeler(
const ImageLabelerOptions(),
);
final FirebaseVisionImage image =
FirebaseVisionImage.fromFilePath('empty');
final List<ImageLabel> labels = await detector.processImage(image);
expect(log, <Matcher>[
isMethodCall(
'ImageLabeler#processImage',
arguments: <String, dynamic>{
'handle': 0,
'type': 'file',
'path': 'empty',
'bytes': null,
'metadata': null,
'options': <String, dynamic>{
'modelType': 'onDevice',
'confidenceThreshold': 0.5,
},
},
),
]);
expect(labels, isEmpty);
});
});
group('Cloud $ImageLabeler', () {
test('processImage', () async {
final List<dynamic> labelData = <dynamic>[
<dynamic, dynamic>{
'confidence': 0.6,
'entityId': '/m/0',
'text': 'banana',
},
<dynamic, dynamic>{
'confidence': 0.8,
'entityId': '/m/1',
'text': 'apple',
},
];
returnValue = labelData;
final ImageLabeler labeler = FirebaseVision.instance.cloudImageLabeler(
const CloudImageLabelerOptions(confidenceThreshold: 0.6),
);
final FirebaseVisionImage image = FirebaseVisionImage.fromFilePath(
'empty',
);
final List<ImageLabel> labels = await labeler.processImage(image);
expect(log, <Matcher>[
isMethodCall(
'ImageLabeler#processImage',
arguments: <String, dynamic>{
'handle': 0,
'type': 'file',
'path': 'empty',
'bytes': null,
'metadata': null,
'options': <String, dynamic>{
'modelType': 'cloud',
'confidenceThreshold': 0.6,
},
},
),
]);
expect(labels[0].confidence, 0.6);
expect(labels[0].entityId, '/m/0');
expect(labels[0].text, 'banana');
expect(labels[1].confidence, 0.8);
expect(labels[1].entityId, '/m/1');
expect(labels[1].text, 'apple');
});
});
});
}