// Copyright (c) 2014, 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.

library json_tests;
import 'package:expect/expect.dart';
import 'dart:convert';

class A {
  final x;
  A(this.x);
}

toEncodable(A a) => { "A": a.x };
reviver(key, value) {
  if (value is Map && value.length == 1 && value["A"] != null) {
    return new A(value["A"]);
  }
  return value;
}

const extendedJson =
    const JsonCodec(toEncodable: toEncodable, reviver: reviver);

main() {
  var encoded = extendedJson.encode([new A(0), { "2": new A(1) }]);
  Expect.equals('[{"A":0},{"2":{"A":1}}]', encoded);
  var decoded = extendedJson.decode(encoded);
  Expect.isTrue(decoded is List);
  Expect.equals(2, decoded.length);
  Expect.isTrue(decoded[0] is A);
  Expect.equals(0, decoded[0].x);
  Expect.isTrue(decoded[1] is Map);
  Expect.isNotNull(decoded[1]["2"]);
  Expect.isTrue(decoded[1]["2"] is A);
  Expect.equals(1, decoded[1]["2"].x);

  var a = extendedJson.decode(extendedJson.encode(new A(499)));
  Expect.isTrue(a is A);
  Expect.equals(499, a.x);
}
