132 lines
4.1 KiB
Dart
132 lines
4.1 KiB
Dart
|
import 'package:dart2_constant/convert.dart';
|
||
|
import 'package:json_god/json_god.dart' as god;
|
||
|
import 'package:test/test.dart';
|
||
|
import 'shared.dart';
|
||
|
|
||
|
main() {
|
||
|
god.logger.onRecord.listen(printRecord);
|
||
|
|
||
|
group('serialization', () {
|
||
|
test('serialize primitives', testSerializationOfPrimitives);
|
||
|
|
||
|
test('serialize dates', testSerializationOfDates);
|
||
|
|
||
|
test('serialize maps', testSerializationOfMaps);
|
||
|
|
||
|
test('serialize lists', testSerializationOfLists);
|
||
|
|
||
|
test('serialize via reflection', testSerializationViaReflection);
|
||
|
|
||
|
test('serialize with schema validation',
|
||
|
testSerializationWithSchemaValidation);
|
||
|
});
|
||
|
}
|
||
|
|
||
|
testSerializationOfPrimitives() {
|
||
|
expect(god.serialize(1), equals("1"));
|
||
|
expect(god.serialize(1.4), equals("1.4"));
|
||
|
expect(god.serialize("Hi!"), equals('"Hi!"'));
|
||
|
expect(god.serialize(true), equals("true"));
|
||
|
expect(god.serialize(null), equals("null"));
|
||
|
}
|
||
|
|
||
|
testSerializationOfDates() {
|
||
|
DateTime date = new DateTime.now();
|
||
|
String s = god.serialize({'date': date});
|
||
|
|
||
|
print(s);
|
||
|
|
||
|
var deserialized = json.decode(s);
|
||
|
expect(deserialized['date'], equals(date.toIso8601String()));
|
||
|
}
|
||
|
|
||
|
testSerializationOfMaps() {
|
||
|
var simple = json.decode(god.serialize(
|
||
|
{'hello': 'world', 'one': 1, 'class': new SampleClass('world')}));
|
||
|
var nested = json.decode(god.serialize({
|
||
|
'foo': {
|
||
|
'bar': 'baz',
|
||
|
'funny': {'how': 'life', 'seems': 2, 'hate': 'us sometimes'}
|
||
|
}
|
||
|
}));
|
||
|
|
||
|
expect(simple['hello'], equals('world'));
|
||
|
expect(simple['one'], equals(1));
|
||
|
expect(simple['class']['hello'], equals('world'));
|
||
|
|
||
|
expect(nested['foo']['bar'], equals('baz'));
|
||
|
expect(nested['foo']['funny']['how'], equals('life'));
|
||
|
expect(nested['foo']['funny']['seems'], equals(2));
|
||
|
expect(nested['foo']['funny']['hate'], equals('us sometimes'));
|
||
|
}
|
||
|
|
||
|
testSerializationOfLists() {
|
||
|
List pandorasBox = [
|
||
|
1,
|
||
|
"2",
|
||
|
{"num": 3, "four": new SampleClass('five')},
|
||
|
new SampleClass('six')..nested.add(new SampleNestedClass('seven'))
|
||
|
];
|
||
|
String s = god.serialize(pandorasBox);
|
||
|
print(s);
|
||
|
|
||
|
var deserialized = json.decode(s);
|
||
|
|
||
|
expect(deserialized is List, equals(true));
|
||
|
expect(deserialized.length, equals(4));
|
||
|
expect(deserialized[0], equals(1));
|
||
|
expect(deserialized[1], equals("2"));
|
||
|
expect(deserialized[2] is Map, equals(true));
|
||
|
expect(deserialized[2]['num'], equals(3));
|
||
|
expect(deserialized[2]['four'] is Map, equals(true));
|
||
|
expect(deserialized[2]['four']['hello'], equals('five'));
|
||
|
expect(deserialized[3] is Map, equals(true));
|
||
|
expect(deserialized[3]['hello'], equals('six'));
|
||
|
expect(deserialized[3]['nested'] is List, equals(true));
|
||
|
expect(deserialized[3]['nested'].length, equals(1));
|
||
|
expect(deserialized[3]['nested'][0] is Map, equals(true));
|
||
|
expect(deserialized[3]['nested'][0]['bar'], equals('seven'));
|
||
|
}
|
||
|
|
||
|
testSerializationViaReflection() {
|
||
|
SampleClass sample = new SampleClass('world');
|
||
|
|
||
|
for (int i = 0; i < 3; i++) {
|
||
|
sample.nested.add(new SampleNestedClass('baz'));
|
||
|
}
|
||
|
|
||
|
String s = god.serialize(sample);
|
||
|
print(s);
|
||
|
|
||
|
var deserialized = json.decode(s);
|
||
|
expect(deserialized['hello'], equals('world'));
|
||
|
expect(deserialized['nested'] is List, equals(true));
|
||
|
expect(deserialized['nested'].length == 3, equals(true));
|
||
|
expect(deserialized['nested'][0]['bar'], equals('baz'));
|
||
|
expect(deserialized['nested'][1]['bar'], equals('baz'));
|
||
|
expect(deserialized['nested'][2]['bar'], equals('baz'));
|
||
|
}
|
||
|
|
||
|
testSerializationWithSchemaValidation() async {
|
||
|
BabelRc babelRc = new BabelRc(
|
||
|
presets: ['es2015', 'stage-0'], plugins: ['add-module-exports']);
|
||
|
|
||
|
String s = god.serialize(babelRc);
|
||
|
print(s);
|
||
|
|
||
|
var deserialized = json.decode(s);
|
||
|
|
||
|
expect(deserialized['presets'] is List, equals(true));
|
||
|
expect(deserialized['presets'].length, equals(2));
|
||
|
expect(deserialized['presets'][0], equals('es2015'));
|
||
|
expect(deserialized['presets'][1], equals('stage-0'));
|
||
|
expect(deserialized['plugins'] is List, equals(true));
|
||
|
expect(deserialized['plugins'].length, equals(1));
|
||
|
expect(deserialized['plugins'][0], equals('add-module-exports'));
|
||
|
|
||
|
//Map babelRc2 = {'presets': 'Hello, world!'};
|
||
|
|
||
|
String json2 = god.serialize(babelRc);
|
||
|
print(json2);
|
||
|
}
|