OLD | NEW |
1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file |
2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
4 | 4 |
5 library json_tests; | 5 library json_tests; |
| 6 |
6 import 'package:expect/expect.dart'; | 7 import 'package:expect/expect.dart'; |
7 import 'dart:convert'; | 8 import 'dart:convert'; |
8 | 9 |
9 class A { | 10 class A { |
10 final x; | 11 final x; |
11 A(this.x); | 12 A(this.x); |
12 } | 13 } |
13 | 14 |
14 toEncodable(A a) => { "A": a.x }; | 15 toEncodable(A a) => {"A": a.x}; |
15 reviver(key, value) { | 16 reviver(key, value) { |
16 if (value is Map && value.length == 1 && value["A"] != null) { | 17 if (value is Map && value.length == 1 && value["A"] != null) { |
17 return new A(value["A"]); | 18 return new A(value["A"]); |
18 } | 19 } |
19 return value; | 20 return value; |
20 } | 21 } |
21 | 22 |
22 const extendedJson = | 23 const extendedJson = |
23 const JsonCodec(toEncodable: toEncodable, reviver: reviver); | 24 const JsonCodec(toEncodable: toEncodable, reviver: reviver); |
24 | 25 |
25 main() { | 26 main() { |
26 var encoded = extendedJson.encode([new A(0), { "2": new A(1) }]); | 27 var encoded = extendedJson.encode([ |
| 28 new A(0), |
| 29 {"2": new A(1)} |
| 30 ]); |
27 Expect.equals('[{"A":0},{"2":{"A":1}}]', encoded); | 31 Expect.equals('[{"A":0},{"2":{"A":1}}]', encoded); |
28 var decoded = extendedJson.decode(encoded); | 32 var decoded = extendedJson.decode(encoded); |
29 Expect.isTrue(decoded is List); | 33 Expect.isTrue(decoded is List); |
30 Expect.equals(2, decoded.length); | 34 Expect.equals(2, decoded.length); |
31 Expect.isTrue(decoded[0] is A); | 35 Expect.isTrue(decoded[0] is A); |
32 Expect.equals(0, decoded[0].x); | 36 Expect.equals(0, decoded[0].x); |
33 Expect.isTrue(decoded[1] is Map); | 37 Expect.isTrue(decoded[1] is Map); |
34 Expect.isNotNull(decoded[1]["2"]); | 38 Expect.isNotNull(decoded[1]["2"]); |
35 Expect.isTrue(decoded[1]["2"] is A); | 39 Expect.isTrue(decoded[1]["2"] is A); |
36 Expect.equals(1, decoded[1]["2"].x); | 40 Expect.equals(1, decoded[1]["2"].x); |
37 | 41 |
38 var a = extendedJson.decode(extendedJson.encode(new A(499))); | 42 var a = extendedJson.decode(extendedJson.encode(new A(499))); |
39 Expect.isTrue(a is A); | 43 Expect.isTrue(a is A); |
40 Expect.equals(499, a.x); | 44 Expect.equals(499, a.x); |
41 | 45 |
42 testInvalidMap(); | 46 testInvalidMap(); |
43 } | 47 } |
44 | 48 |
45 | |
46 void testInvalidMap() { | 49 void testInvalidMap() { |
47 var map = {"a" : 42, "b": 42, 37: 42}; // Non-string key. | 50 var map = {"a": 42, "b": 42, 37: 42}; // Non-string key. |
48 var enc = new JsonEncoder((_) => "fixed"); | 51 var enc = new JsonEncoder((_) => "fixed"); |
49 var res = enc.convert(map); | 52 var res = enc.convert(map); |
50 Expect.equals('"fixed"', res); | 53 Expect.equals('"fixed"', res); |
51 | 54 |
52 enc = new JsonEncoder.withIndent(" ", (_) => "fixed"); | 55 enc = new JsonEncoder.withIndent(" ", (_) => "fixed"); |
53 res = enc.convert(map); | 56 res = enc.convert(map); |
54 Expect.equals('"fixed"', res); | 57 Expect.equals('"fixed"', res); |
55 } | 58 } |
OLD | NEW |