| // Copyright (c) 2017, 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. |
| |
| /// This test is indirectly testing invariants of the generated code of dart2js. |
| /// It ensures that indices to metadata information from **multiple** deferred |
| /// fragments is kept separate, but that when they are loaded (and the metadata |
| /// array is merged) all accesses to the metadata array is done correctly. |
| /// |
| /// This kind of metadata is generated when using Function.apply to |
| /// store default values and parameter names. |
| import 'multiple_default_arg_lib1.dart' deferred as lib1; |
| import 'multiple_default_arg_lib2.dart' deferred as lib2; |
| import 'multiple_default_arg_lib3.dart' deferred as lib3; |
| import 'package:expect/expect.dart'; |
| import 'package:async_helper/async_helper.dart'; |
| |
| main() { |
| asyncTest(() async { |
| await lib1.loadLibrary(); |
| await lib2.loadLibrary(); |
| |
| Expect.equals( |
| Function.apply(lib1.myFunction1, [], {#argumentName1: () => "A"}), |
| "A - 2"); |
| |
| Expect.equals( |
| Function.apply(lib2.myFunction2, [], {#argumentName4: () => "B"}), |
| "3 - B"); |
| |
| await lib3.loadLibrary(); |
| |
| Expect.equals( |
| Function.apply( |
| lib3.myFunction3, ["x", "y"], {#argumentName4: () => "C"}), |
| "x y 3b - C"); |
| |
| Expect.equals( |
| Function.apply(lib3.myFunction3, ["x", "y"], {}), "x y 3b - 4b"); |
| |
| Expect.equals(Function.apply(lib3.myFunction4, ["x", "y"], {}), 5); |
| Expect.equals( |
| Function.apply( |
| lib3.myFunction4, ["x", "y"], {#argumentName5: new lib3.X(4)}), |
| 4); |
| Expect.equals( |
| Function.apply( |
| lib3.myFunction4, ["x", "y"], {#argumentName5: lib3.value3}), |
| 3); |
| }); |
| } |