// 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 Encoding getByName(String name)
 * Gets an Encoding object from the name of the character set name. The names
 * used are the IANA official names for the character set (see
 * http://www.iana.org/assignments/character-sets/character-sets.xml).
 *
 * The name passed is case insensitive.
 *
 * If character set is not supported null is returned.
 * @description Checks that this method returns instance of the Encoding for
 * valid encoding name
 * @author sgrekhov@unipro.ru
 */
import "dart:convert";
import "../../../Utils/expect.dart";

List<String> encodings = [
  "US-ASCII",
  "ISO-8859-1",
  //"ISO_8859-2:1987",
  //"ISO-8859-3",
  //"ISO-8859-4",
  //"ISO-8859-5",
  //"ISO-8859-6",
  //"ISO-8859-7",
  //"ISO-8859-8",
  //"ISO-8859-9",
  //"ISO-8859-10",
  //"Shift_JIS",
  //"EUC-JP",
  //"ISO-2022-KR",
  //"EUC-KR",
  //"ISO-2022-JP",
  //"ISO-2022-JP-2",
  //"ISO-8859-6-E",
  //"ISO-8859-6-I",
  //"ISO-8859-8-E",
  //"ISO-8859-8-I",
  //"GB2312",
  //"Big5",
  //"KOI8-R"
  "UTF-8"
];

main() {
  encodings.forEach((String encodingName) {
    Encoding? e = Encoding.getByName(encodingName);
    Expect.isNotNull(e, "Encoding " + encodingName + " is not supported");
  });
}
