// Copyright (c) 2016, 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 String listToString(List list)
/// ...
/// Handles circular references where converting one of the elements to a string
/// ends up converting list to a string again.
/// @description Checks that this method converts each element to a string,
/// separates results by ", " and wraps in "[" and "]"
/// @author sgrekhov@unipro.ru

import "listbase.lib.dart";
import "dart:collection";
import "../../../Utils/expect.dart";

class C {
  String toString() => "C:toString";
}

main() {
  ListBase list1 = create(4, new Object());
  ListBase list2 = create(2, new Object());
  list2[0] = 3;
  list2[1] = new C();

  list1[0] = 1;
  list1[1] = "2";
  list1[2] = list2;
  list1[3] = new C();

  Expect.equals("[1, 2, [3, " + new C().toString() + "], " + new C().toString()
      + "]", ListBase.listToString(list1));
}
