// 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

// Test the use of '__proto__' keys in maps.

library map_literal10_test;

import "package:expect/expect.dart";

void main() {
  var m1 = const {"__proto__": 0, 1: 1};
  Expect.isTrue(m1.containsKey("__proto__"));
  Expect.equals(0, m1["__proto__"]);
  Expect.isTrue(m1.containsKey(1));
  Expect.equals(1, m1[1]);
  Expect.listEquals(["__proto__", 1], m1.keys.toList());

  var m2 = const {1: 0, "__proto__": 1};
  Expect.isTrue(m2.containsKey(1));
  Expect.equals(0, m2[1]);
  Expect.isTrue(m2.containsKey("__proto__"));
  Expect.equals(1, m2["__proto__"]);
  Expect.listEquals([1, "__proto__"], m2.keys.toList());

  var m3 = const {"1": 0, "__proto__": 1};
  Expect.isTrue(m3.containsKey("1"));
  Expect.equals(0, m3["1"]);
  Expect.isTrue(m3.containsKey("__proto__"));
  Expect.equals(1, m3["__proto__"]);
  Expect.listEquals(["1", "__proto__"], m3.keys.toList());

  var m4 = const {"__proto__": 1, "1": 2};
  Expect.isTrue(m4.containsKey("1"));
  Expect.equals(2, m4["1"]);
  Expect.isTrue(m4.containsKey("__proto__"));
  Expect.equals(1, m4["__proto__"]);
  Expect.listEquals(["__proto__", "1"], m4.keys.toList());
}
