| // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| /// @assertion Object encode(Object value, {toEncodable(object)}) |
| /// Converts value to a JSON string. |
| /// If value contains objects that are not directly encodable to a JSON string |
| /// (a value that is not a number, boolean, string, null, list or a map with |
| /// string keys), the toEncodable function is used to convert it to an object |
| /// that must be directly encodable. |
| /// If toEncodable is omitted, it defaults to calling .toJson() on the |
| /// unencodable object. |
| /// @description Checks that if a value is any other type than num, String, bool, |
| /// Null, List, or Map, a "toJson()" method is invoked on the object and the |
| /// result, which must be a directly serializable value, is serialized instead of |
| /// the original value. |
| /// @author kaigorodov |
| |
| import "../../../Utils/expect.dart"; |
| import "dart:convert"; |
| |
| class S1 { |
| Object? a; |
| Object? b; |
| |
| S1(this.a, this.b); |
| |
| List toJson() { |
| return [a, b]; |
| } |
| } |
| |
| class S2 { |
| Object? a; |
| Object? b; |
| |
| S2(this.a, this.b); |
| |
| Map toJson() => {a: b}; |
| } |
| |
| List<List<Object>> table = [ |
| [new S1(1234, "1234"), '[1234,"1234"]'], |
| [new S1(null, []), '[null,[]]'], |
| [new S1(1.234, {}), '[1.234,{}]'], |
| [new S2("1.234", {}), '{"1.234":{}}'], |
| [new S2("key2", [null, 1.1]), |
| '{"key2":[null,1.1]}'], |
| ]; |
| |
| main() { |
| JsonCodec codec = new JsonCodec(); |
| |
| for (List<Object?> pair in table) { |
| String? res = codec.encode(pair[0]); |
| Expect.equals(pair[1], res); |
| } |
| } |