// 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 List<int> parseIPv6Address(String host, [int start = 0, int end])
 * Parse the host as an IP version 6 (IPv6) address, returning the address as a
 * list of 16 bytes in network byte order (big endian).
 * ...
 * Acts on the substring from start to end. If end is omitted, it defaults ot
 * the end of the string.
 * @description Checks that if start and end parameters specified, then only
 * appropriate substring is parsed
 * @author sgrekhov@unipro.ru
 */
import "../../../Utils/expect.dart";

main() {
  String address = "FEDC:BA98:7654:3210:FEDC:BA98:7654:3210";
  List<int> expected = [254, 220, 186, 152, 118, 84, 50, 16, 254, 220, 186, 152,
    118, 84, 50, 16];
  Expect.listEquals(expected, Uri.parseIPv6Address("http://" + address +
      ":8080", 7, 7 + address.length));

  Expect.listEquals(expected, Uri.parseIPv6Address("http://" + address, 7));

  Expect.throws(() {
    Uri.parseIPv6Address("http://FEDC:BA98:7654:3210:FEDC:BA98:7654:3210:8080",
        7);
  }, (e) => e is FormatException);

}
