blob: 5ed7153bca6a01fb28890301d635aec01c12ca10 [file] [log] [blame]
import 'package:firebase_crashlytics/firebase_crashlytics.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/rendering.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
void main() {
group('$Crashlytics', () {
final List<MethodCall> log = <MethodCall>[];
final Crashlytics crashlytics = Crashlytics.instance;
setUp(() async {
Crashlytics.channel
.setMockMethodCallHandler((MethodCall methodCall) async {
log.add(methodCall);
switch (methodCall.method) {
case 'Crashlytics#isDebuggable':
return true;
case 'Crashlytics#setUserEmail':
return true;
case 'Crashlytics#setUserIdentifier':
return true;
case 'Crashlytics#setUserName':
return true;
case 'Crashlytics#getVersion':
return '0.0.0+1';
default:
return false;
}
});
log.clear();
});
test('onError', () async {
final FlutterErrorDetails details = FlutterErrorDetails(
exception: 'foo exception',
stack: StackTrace.current,
library: 'foo library',
context: ErrorDescription('foo context'),
);
crashlytics.enableInDevMode = true;
crashlytics.log('foo');
await crashlytics.onError(details);
expect(log[0].method, 'Crashlytics#onError');
expect(log[0].arguments['exception'], 'foo exception');
expect(log[0].arguments['context'], 'foo context');
expect(log[0].arguments['logs'], isNotEmpty);
expect(log[0].arguments['logs'], contains('foo'));
expect(log[0].arguments['keys'], isEmpty);
});
test('isDebuggable', () async {
expect(await crashlytics.isDebuggable(), true);
expect(
log,
<Matcher>[
isMethodCall(
'Crashlytics#isDebuggable',
arguments: null,
)
],
);
});
test('crash', () {
expect(() => crashlytics.crash(), throwsStateError);
});
test('getVersion', () async {
await crashlytics.getVersion();
expect(log,
<Matcher>[isMethodCall('Crashlytics#getVersion', arguments: null)]);
});
test('setUserEmail', () async {
await crashlytics.setUserEmail('foo');
expect(log, <Matcher>[
isMethodCall('Crashlytics#setUserEmail',
arguments: <String, dynamic>{'email': 'foo'})
]);
});
test('setUserIdentifier', () async {
await crashlytics.setUserIdentifier('foo');
expect(log, <Matcher>[
isMethodCall('Crashlytics#setUserIdentifier',
arguments: <String, dynamic>{'identifier': 'foo'})
]);
});
test('setUserName', () async {
await crashlytics.setUserName('foo');
expect(log, <Matcher>[
isMethodCall('Crashlytics#setUserName',
arguments: <String, dynamic>{'name': 'foo'})
]);
});
});
}