diff --git a/tests/language/metadata/cyclic_test.dart b/tests/language/metadata/cyclic_test.dart new file mode 100644 index 00000000000..6ff4798273f --- /dev/null +++ b/tests/language/metadata/cyclic_test.dart @@ -0,0 +1,25 @@ +// Copyright (c) 2014, 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. + +// Check that metadata on a class 'Super' using subtypes of 'Super' are not +// considered as cyclic inheritance or lead to crashes. + +@Sub1(0) //# 01: ok +class Super { + final field; + @Sub2(1) //# 02: ok + const Super(this.field); +} + +class Sub1 extends Super { + const Sub1(var field) : super(field); +} + +class Sub2 extends Super { + const Sub2(var field) : super(field); +} + +void main() { + print(new Super(1)); +} diff --git a/tests/language/metadata/lib.dart b/tests/language/metadata/lib.dart new file mode 100644 index 00000000000..94923eb06dc --- /dev/null +++ b/tests/language/metadata/lib.dart @@ -0,0 +1,13 @@ +// Copyright (c) 2012, 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. + +library metadata.dart; + +class Alien { + final String qwrrkz; + const Alien(this.qwrrkz); + const Alien.unknown() : qwrrkz = "???"; +} + +const Klingon = const Alien("Klingon"); diff --git a/tests/language/metadata/metadata_test.dart b/tests/language/metadata/metadata_test.dart new file mode 100644 index 00000000000..e6c088f93cd --- /dev/null +++ b/tests/language/metadata/metadata_test.dart @@ -0,0 +1,62 @@ +// Copyright (c) 2012, 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. + +// Test ensuring that compiler can parse metadata. Need to add negative +// test cases with illegal metadata annotations. + +library metadata_test.dart; + +import "package:expect/expect.dart"; +import "lib.dart" as Meta; + +class Tag { + final String annotation; + const Tag(this.annotation); +} + +const meta1 = 1; +const meta2 = const Tag("meta2"); + +const extern = const Tag("external"); + +@meta1 +var topLevelVar; +@Meta.Alien.unknown() +List unknownUnknowns = []; + +@meta1 +typedef int DingDong<@meta2 T>(@meta1 event); + +@meta1 +class A<@Tag("typeParam") T> { + @meta1 + @meta2 + static String staticField = "s"; + + @Meta.Alien("ET") + int foo(@meta1 bool fool, {@meta1 @Tag("opt") x: 100}) { + g() => 10; + return x * g(); + } + + @Tag(r"timewarp") + List getNextWeeksLottoNumbers() => [1, 2, 3, 4, 5, 6]; +} + +@meta1 +main() { + @meta1 + var a = new A(); + Expect.equals(0, a.foo(false, x: 0)); + + for (@Tag("loopvar") + int i = 0; + i < 10; + i++) { + // Do something. + } + + @meta1 + var s = r'This is a raw \\ string.'; +} diff --git a/tests/language/metadata/scope1_test.dart b/tests/language/metadata/scope1_test.dart new file mode 100644 index 00000000000..6af98441438 --- /dev/null +++ b/tests/language/metadata/scope1_test.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2014, 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. + +// Test that a type variable is not in scope for metadata declared on the type +// declaration. + +@deprecated +typedef Foo + // //# 01: ok + (); + +main() { + Foo? f = null; +} diff --git a/tests/language/metadata/scope2_test.dart b/tests/language/metadata/scope2_test.dart new file mode 100644 index 00000000000..7a66a3883e4 --- /dev/null +++ b/tests/language/metadata/scope2_test.dart @@ -0,0 +1,15 @@ +// Copyright (c) 2014, 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. + +// Test that a type variable is not in scope for metadata declared on the type +// declaration. + +@deprecated +class Foo + // //# 01: ok +{} + +main() { + Foo? f = null; +} diff --git a/tests/language/metadata/self_test.dart b/tests/language/metadata/self_test.dart new file mode 100644 index 00000000000..434cc38a0a0 --- /dev/null +++ b/tests/language/metadata/self_test.dart @@ -0,0 +1,14 @@ +// Copyright (c) 2014, 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. + +// Test that metadata refer to the annotated declaration. + +@Foo() +class Foo { + const Foo(); +} + +main() { + Foo f = const Foo(); +}