 // Copyright (c) 2017, 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 JsonUtf8Encoder([
///  String indent,
///  dynamic toEncodable(
///  object
///  ),
///  int bufferSize = DEFAULT_BUFFER_SIZE
///  ])
/// Create converter.
///
/// If indent is non-null, the converter attempts to "pretty-print" the JSON,
/// and uses indent as the indentation. Otherwise the result has no whitespace
/// outside of string literals. If indent contains characters that are not valid
/// JSON whitespace characters, the result will not be valid JSON. JSON
/// whitespace characters are space (U+0020), tab (U+0009), line feed (U+000a)
/// and carriage return (U+000d) (ECMA 404).
///
/// The bufferSize is the size of the internal buffers used to collect UTF-8 code
/// units. If using startChunkedConversion, it will be the size of the chunks.
///
/// The JSON encoder handles numbers, strings, booleans, null, lists and maps
/// directly.
///
/// Any other object is attempted converted by toEncodable to an object that is
/// of one of the convertible types.
///
/// If toEncodable is omitted, it defaults to calling .toJson() on the object.
/// @description Checks that this constructor, called without parameters,
/// creates object with default parameters
/// @author sgrekhov@unipro.ru

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

class A {
  Object toJson() => 42;
}

class C {
  String toJson() => "C: this is JSON";
}

check(JsonUtf8Encoder encoder, var object, var expected) {
  var encoded = encoder.convert(object);
  Expect.listEquals(utf8.encode(expected.toString()), encoded);
}

main() {
  JsonUtf8Encoder encoder = new JsonUtf8Encoder();

  check(encoder, 1, "1");
  check(encoder, 3.14, "3.14");
  check(encoder, null, "null");
  check(encoder, "str", '"str"');
  check(encoder, true, 'true');
  check(encoder, false, 'false');
  check(encoder, [1, 2, 3], "[1,2,3]");
  check(encoder, {"a": "b"}, '{"a":"b"}');
  check(encoder, new A(), new A().toJson());
  check(encoder, new C(), '"' + new C().toJson() + '"');
  check(encoder, {" й ": " ф "}, '{" й ":" ф "}');
}
