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

// @dart = 2.9

import "package:expect/expect.dart";

// Test class literal expressions.

class Class {
  static fisk() => 42;
}

foo(x) {}

main() {
  Expect.equals(42, Class.fisk());
  Expect.equals(null, foo(Class.fisk()));

  // Verify references to a class literal are allowed.
  Class;
  dynamic x = Class;
  foo(Class);
  Expect.isFalse(Class == null);

  // Verify that dereferencing a class literal is a compile-time error if it
  // isn't used as a constructor.
  Class();
  Class[0]; //# 02: compile-time error
  x = Class();
  x = Class[0]; //# 04: compile-time error
  x = Class[0].field; //# 05: compile-time error
  x = Class[0].method(); //# 06: compile-time error
  foo(Class());
  foo(Class[0]); //# 08: compile-time error
  foo(Class[0].field); //# 09: compile-time error
  foo(Class[0].method()); //# 10: compile-time error
  Class[0] = 91; //# 11: compile-time error
  Class++; //# 12: compile-time error
  ++Class; //# 13: compile-time error
  Class[0] += 3; //# 14: compile-time error
  ++Class[0]; //# 15: compile-time error
  Class[0]++; //# 16: compile-time error
  Class.method(); //# 17: compile-time error
  Class.field; //# 18: compile-time error
  x = Class.method(); //# 19: compile-time error
  x = Class.field; //# 20: compile-time error
  foo(Class.method()); //# 21: compile-time error
  foo(Class.field); //# 22: compile-time error
  Class / 3; //# 23: compile-time error
  Class += 3; //# 24: compile-time error

  // Verify that a class literal isn't a string literal.
  Expect.notEquals(Class, "Class");

  // Verify toString() works for class literals.
  Expect.isTrue((Class).toString() is String);
  var y = Class;
  Expect.isTrue(y.toString() is String);

  Class.toString(); //# 25: compile-time error
}
