// Copyright (c) 2014, 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 // Test that the additional runtime type support is output to the right // Files when using deferred loading. import 'package:async_helper/async_helper.dart'; import 'constant_emission_test_helper.dart'; void main() { runTest() async { Map> expectedOutputUnits = { 'ConstructedConstant(C(x=IntConstant(1)))': {'main'}, 'DeferredGlobalConstant(ConstructedConstant(C(x=IntConstant(1))))': // With CFE constants, the references are inlined, so the constant // only occurs in main. {}, 'ConstructedConstant(C(x=IntConstant(2)))': {'lib1'}, 'DeferredGlobalConstant(ConstructedConstant(C(x=IntConstant(2))))': { 'lib1' }, 'ConstructedConstant(C(x=IntConstant(3)))': {'lib1'}, 'ConstructedConstant(C(x=IntConstant(4)))': {'lib2'}, 'DeferredGlobalConstant(ConstructedConstant(C(x=IntConstant(4))))': { 'lib2' }, 'ConstructedConstant(C(x=IntConstant(5)))': {'lib2'}, }; await run( MEMORY_SOURCE_FILES, const [ OutputUnitDescriptor('memory:lib1.dart', 'm1', 'lib1'), OutputUnitDescriptor('memory:lib2.dart', 'm2', 'lib2'), ], expectedOutputUnits); } asyncTest(() async { print('--test from kernel------------------------------------------------'); await runTest(); }); } // Make sure that deferred constants are not inlined into the main hunk. const Map MEMORY_SOURCE_FILES = const { "main.dart": r""" import 'c.dart'; import 'lib1.dart' deferred as l1; const c1 = const C(1); main() async { print(c1.x); await l1.loadLibrary(); l1.m1(); print(l1.c2); } """, "lib1.dart": """ import 'c.dart'; import 'lib2.dart' deferred as l2; const c2 = const C(2); const c3 = const C(3); m1() async { print(c2); print(c3); await l2.loadLibrary(); l2.m2(); print(l2.c3); print(l2.c4); } """, "lib2.dart": """ import 'c.dart'; const c3 = const C(1); const c4 = const C(4); const c5 = const C(5); m2() async { print(c3); print(c4); print(c5); } """, "c.dart": """ class C { const C(this.x); final x; } """, };