// 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 Attempting to mutate a constant map literal will result in
/// a dynamic error.
/// @description Checks that it is a run-time error to attempt to modify a
/// constant map literal.
/// @author msyabro
/// @reviewer kaigorodov

import '../../../Utils/expect.dart';

main() {
  bool b = true;
  try {
    b = false;
    (const {})["1"] = 2;
    b = true;
  } catch (e) {}
  if (b) Expect.fail("Exception is expected");

  try {
    b = false;
    (const {"k1": 1}).remove("k1");
    b = true;
  } catch (e) {}
  if (b) Expect.fail("Exception is expected");

  try {
    b = false;
    (const {"k1": 1})["k1"] = 0;
    b = true;
  } catch (e) {}
  if (b) Expect.fail("Exception is expected");

  try {
    b = false;
    (const {"k1" : 1, "k2": false}).clear();
    b = true;
  } catch (e) {}
  if (b) Expect.fail("Exception is expected");

  try {
    b = false;
    (const {}).clear();
    Expect.fail("Exception is expected");
    b = true;
  } catch (e) {}
  if (b) Expect.fail("Exception is expected");
}
