// Copyright (c) 2011, 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  abstract void forEach(void f(K key, V value))
/// It is an error to add or remove keys from the map during iteration.
/// @description Tries to remove or add entries in [f] while iterating over the
/// map, expects a ConcurrentModificationError every time regardless of whether
/// or not it is the current key that's being removed.
/// @author msyabro

library forEach_A02_t01;

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

test(Map create([Map content])) {
  Map map = create();
  
  map["1"] = 3;
  map["2"] = 5;

  Expect.throws(() {
      map.forEach((var key, var value) {
        map["3"] = key;
      });
    }, (e)=> e is ConcurrentModificationError
  );
  
  Expect.throws(() {
      map.forEach((var key, var value) {
        map.remove("2");
      });
    }, (e)=> e is ConcurrentModificationError
  );
  Expect.throws(() {
      map.forEach((var key, var value) {
        map.remove(key);
      });
    }, (e)=> e is ConcurrentModificationError
  );
  
  map["1"] = 1;
  map["2"] = 2;
  Expect.throws(() {
      map.forEach((var key, var value) {
        map.clear();
      });
    }, (e)=> e is ConcurrentModificationError
  );
}
