#!/usr/bin/env dart
// Copyright (c) 2012, 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.

#library("utf32_tests");
#import("dunit.dart");
#import("../../string_encoding/unicode_core.dart");
#import("../../string_encoding/utf32.dart");

void main() {
  TestSuite suite = new TestSuite();
  suite.registerTestClass(new Utf32Tests());
  suite.run();
}

class Utf32Tests extends TestClass {
  static const String testKoreanCharSubset = """
가각갂갃간갅갆갇갈갉갊갋갌갍갎갏감갑값갓갔강갖갗갘같갚갛
개객갞갟갠갡갢갣갤갥갦갧갨갩갪갫갬갭갮갯갰갱갲갳갴갵갶갷
갸갹갺갻갼갽갾갿걀걁걂걃걄걅걆걇걈걉걊걋걌걍걎걏걐걑걒걓""";
  static const String testHanTwice = "二";

  static const List<int> testKoreanCharSubsetUtf32beBom = const<int>[
      0x00, 0x00, 0xfe, 0xff, 0x00, 0x00, 0xac, 0x00,
      0x00, 0x00, 0xac, 0x01, 0x00, 0x00, 0xac, 0x02,
      0x00, 0x00, 0xac, 0x03, 0x00, 0x00, 0xac, 0x04,
      0x00, 0x00, 0xac, 0x05, 0x00, 0x00, 0xac, 0x06,
      0x00, 0x00, 0xac, 0x07, 0x00, 0x00, 0xac, 0x08,
      0x00, 0x00, 0xac, 0x09, 0x00, 0x00, 0xac, 0x0a,
      0x00, 0x00, 0xac, 0x0b, 0x00, 0x00, 0xac, 0x0c,
      0x00, 0x00, 0xac, 0x0d, 0x00, 0x00, 0xac, 0x0e,
      0x00, 0x00, 0xac, 0x0f, 0x00, 0x00, 0xac, 0x10,
      0x00, 0x00, 0xac, 0x11, 0x00, 0x00, 0xac, 0x12,
      0x00, 0x00, 0xac, 0x13, 0x00, 0x00, 0xac, 0x14,
      0x00, 0x00, 0xac, 0x15, 0x00, 0x00, 0xac, 0x16,
      0x00, 0x00, 0xac, 0x17, 0x00, 0x00, 0xac, 0x18,
      0x00, 0x00, 0xac, 0x19, 0x00, 0x00, 0xac, 0x1a,
      0x00, 0x00, 0xac, 0x1b, 0x00, 0x00, 0x00, 0x0a,
      0x00, 0x00, 0xac, 0x1c, 0x00, 0x00, 0xac, 0x1d,
      0x00, 0x00, 0xac, 0x1e, 0x00, 0x00, 0xac, 0x1f,
      0x00, 0x00, 0xac, 0x20, 0x00, 0x00, 0xac, 0x21,
      0x00, 0x00, 0xac, 0x22, 0x00, 0x00, 0xac, 0x23,
      0x00, 0x00, 0xac, 0x24, 0x00, 0x00, 0xac, 0x25,
      0x00, 0x00, 0xac, 0x26, 0x00, 0x00, 0xac, 0x27,
      0x00, 0x00, 0xac, 0x28, 0x00, 0x00, 0xac, 0x29,
      0x00, 0x00, 0xac, 0x2a, 0x00, 0x00, 0xac, 0x2b,
      0x00, 0x00, 0xac, 0x2c, 0x00, 0x00, 0xac, 0x2d,
      0x00, 0x00, 0xac, 0x2e, 0x00, 0x00, 0xac, 0x2f,
      0x00, 0x00, 0xac, 0x30, 0x00, 0x00, 0xac, 0x31,
      0x00, 0x00, 0xac, 0x32, 0x00, 0x00, 0xac, 0x33,
      0x00, 0x00, 0xac, 0x34, 0x00, 0x00, 0xac, 0x35,
      0x00, 0x00, 0xac, 0x36, 0x00, 0x00, 0xac, 0x37,
      0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0xac, 0x38,
      0x00, 0x00, 0xac, 0x39, 0x00, 0x00, 0xac, 0x3a,
      0x00, 0x00, 0xac, 0x3b, 0x00, 0x00, 0xac, 0x3c,
      0x00, 0x00, 0xac, 0x3d, 0x00, 0x00, 0xac, 0x3e,
      0x00, 0x00, 0xac, 0x3f, 0x00, 0x00, 0xac, 0x40,
      0x00, 0x00, 0xac, 0x41, 0x00, 0x00, 0xac, 0x42,
      0x00, 0x00, 0xac, 0x43, 0x00, 0x00, 0xac, 0x44,
      0x00, 0x00, 0xac, 0x45, 0x00, 0x00, 0xac, 0x46,
      0x00, 0x00, 0xac, 0x47, 0x00, 0x00, 0xac, 0x48,
      0x00, 0x00, 0xac, 0x49, 0x00, 0x00, 0xac, 0x4a,
      0x00, 0x00, 0xac, 0x4b, 0x00, 0x00, 0xac, 0x4c,
      0x00, 0x00, 0xac, 0x4d, 0x00, 0x00, 0xac, 0x4e,
      0x00, 0x00, 0xac, 0x4f, 0x00, 0x00, 0xac, 0x50,
      0x00, 0x00, 0xac, 0x51, 0x00, 0x00, 0xac, 0x52,
      0x00, 0x00, 0xac, 0x53];

  static const List<int> testKoreanCharSubsetUtf32le = const<int>[
      0x00, 0xac, 0x00, 0x00, 0x01, 0xac, 0x00, 0x00,
      0x02, 0xac, 0x00, 0x00, 0x03, 0xac, 0x00, 0x00,
      0x04, 0xac, 0x00, 0x00, 0x05, 0xac, 0x00, 0x00,
      0x06, 0xac, 0x00, 0x00, 0x07, 0xac, 0x00, 0x00,
      0x08, 0xac, 0x00, 0x00, 0x09, 0xac, 0x00, 0x00,
      0x0a, 0xac, 0x00, 0x00, 0x0b, 0xac, 0x00, 0x00,
      0x0c, 0xac, 0x00, 0x00, 0x0d, 0xac, 0x00, 0x00,
      0x0e, 0xac, 0x00, 0x00, 0x0f, 0xac, 0x00, 0x00,
      0x10, 0xac, 0x00, 0x00, 0x11, 0xac, 0x00, 0x00,
      0x12, 0xac, 0x00, 0x00, 0x13, 0xac, 0x00, 0x00,
      0x14, 0xac, 0x00, 0x00, 0x15, 0xac, 0x00, 0x00,
      0x16, 0xac, 0x00, 0x00, 0x17, 0xac, 0x00, 0x00,
      0x18, 0xac, 0x00, 0x00, 0x19, 0xac, 0x00, 0x00,
      0x1a, 0xac, 0x00, 0x00, 0x1b, 0xac, 0x00, 0x00,
      0x0a, 0x00, 0x00, 0x00, 0x1c, 0xac, 0x00, 0x00,
      0x1d, 0xac, 0x00, 0x00, 0x1e, 0xac, 0x00, 0x00,
      0x1f, 0xac, 0x00, 0x00, 0x20, 0xac, 0x00, 0x00,
      0x21, 0xac, 0x00, 0x00, 0x22, 0xac, 0x00, 0x00,
      0x23, 0xac, 0x00, 0x00, 0x24, 0xac, 0x00, 0x00,
      0x25, 0xac, 0x00, 0x00, 0x26, 0xac, 0x00, 0x00,
      0x27, 0xac, 0x00, 0x00, 0x28, 0xac, 0x00, 0x00,
      0x29, 0xac, 0x00, 0x00, 0x2a, 0xac, 0x00, 0x00,
      0x2b, 0xac, 0x00, 0x00, 0x2c, 0xac, 0x00, 0x00,
      0x2d, 0xac, 0x00, 0x00, 0x2e, 0xac, 0x00, 0x00,
      0x2f, 0xac, 0x00, 0x00, 0x30, 0xac, 0x00, 0x00,
      0x31, 0xac, 0x00, 0x00, 0x32, 0xac, 0x00, 0x00,
      0x33, 0xac, 0x00, 0x00, 0x34, 0xac, 0x00, 0x00,
      0x35, 0xac, 0x00, 0x00, 0x36, 0xac, 0x00, 0x00,
      0x37, 0xac, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00,
      0x38, 0xac, 0x00, 0x00, 0x39, 0xac, 0x00, 0x00,
      0x3a, 0xac, 0x00, 0x00, 0x3b, 0xac, 0x00, 0x00,
      0x3c, 0xac, 0x00, 0x00, 0x3d, 0xac, 0x00, 0x00,
      0x3e, 0xac, 0x00, 0x00, 0x3f, 0xac, 0x00, 0x00,
      0x40, 0xac, 0x00, 0x00, 0x41, 0xac, 0x00, 0x00,
      0x42, 0xac, 0x00, 0x00, 0x43, 0xac, 0x00, 0x00,
      0x44, 0xac, 0x00, 0x00, 0x45, 0xac, 0x00, 0x00,
      0x46, 0xac, 0x00, 0x00, 0x47, 0xac, 0x00, 0x00,
      0x48, 0xac, 0x00, 0x00, 0x49, 0xac, 0x00, 0x00,
      0x4a, 0xac, 0x00, 0x00, 0x4b, 0xac, 0x00, 0x00,
      0x4c, 0xac, 0x00, 0x00, 0x4d, 0xac, 0x00, 0x00,
      0x4e, 0xac, 0x00, 0x00, 0x4f, 0xac, 0x00, 0x00,
      0x50, 0xac, 0x00, 0x00, 0x51, 0xac, 0x00, 0x00,
      0x52, 0xac, 0x00, 0x00, 0x53, 0xac, 0x00, 0x00];

  void registerTests(TestSuite suite) {
    register("Utf32Tests.testUtf32BytesToString", testUtf32BytesToString,
        suite);
    register("Utf32Tests.testEncodeToUtf32", testEncodeToUtf32, suite);
    register("Utf32Tests.testIterableMethods", testIterableMethods, suite);
  }

  void testEncodeToUtf32() {
    Expect.listEquals([], encodeUtf32le(""), "no input"); // TODO(dcarlson) skip bom on empty?
    Expect.listEquals(testKoreanCharSubsetUtf32beBom,
        encodeUtf32(testKoreanCharSubset),
        "encode UTF-32(BE by default) Korean");
    Expect.listEquals(testKoreanCharSubsetUtf32le,
        encodeUtf32le(testKoreanCharSubset),
        "encode UTF-32(LE by default) Korean");
  }

  void testUtf32BytesToString() {
    Expect.stringEquals("", decodeUtf32([]), "no input");
    Expect.stringEquals("\ufffd", decodeUtf32([0]), "single byte");
    Expect.stringEquals("\ufffd", decodeUtf32([0, 0, 0x4e]),
        "short a byte");
    Expect.stringEquals("\u4e8c\ufffd", decodeUtf32([0, 0, 0x4e, 0x8c, 0]),
        "extra byte");

    Expect.stringEquals(testHanTwice, decodeUtf32([0, 0, 0x4e, 0x8c]),
        "twice variation 1");
    Expect.stringEquals(testHanTwice,
        decodeUtf32([0, 0, 0xfe, 0xff, 0, 0, 0x4e, 0x8c]),
        "twice variation 2");
    Expect.stringEquals(testHanTwice,
        decodeUtf32([0xff, 0xfe, 0, 0, 0x8c, 0x4e, 0, 0]),
        "twice variation 3");

    Expect.stringEquals(testHanTwice, decodeUtf32be([0, 0, 0x4e, 0x8c]),
        "twice variation 4");
    Expect.stringEquals(testHanTwice,
        decodeUtf32be([0, 0, 0xfe, 0xff, 0, 0, 0x4e, 0x8c]),
        "twice variation 5");

    Expect.stringEquals(testHanTwice, decodeUtf32le([0x8c, 0x4e, 0, 0]),
        "twice variation 6");
    Expect.stringEquals(testHanTwice,
        decodeUtf32le([0xff, 0xfe, 0, 0, 0x8c, 0x4e, 0, 0]),
        "twice variation 7");

    Expect.stringEquals(testKoreanCharSubset,
        decodeUtf32(testKoreanCharSubsetUtf32beBom),
        "UTF-32BE Korean");
  }

  void testIterableMethods() {
    // empty input
    Expect.isFalse(decodeUtf32AsIterable([]).iterator().hasNext);

    IterableUtf32Decoder koreanDecoder =
      decodeUtf32AsIterable(testKoreanCharSubsetUtf32beBom);
    // get the first character
    Expect.equals(testKoreanCharSubset.charCodes[0],
        koreanDecoder.iterator().next());
    // get the whole translation using the Iterable interface
    Expect.stringEquals(testKoreanCharSubset,
        new String.fromCharCodes(new List<int>.from(koreanDecoder)));

    // specify types
    Expect.equals(44032, (new List<int>
        .from(decodeUtf32beAsIterable(testKoreanCharSubsetUtf32beBom)))[0]);
    Expect.equals(44032, (new List<int>
        .from(decodeUtf32leAsIterable(testKoreanCharSubsetUtf32le)))[0]);
    Expect.equals(UNICODE_BOM, (new List<int>
        .from(decodeUtf32beAsIterable(testKoreanCharSubsetUtf32beBom,
            stripBom: false)))[0]);
  }
}
