|  | // 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); | 
|  | }); | 
|  | } |