// 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 "toJson()" method throws,
/// the error is caught and stored in the JsonUnsupportedObjectError's cause
/// field.
/// @author kaigorodov

import "dart:convert";
import "../../../Utils/expect.dart";

class S1 {
  Object a = new Error();

  S1(this.a);

  Object toJson() {
    throw a;
  }
}

main() {
  JsonCodec codec = new JsonCodec();
  Error e1 = new Error();
  S1 s1 = new S1(e1);
  String res;
  Expect.throws(() {res = codec.encode(s1);},
      (e) => e is JsonUnsupportedObjectError && e.cause != null,
      "Error expected but result returned: $res");
}
