// Copyright (c) 2018, 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 The token following a question mark dictates whether it's part of
/// a null-aware operation or the beginning of a new expression.
///
/// @description Checks usage of a null-aware expression when a set literal is
/// declared.
/// @author sgrekhov@unipro.ru

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

class C {
  var n1 = 1 as int?;
  static var n2 = 2 as int?;
  int? x = null;
}

main() {
  C? cn = null;

  var v1 = {cn?.x ?? 3, C?.n2, cn?.n1};
  Expect.isTrue(v1 is Set);
  Expect.iterableEquals({3, 2, null}, v1);

  var c = C() as C?;

  var v2 = {c?.x ?? 3, C?.n2, c?.n1};
  Expect.isTrue(v2 is Set);
  Expect.iterableEquals({3, 2, 1}, v2);

  var v3 = <int?>{c?.x ?? 3, C?.n2, c?.n1};
  Expect.isTrue(v3 is Set);
  Expect.iterableEquals({3, 2, 1}, v3);

  var v4 = <int?>{c?.n1 ??= (c as C).x, c?.x ??= 4, C?.n2, c?.x ?? 3};
  Expect.isTrue(v4 is Set);
  Expect.iterableEquals({1, 4, 2}, v4);
}
