blob: f356e77b66d68bc7262631c34bbe4fc443dc24a6 [file] [log] [blame]
// 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.
// @dart = 2.7
/// 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);
});
}