// 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 Iterable<String> split (String lines, [int start = 0, int end])
/// Split lines into individual lines.
/// If start and end are provided, only split the contents of
/// lines.substring(start, end). The start and end values must specify a valid
/// sub-range of lines (0 <= start <= end <= lines.length).
///
/// @description Checks that the start and end values must specify a valid
/// sub-range of lines (0 <= start <= end <= lines.length).
/// @author ngl@unipro.ru

import "dart:convert";
import "../../../Utils/expect.dart";

main() {
  String lines = """
abc
defg
hijkl
""";
  // start < 0
  try {
    print(LineSplitter.split(lines, -1));
  } on RangeError {}
  // start > lines.length
  try {
    print(LineSplitter.split(lines, 20));
  } on RangeError {}
  // start > end
  try {
    print(LineSplitter.split(lines, 10, 7));
  } on RangeError {}
  // end < 0
  try {
    print(LineSplitter.split(lines, 10, -7));
  } on RangeError {}
  // end > lines.length
  try {
    print(LineSplitter.split(lines, 10, 20));
  } on RangeError {}
  // start < 0, end < 0
  try {
    print(LineSplitter.split(lines, -10, -7));
  } on RangeError {}
  // start > lines.length, end > lines.length
  try {
    print(LineSplitter.split(lines, 20, 25));
  } on RangeError {}

}
