// 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.

// @dart = 2.9

/// @assertion String convert(Object o)
/// Converts the given object o to its JSON representation.
/// Directly serializable values are num, String, bool, and Null, as well as some
/// List and Map values. For List, the elements must all be serializable. For
/// Map, the keys must be String and the values must be serializable. If a value
/// is any other type is attempted serialized, the conversion function provided
/// in the constructor is invoked with the object as argument and the result,
/// which must be a directly serializable value, is serialized instead of the
/// original value.
///
/// If the conversion throws, or returns a value that is not directly
/// serializable, a JsonUnsupportedObjectError exception is thrown.
/// If the call throws, the error is caught and stored in the
/// JsonUnsupportedObjectError's cause field.
///
/// If a List or Map contains a reference to itself, directly or through other
/// lists or maps, it cannot be serialized and a JsonCyclicError is thrown.
///
/// Json Objects should not change during serialization.
/// If an object is serialized more than once, stringify is allowed to cache the
/// JSON text for it. I.e., if an object changes after it is first serialized,
/// the new values may or may not be reflected in the result.
/// @description Checks that num, String, bool, Null, List, and Map values are
/// serialized correctly.
/// @author kaigorodov

import "dart:convert";
import "../../../Utils/expect.dart";
import "../JsonDecoder/table1.lib.dart";

main() {
  for (List<Object> pair in table) {
    JsonEncoder enc = new JsonEncoder();
    String res = enc.convert(pair[0]);
    Expect.equals(pair[1], res);
  }
}
