// 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 Object encode(Object value, {toEncodable(object)})
/// If the object does not support "toJson()" method, throws, or returns a value
/// that is not directly serializable, a JsonUnsupportedObjectError exception is
/// thrown.
/// If the call throws (including the case where there is no nullary "toJson"
/// method, the error is caught and stored in the JsonUnsupportedObjectError's
/// cause field.
/// @description Checks that if the object does not support "toJson()" method,
/// a JsonUnsupportedObjectError exception is thrown,
/// and JsonUnsupportedObjectError's cause field is filled.
/// @author kaigorodov

import "dart:convert";
import "../../../Utils/expect.dart";
import "../JsonEncoder/table2.lib.dart" show table;

main() {
  JsonCodec codec = new JsonCodec();
  bool failed = false;
  for (Object obj in table) {
    try {
      String res = codec.encode(obj);
      failed = true;
    } on JsonUnsupportedObjectError catch(e) {
      Expect.isNotNull(e.cause);
    }
    if (failed) {
      Expect.fail("");
    }
  }
}
