// 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 List<int> convert(Object object)
/// Convert object into UTF-8 encoded JSON.
/// @description Checks that num, String, bool, Null, List, and Map values are
/// converted into UTF-8 encoded JSON.
/// @author sgrekhov@unipro.ru

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

main() {
  for (List<Object?> pair in table) {
    JsonUtf8Encoder enc = new JsonUtf8Encoder();
    List<int> res = enc.convert(pair[0]);
    Expect.listEquals(utf8.encode(pair[1] as String), res);
  }
}
