// Copyright (c) 2019, 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 In a constant map, a spread element expands to the series of
/// entries contained in the spread object map.
/// @author iarkh@unipro.ru


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

const Map map1 = {1: 2, 13: 7, 9: 19};
const Map map2 = {11: "checkme"};
const Map map3 = {};
const Map? map4 = null;

main() {
  const Map res1 = {...map1};
  Expect.mapEquals(map1, res1);
  const Map res2 = <int, int>{...?map1};
//                            ^^^^
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
//                                ^
// [cfe] Operand of null-aware operation '...?' has type 'Map<dynamic, dynamic>' which excludes null.
  Expect.mapEquals(map1, res2);

  const Map res3 = <int, String>{...map2};
  Expect.mapEquals(map2, res3);
  const Map res4 = {...?map2};
//                  ^^^^
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
//                      ^
// [cfe] Operand of null-aware operation '...?' has type 'Map<dynamic, dynamic>' which excludes null.
  Expect.mapEquals(map2, res4);

  const Map res5 = {...map3};
  Expect.mapEquals(map3, res5);
  const Map res6 = {...?map3};
//                  ^^^^
// [analyzer] STATIC_WARNING.INVALID_NULL_AWARE_OPERATOR
//                      ^
// [cfe] Operand of null-aware operation '...?' has type 'Map<dynamic, dynamic>' which excludes null.
  Expect.mapEquals(map3, res6);

  const Map res7 = {...?map4};
  Expect.mapEquals({}, res7);

  const Map res8 = {100: null, 10: 14, ...map1, 6: 16};
  Expect.mapEquals({100: null, 10: 14, 1: 2, 13: 7, 9: 19, 6: 16}, res8);

  const Map res9 = {15: 15, ...map1, "stop": null, ...map2, ...map3, "a": "a",
      "b": "b", "c": "c", ...?map4, 208: 18};
  Expect.mapEquals({15: 15, 1: 2, 13: 7, 9: 19, "stop": null, 11: "checkme",
      "a": "a", "b": "b", "c": "c", 208: 18}, res9);
}
