// Copyright (c) 2016, 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.

import "package:expect/expect.dart";

main() {
  var expect = new String.fromCharCodes([
    0, 0x0a, 0x0d, 0x7f, 0xff, 0xffff, 0xd800, 0xdc00, 0xdbff, 0xdfff
  ]);
  test(string) {
    Expect.equals(expect, string);
  }

  // Plain escapes of code points.
  test("\x00\x0a\x0d\x7f\xff\uffff\u{10000}\u{10ffff}");
  test("""\x00\x0a\x0d\x7f\xff\uffff\u{10000}\u{10ffff}""");
  test('\x00\x0a\x0d\x7f\xff\uffff\u{10000}\u{10ffff}');
  test('''\x00\x0a\x0d\x7f\xff\uffff\u{10000}\u{10ffff}''');
  // Plain escapes of individual code units.
  test("\x00\x0a\x0d\x7f\xff\uffff\ud800\udc00\udbff\udfff");
  test("""\x00\x0a\x0d\x7f\xff\uffff\ud800\udc00\udbff\udfff""");
  test('\x00\x0a\x0d\x7f\xff\uffff\ud800\udc00\udbff\udfff');
  test('''\x00\x0a\x0d\x7f\xff\uffff\ud800\udc00\udbff\udfff''');
  // Insert newline into multiline string.
  test("""\x00
\x0d\x7f\xff\uffff\ud800\udc00\udbff\udfff""");
  test('''\x00
\x0d\x7f\xff\uffff\ud800\udc00\udbff\udfff''');
  // Extract code points from multi-character escape string.
  test("\x00\x0a\x0d\x7f\xff\uffff"
       "${"\u{10000}"[0]}${"\u{10000}"[1]}"
       "${"\u{10FFFF}"[0]}${"\u{10FFFF}"[1]}");
  test("\x00\x0a\x0d\x7f\xff\uffff" +
      "\ud800" + "\udc00\udbff" + "\udfff");
  // Single line string over multiple lines with newlines inside interpolation.
  test("\x00\x0a\x0d\x7f\xff${
           ""
       }\uffff\ud800\udc00\udbff\udfff");
}
