/*
 * 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 Dart source text is represented as a sequence of Unicode code
 * points.
 * @description Checks that various whitespaces represented in UTF-8 format are
 * recognized as Unicode code points.
 * @author iefremov
 */
import "../../../Utils/expect.dart";

  List<String> unicode = [
     "\u0009", "\u000a", "\u000b", "\u000c",
     //"\u000d", -- problematic character, converted to 0x0A by dart
     "\u0020", "\u0085", "\u00a0", "\u1680", "\u180e",
     "\u2000", "\u2001", "\u2002", "\u2003", "\u2004",
     "\u2005", "\u2006", "\u2007", "\u2008", "\u2009",
     "\u200a", "\u202f", "\u205f", "\u3000", "\ufeff"
    ];

  List characters = [
    r''':	''', r''':
''', r''':''', r''':''', //r''':
//''',
    r''': ''', r''':''', r''': ''', r''': ''', r''':᠎''',
    r''': ''', r''': ''', r''': ''', r''': ''', r''': ''',
    r''': ''', r''': ''', r''': ''', r''': ''', r''': ''',
    r''': ''', r''': ''', r''': ''', r''':　''', r''':﻿'''
  ];

main() {
  Expect.equals(unicode.length, characters.length);
  for (int k = 0; k < unicode.length; k++) {
    String str1 = unicode[k];
    String str2 = characters[k];
    int code1 = str1.codeUnitAt(0);
    int code2 = str2.codeUnitAt(1);
    Expect.equals(code1, code2, "code at $k");
  }
}
