// Copyright (c) 2011, 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 decodeComponent(String encodedComponent)
 * Decodes the percent-encoding in encodedComponent.
 * @description Checks expected results on unreserved characters and
 * basic and extended unicode characters on manually and library
 * encoded strings.
 * @author ilya
 */
import 'dart:convert';
import "../../../Utils/expect.dart";
import "UriDataEncoder.lib.dart";

String unreserved = "0123456789"
                    "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
                    "abcdefghijklmnopqrstuvwxyz"
                    "-._~";

encodeOctet(int x) =>
  x < 0x10 ? '%0${x.toRadixString(16)}' : '%${x.toRadixString(16)}';

manuallyEncode(String s) => s.runes
  .map((x) =>
      unreserved.runes.contains(x)
      ? new String.fromCharCode(x)
      : utf8.encode(new String.fromCharCode(x)).map(encodeOctet).join(''))
  .join('');

main() {
  var x;
  x = 'a.A- \u0000 \u0001 \u{1D11E}';
  Expect.equals(x, Uri.decodeComponent(manuallyEncode(x)));
  Expect.equals(x, Uri.decodeComponent(Uri.encodeComponent(x)));

  x = '~foo_BAR \uD7FF \uE000 \u{10000}';
  Expect.equals(x, Uri.decodeComponent(manuallyEncode(x)));
  Expect.equals(x, Uri.decodeComponent(Uri.encodeComponent(x)));

  x = r"! $ & ' ( ) * + , ; = : @";
  Expect.equals(x, Uri.decodeComponent(manuallyEncode(x)));
  Expect.equals(x, Uri.decodeComponent(Uri.encodeComponent(x)));
}
