// 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.

// @dart = 2.9

/// @assertion 15.10.2.10: The production CharacterEscape :: HexEscapeSequence
///            evaluates by evaluating the character value of the
///            HexEscapeSequence (see 7.8.4) and returning its character result.<br/>
///            HexEscapeSequence :: x HexDigit HexDigit
/// @description Checks the assertion using a matching \u-encoded character in
///              the test string.
/// @3rdparty sputnik-v1:S15.10.2.10_A3.1_T1.js, S15.10.2.10_A3.1_T2.js
/// @author rodionov

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

main() {
  Map<String, String> alphabet = const {
    "41" : "A", "42" : "B", "43" : "C", "44" : "D", "45" : "E", "46" : "F",
    "47" : "G", "48" : "H", "49" : "I", "4A" : "J", "4B" : "K", "4C" : "L",
    "4D" : "M", "4E" : "N", "4F" : "O", "50" : "P", "51" : "Q", "52" : "R",
    "53" : "S", "54" : "T", "55" : "U", "56" : "V", "57" : "W", "58" : "X",
    "59" : "Y", "5A" : "Z", "61" : "a", "62" : "b", "63" : "c", "64" : "d",
    "65" : "e", "66" : "f", "67" : "g", "68" : "h", "69" : "i", "6A" : "j",
    "6B" : "k", "6C" : "l", "6D" : "m", "6E" : "n", "6F" : "o", "70" : "p",
    "71" : "q", "72" : "r", "73" : "s", "74" : "t", "75" : "u", "76" : "v",
    "77" : "w", "78" : "x", "79" : "y", "7A" : "z", "00" : "\u0000",
    "01" : "\u0001", "0A" : "\u000A", "FF" : "\u00FF"
  };
  
  StringBuffer errStr = new StringBuffer();
  alphabet.forEach((String key, String value) {
    RegExp re = new RegExp("\\x$key");
    if(null == re.firstMatch(value)) {
      errStr.write("\"\\x${key}\" does not match \"${value}\"\n");
    } 
  });
  
  if(errStr.length > 0) {
    Expect.fail(errStr.toString());
  }
}
