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