// 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 String charset
 * The charset parameter of the media type.
 *
 * If the parameters of the media type contains a charset parameter then this
 * returns its value, otherwise it returns US-ASCII, which is the default
 * charset for data URIs.
 * @description Checks that if the parameters of the media type contains a
 * charset parameter then this property returns its value, otherwise it returns
 * US-ASCII
 * @author sgrekhov@unipro.ru
 */
import "dart:convert";
import "../../../Utils/expect.dart";

main() {
  Expect.equals("US-ASCII", UriData.parse("data:text/plain,some data").charset);
  Expect.equals("US-ASCII", UriData.parse("data:,some data").charset);
  Expect.equals("utf-8",
      UriData.parse("data:;charset=utf-8;base64,somedata").charset);
  Expect.equals("utf-8",
      UriData.parse("data:;charset=utf-8,some data").charset);
  Expect.equals("US-ASCII", new UriData.fromString("some data").charset);
  Expect.equals("utf-8", new UriData.fromString("some data",
      encoding: Encoding.getByName("utf-8")).charset);
}
