blob: 6e83f89e0a379b8ca3f6a12999af0220375160e2 [file] [log] [blame]
// Copyright 2017 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:mockito/mockito.dart';
import 'package:test/test.dart';
import 'package:flutter/services.dart';
import 'package:shared_preferences/shared_preferences.dart';
void main() {
group('$SharedPreferences', () {
const MethodChannel channel = const MethodChannel(
'plugins.flutter.io/shared_preferences',
);
const Map<String, dynamic> kTestValues = const <String, dynamic>{
'flutter.String': 'hello world',
'flutter.bool': true,
'flutter.int': 42,
'flutter.double': 3.14159,
'flutter.List': const <String>['foo', 'bar'],
};
const Map<String, dynamic> kTestValues2 = const <String, dynamic>{
'flutter.String': 'goodbye world',
'flutter.bool': false,
'flutter.int': 1337,
'flutter.double': 2.71828,
'flutter.List': const <String>['baz', 'quox'],
};
final List<MethodCall> log = <MethodCall>[];
SharedPreferences sharedPreferences;
setUp(() async {
channel.setMockMethodCallHandler((MethodCall methodCall) async {
log.add(methodCall);
if (methodCall.method == 'getAll') {
return kTestValues;
}
return null;
});
sharedPreferences = await SharedPreferences.getInstance();
log.clear();
});
tearDown(() {
sharedPreferences.clear();
});
test('reading', () async {
expect(
sharedPreferences.getString('String'), kTestValues['flutter.String']);
expect(sharedPreferences.getBool('bool'), kTestValues['flutter.bool']);
expect(sharedPreferences.getInt('int'), kTestValues['flutter.int']);
expect(
sharedPreferences.getDouble('double'), kTestValues['flutter.double']);
expect(
sharedPreferences.getStringList('List'), kTestValues['flutter.List']);
expect(log, equals(<MethodCall>[]));
});
test('writing', () async {
sharedPreferences.setString('String', kTestValues2['flutter.String']);
sharedPreferences.setBool('bool', kTestValues2['flutter.bool']);
sharedPreferences.setInt('int', kTestValues2['flutter.int']);
sharedPreferences.setDouble('double', kTestValues2['flutter.double']);
sharedPreferences.setStringList('List', kTestValues2['flutter.List']);
expect(sharedPreferences.getString('String'),
kTestValues2['flutter.String']);
expect(sharedPreferences.getBool('bool'), kTestValues2['flutter.bool']);
expect(sharedPreferences.getInt('int'), kTestValues2['flutter.int']);
expect(sharedPreferences.getDouble('double'),
kTestValues2['flutter.double']);
expect(sharedPreferences.getStringList('List'),
kTestValues2['flutter.List']);
expect(log, equals(<MethodCall>[]));
await sharedPreferences.commit();
expect(
log,
equals(<MethodCall>[
new MethodCall('setString', <String, dynamic>{
'key': 'flutter.String',
'value': kTestValues2['flutter.String']
}),
new MethodCall('setBool', <String, dynamic>{
'key': 'flutter.bool',
'value': kTestValues2['flutter.bool']
}),
new MethodCall('setInt', <String, dynamic>{
'key': 'flutter.int',
'value': kTestValues2['flutter.int']
}),
new MethodCall('setDouble', <String, dynamic>{
'key': 'flutter.double',
'value': kTestValues2['flutter.double']
}),
new MethodCall('setStringList', <String, dynamic>{
'key': 'flutter.List',
'value': kTestValues2['flutter.List']
}),
const MethodCall('commit'),
]));
});
test('removing', () async {
const String key = 'testKey';
sharedPreferences
..setString(key, null)
..setBool(key, null)
..setInt(key, null)
..setDouble(key, null)
..setStringList(key, null)
..remove(key);
await sharedPreferences.commit();
expect(
log,
equals(
new List<MethodCall>.filled(
6,
const MethodCall(
'remove',
const <String, dynamic>{'key': 'flutter.$key'},
),
growable: true,
)..add(const MethodCall('commit')),
),
);
});
test('clearing', () async {
await sharedPreferences.clear();
expect(sharedPreferences.getString('String'), null);
expect(sharedPreferences.getBool('bool'), null);
expect(sharedPreferences.getInt('int'), null);
expect(sharedPreferences.getDouble('double'), null);
expect(sharedPreferences.getStringList('List'), null);
expect(log, equals(<MethodCall>[const MethodCall('clear')]));
});
test('mocking', () async {
expect(await channel.invokeMethod('getAll'), kTestValues);
SharedPreferences.setMockInitialValues(kTestValues2);
expect(await channel.invokeMethod('getAll'), kTestValues2);
});
});
}
class MockPlatformChannel extends Mock implements MethodChannel {}