// Copyright (c) 2013, 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.

// @dart = 2.9

import "package:expect/expect.dart";

void main() {
  Map m = new Map();

  m[0] = 0;
  m[1] = 1;
  m[2] = m;

  Expect.equals('{0: 0, 1: 1, 2: {...}}', m.toString());

  // Throwing in the middle of a toString does not leave the
  // map as being visited
  ThrowOnToString err = new ThrowOnToString();
  m[1] = err;
  Expect.throws(m.toString, (e) => e == "Bad!");
  m[1] = 1;
  Expect.equals('{0: 0, 1: 1, 2: {...}}', m.toString());
  m[err] = 1;
  Expect.throws(m.toString, (e) => e == "Bad!");
  m.remove(err);
}

class ThrowOnToString {
  String toString() {
    throw "Bad!";
  }
}
