Skip to content

Commit

Permalink
dart-lang#2559. Add merge order and augmenting declarations tests
Browse files Browse the repository at this point in the history
  • Loading branch information
sgrekhov committed Mar 11, 2024
1 parent 19d7957 commit 7108efc
Show file tree
Hide file tree
Showing 12 changed files with 252 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
// Copyright (c) 2024, 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 It is a compile-time error if:
/// - An augmenting declaration has no corresponding original declaration to
/// apply to.
///
/// @description Checks that it is a compile-time error if an augmenting
/// declaration has no corresponding original declaration to apply to
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

augment class C {}
// ^
// [analyzer] unspecified
// [cfe] unspecified

main() {
print(C);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
// Copyright (c) 2024, 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 It is a compile-time error if:
/// - An augmenting declaration has no corresponding original declaration to
/// apply to.
///
/// @description Checks that it is a compile-time error if an augmenting
/// declaration has no corresponding original declaration to apply to
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

augment void foo() {}
// ^^^
// [analyzer] unspecified
// [cfe] unspecified

main() {
void foo() {}
print(foo);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) 2024, 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 It is a compile-time error if:
/// - An augmenting declaration has no corresponding original declaration to
/// apply to.
///
/// @description Checks that it is not an error if an augmenting
/// declaration do has a corresponding original declaration to apply to
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

import '../../Utils/expect.dart';

augment class C {
int get baz => 42;
}

class C {}

main() {
Expect.equals(42, C().baz);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
// Copyright (c) 2024, 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 It is a compile-time error if:
/// ...
/// - An augmenting declaration appears in a library before the library where
/// the original declaration occurs, according to merge order.
///
/// @description Checks that it is a compile-time error if an augmenting
/// declaration appears before non-augmenting one. Test augmented declaration in
/// a main library
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

import augment 'augmenting_declarations_A02_t01_lib.dart';

/**/augment class C {}
// ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
main() {
print(C);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright (c) 2024, 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 It is a compile-time error if:
/// ...
/// - An augmenting declaration appears in a library before the library where
/// the original declaration occurs, according to merge order.
///
/// @description Checks that it is a compile-time error if an augmenting
/// declaration appears before non-augmenting one. Test augmented declaration in
/// a main library
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

library augment 'augmenting_declarations_A02_t01.dart';

class C {}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// Copyright (c) 2024, 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 It is a compile-time error if:
/// ...
/// - An augmenting declaration appears in a library before the library where
/// the original declaration occurs, according to merge order.
///
/// @description Checks that it is a compile-time error if an augmenting
/// declaration appears before non-augmenting one. Test augmented declaration in
/// an augment library
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

import augment 'augmenting_declarations_A02_t02_lib1.dart';

main() {
print(C);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
// Copyright (c) 2024, 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 A non-augmenting declaration must appear first before it can be
/// augmented.
///
/// @description Checks the merge order of augment libraries
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

library augment 'augmenting_declarations_A02_t02.dart';
import augment 'augmenting_declarations_A02_t02_lib2.dart';

/**/augment class C {}
// ^^^^^^^
// [analyzer] unspecified
// [cfe] unspecified
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
// Copyright (c) 2024, 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 A non-augmenting declaration must appear first before it can be
/// augmented.
///
/// @description Checks the merge order of augment libraries
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

library augment 'augmenting_declarations_A02_t02_lib1.dart';

class C {}
27 changes: 27 additions & 0 deletions LanguageFeatures/Augmentation-libraries/merge_order_A01_t01.dart
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
// Copyright (c) 2024, 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 merge order is defined as a depth-first pre-order traversal
/// of the import augment directives starting at the main library.
///
/// @description Checks the merge order of augment libraries
/// @author sgrekhov22@gmail.com
/// @issue 55154
// SharedOptions=--enable-experiment=macros

import '../../Utils/expect.dart';
import augment 'merge_order_A01_t01_lib1.dart';
import augment 'merge_order_A01_t01_lib3.dart';

String log = "";

void logger() {
log += "main;";
}

main() {
logger();
Expect.equals("main;lib1;lib2;lib3;", log);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
// Copyright (c) 2024, 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 merge order is defined as a depth-first pre-order traversal
/// of the import augment directives starting at the main library.
///
/// @description Checks the merge order of augment libraries
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

library augment 'merge_order_A01_t01.dart';

import augment 'merge_order_A01_t01_lib2.dart';

augment void logger() {
augmented();
log += "lib1;";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright (c) 2024, 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 merge order is defined as a depth-first pre-order traversal
/// of the import augment directives starting at the main library.
///
/// @description Checks the merge order of augment libraries
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

library augment 'merge_order_A01_t01_lib1.dart';

augment void logger() {
augmented();
log += "lib2;";
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
// Copyright (c) 2024, 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 merge order is defined as a depth-first pre-order traversal
/// of the import augment directives starting at the main library.
///
/// @description Checks the merge order of augment libraries
/// @author sgrekhov22@gmail.com
// SharedOptions=--enable-experiment=macros

library augment 'merge_order_A01_t01.dart';

augment void logger() {
augmented();
log += "lib3;";
}

0 comments on commit 7108efc

Please sign in to comment.