// 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 UriData.fromUri(Uri uri)
/// Creates a DataUri from a Uri which must have data as Uri.scheme.
///
/// The uri must have scheme data and no authority or fragment, and the path
/// (concatenated with the query, if there is one) must be valid as data URI
/// content with the same rules as parse.
/// @description Checks that this constructor creates an expected UriData. Test
/// valid Uri
/// @issue 28700
/// @author sgrekhov@unipro.ru

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

check(Uri uri, String expected) {
  UriData uriData = new UriData.fromUri(uri);
  Expect.equals(expected, uriData.toString());
}

main() {
  check(Uri.parse("data:text/plain,some data"), "data:text/plain,some%20data");
  check(Uri.parse("data:,some data"), "data:,some%20data");
  check(new Uri(scheme: "data", path: "text/plain,some%20data"),
      "data:text/plain,some%20data");
  check(new Uri(scheme: "data", path: "text/plain,some data", query: "a=b&c=d"),
      "data:text/plain,some%20data?a=b&c=d");
  check(new Uri(scheme: "data", path: "text/plain,путь", query: "a=b&й=ф"),
      "data:text/plain,%D0%BF%D1%83%D1%82%D1%8C?a=b&%D0%B9=%D1%84");
}
