/*
 * Copyright (c) 2017, 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 const Utf8Codec({bool allowMalformed: false})
 * Instantiates a new Utf8Codec.
 *
 * The optional allowMalformed argument defines how decoder (and decode) deal
 * with invalid or unterminated character sequences.
 *
 * If it is true (and not overridden at the method invocation) decode and the
 * decoder replace invalid (or unterminated) octet sequences with the Unicode
 * Replacement character U+FFFD (�). Otherwise they throw a FormatException.
 * @description Checks that this constructor with allowMalformed: true creates
 * Utf8Codec which doesn't throw FormatException for invalid or unterminated
 * character sequences but replaces them by Replacement character U+FFFD (�)
 * Invalid characters taken from
 * http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
 * @issue 28832
 * @author sgrekhov@unipro.ru
 */
import "dart:convert";
import "../../../Utils/expect.dart";

check(List<int> toDecode, String expected) {
  Utf8Codec codec = new Utf8Codec(allowMalformed: true);
  Expect.equals(expected, codec.decode(toDecode));
}

main() {
  //Sequence of all 64 possible continuation bytes (0x80-0xBF)
  for (int i = 0x80; i <= 0xBF; i++) {
    check([i], "�");
  }

  // All 32 first bytes of 2-byte sequences (0xc0-0xdf)
  for (int i = 0xc0; i <= 0xdf; i++) {
    check([i], "�");
  }

  // All 16 first bytes of 3-byte sequences (0xe0-0xef)
  for (int i = 0xe0; i <= 0xef; i++) {
    check([i], "�");
  }

  // All 8 first bytes of 4-byte sequences (0xf0-0xf7)
  for (int i = 0xf0; i <= 0xf7; i++) {
    check([i], "�");
  }

  // All 4 first bytes of 5-byte sequences (0xf8-0xfb)
  for (int i = 0xf8; i <= 0xfb; i++) {
    check([i], "�");
  }

  // All 2 first bytes of 6-byte sequences (0xfc-0xfd)
  for (int i = 0xfc; i <= 0xfd; i++) {
    check([i], "�");
  }

  // The following two bytes cannot appear in a correct UTF-8 string
  check([0xFE], "�");
  check([0xFF], "�");
  check([0xFE, 0xFE, 0xFF, 0xFF], "����");

  // Overlong ASCII character
  check([0xc0, 0xaf], "��");
  check([0xe0, 0x80, 0xaf], "���");
  check([0xf0, 0x80, 0x80, 0xaf], "����");
  check([0xf8, 0x80, 0x80, 0x80, 0xaf], "�����");
  check([0xfc, 0x80, 0x80, 0x80, 0x80, 0xaf], "������");

  // Maximum overlong sequences
  check([0xc1, 0xBF], "��");
  check([0xe0, 0x9f, 0xBF], "���");
  check([0xf0, 0x8f, 0xBF, 0xBF], "����");
  check([0xf8, 0x87, 0xBF, 0xBF, 0xBF], "�����");
  check([0xfc, 0x83, 0xBF, 0xBF, 0xBF, 0xBF], "������");

  // Overlong representation of the NUL character
  check([0xC0, 0x80], "��");
  check([0xE0, 0x80, 0x80], "���");
  check([0xF0, 0x80, 0x80, 0x80], "����");
  check([0xF8, 0x80, 0x80, 0x80, 0x80], "�����");
  check([0xFC, 0x80, 0x80, 0x80, 0x80, 0x80], "������");

  // Single UTF-16 surrogates
  check([0xED, 0xA0, 0x80], "���");
  check([0xED, 0xAD, 0xBF], "���");
  check([0xED, 0xAD, 0x80], "���");
  check([0xED, 0xAF, 0xBF], "���");
  check([0xED, 0xB0, 0x80], "���");
  check([0xED, 0xBE, 0x80], "���");
  check([0xED, 0xBF, 0xBF], "���");

  // Paired UTF-16 surrogates
  check([0xED, 0xA0, 0x80, 0xED, 0xB0, 0x80], "������");
  check([0xED, 0xA0, 0x80, 0xED, 0xBF, 0xBF], "������");
  check([0xED, 0xAD, 0xBF, 0xED, 0xB0, 0x80], "������");
  check([0xED, 0xAD, 0xBF, 0xED, 0xBF, 0xBF], "������");
  check([0xED, 0xAE, 0x80, 0xED, 0xB0, 0x80], "������");
  check([0xED, 0xAE, 0x80, 0xED, 0xBF, 0xBF], "������");
  check([0xED, 0xAF, 0xBF, 0xED, 0xB0, 0x80], "������");
  check([0xED, 0xAF, 0xBF, 0xED, 0xBF, 0xBF], "������");
}
