Skip to content

Commit 28d1217

Browse files
committed
add and fix tests
1 parent 6b9ddd7 commit 28d1217

File tree

8 files changed

+133
-2
lines changed

8 files changed

+133
-2
lines changed

build_web_compilers/lib/build_web_compilers.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,6 @@ export 'src/common.dart'
1313
symbolsExtension;
1414
export 'src/dev_compiler_builder.dart' show DevCompilerBuilder;
1515
export 'src/platforms.dart'
16-
show dart2jsPlatform, dart2wasmPlatform, ddcPlatform;
16+
show dart2jsPlatform, dart2wasmPlatform, ddcPlatform, initializePlatforms;
1717
export 'src/web_entrypoint_builder.dart'
1818
show WebCompiler, WebEntrypointBuilder, ddcBootstrapExtension;

build_web_compilers/lib/builders.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import 'package:collection/collection.dart';
99
import 'build_web_compilers.dart';
1010
import 'src/common.dart';
1111
import 'src/ddc_frontend_server_builder.dart';
12-
import 'src/platforms.dart';
1312
import 'src/sdk_js_compile_builder.dart';
1413
import 'src/sdk_js_copy_builder.dart';
1514
import 'src/web_entrypoint_marker_builder.dart';

build_web_compilers/lib/src/platforms.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,11 +44,23 @@ final ddcPlatform = DartPlatform.byName('ddc');
4444
final dart2jsPlatform = DartPlatform.byName('dart2js');
4545
final dart2wasmPlatform = DartPlatform.byName('dart2wasm');
4646

47+
bool? _useAdditionalUiLibraries;
48+
4749
/// Registers the platforms with [DartPlatform].
4850
///
4951
/// Must be called before [ddcPlatform], [dart2jsPlatform], or
5052
/// [dart2wasmPlatform] is used.
5153
void initializePlatforms([bool useAdditionalUiLibraries = false]) {
54+
if (_useAdditionalUiLibraries != null) {
55+
if (_useAdditionalUiLibraries != useAdditionalUiLibraries) {
56+
throw ArgumentError(
57+
'Function initializePlatforms() called multiple times with different '
58+
'values. Make sure to call it always with the same value.',
59+
);
60+
}
61+
return;
62+
}
63+
_useAdditionalUiLibraries = useAdditionalUiLibraries;
5264
DartPlatform.register('ddc', [
5365
..._coreLibraries,
5466
..._additionalWebLibraries,

build_web_compilers/pubspec.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ dev_dependencies:
3535
d:
3636
path: test/fixtures/d
3737
dart_flutter_team_lints: ^3.1.0
38+
file: ^7.0.1
3839
test: ^1.16.0
3940
yaml: ^3.1.0
4041

build_web_compilers/test/dart2js_bootstrap_test.dart

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import 'package:logging/logging.dart';
1212
import 'package:test/test.dart';
1313

1414
void main() {
15+
initializePlatforms();
1516
final platform = dart2jsPlatform;
1617

1718
late StreamSubscription<LogRecord> logSubscription;
@@ -142,4 +143,93 @@ void main() {
142143
outputs: expectedOutputs,
143144
);
144145
});
146+
147+
test('throws on unsupported platform library imports', () async {
148+
final assets = {
149+
'a|lib/index.dart': '''
150+
import 'dart:io';
151+
main() {
152+
print('hello world');
153+
}
154+
''',
155+
};
156+
final expectedOutputs = {
157+
'a|lib/.dart2js.meta_module.clean': isNotNull,
158+
'a|lib/.dart2js.meta_module.raw': isNotNull,
159+
'a|lib/index.dart2js.module': isNotNull,
160+
'a|lib/index.module.library': isNotNull,
161+
};
162+
final logs = <LogRecord>[];
163+
await testBuilders(
164+
[
165+
const ModuleLibraryBuilder(),
166+
MetaModuleBuilder(platform),
167+
MetaModuleCleanBuilder(platform),
168+
ModuleBuilder(platform),
169+
WebEntrypointBuilder.fromOptions(
170+
const BuilderOptions({
171+
'compiler': 'dart2js',
172+
'native_null_assertions': false,
173+
}),
174+
),
175+
],
176+
assets,
177+
outputs: expectedOutputs,
178+
onLog: logs.add,
179+
);
180+
expect(
181+
logs,
182+
contains(
183+
isA<LogRecord>().having(
184+
(r) => r.message,
185+
'message',
186+
contains(
187+
'Skipping compiling a|lib/index.dart with dart2js because some of '
188+
'its\ntransitive libraries have sdk dependencies that are not '
189+
'supported on this platform:\n\na|lib/index.dart',
190+
),
191+
),
192+
),
193+
);
194+
});
195+
196+
test(
197+
'ignores unsupported platform library imports when silence flag is set',
198+
() async {
199+
final assets = {
200+
'a|lib/index.dart': '''
201+
import 'dart:io';
202+
main() {
203+
print('hello world');
204+
}
205+
''',
206+
};
207+
final expectedOutputs = {
208+
'a|lib/.dart2js.meta_module.clean': isNotNull,
209+
'a|lib/.dart2js.meta_module.raw': isNotNull,
210+
'a|lib/index.dart.js.map': isNotNull,
211+
'a|lib/index.dart.js.tar.gz': isNotNull,
212+
'a|lib/index.dart.js': decodedMatches(contains('world')),
213+
'a|lib/index.dart2js.module': isNotNull,
214+
'a|lib/index.module.library': isNotNull,
215+
};
216+
await testBuilders(
217+
[
218+
const ModuleLibraryBuilder(),
219+
MetaModuleBuilder(platform),
220+
MetaModuleCleanBuilder(platform),
221+
ModuleBuilder(platform),
222+
WebEntrypointBuilder.fromOptions(
223+
const BuilderOptions({
224+
'compiler': 'dart2js',
225+
'native_null_assertions': false,
226+
'silence_unsupported_modules_warnings': true,
227+
}),
228+
),
229+
],
230+
assets,
231+
outputs: expectedOutputs,
232+
);
233+
},
234+
);
145235
}

build_web_compilers/test/dart2wasm_bootstrap_test.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:build_web_compilers/build_web_compilers.dart';
99
import 'package:test/test.dart';
1010

1111
void main() {
12+
initializePlatforms();
1213
final startingAssets = {
1314
'a|web/index.dart': '''
1415
void main() {

build_web_compilers/test/dev_compiler_bootstrap_test.dart

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'dart:io';
6+
57
import 'package:build/build.dart';
68
import 'package:build_modules/build_modules.dart';
79
import 'package:build_test/build_test.dart';
810
import 'package:build_web_compilers/build_web_compilers.dart';
911
import 'package:build_web_compilers/builders.dart';
12+
import 'package:file/memory.dart';
1013
import 'package:test/test.dart';
1114

1215
void main() {
16+
initializePlatforms();
1317
final startingBuilders = {
1418
// Uses the real sdk copy builder to copy required files from the SDK.
1519
sdkJsCopyRequirejs(const BuilderOptions({})),
@@ -253,5 +257,27 @@ void main() {
253257
};
254258
await testBuilder(builder, sdkAssets, outputs: expectedOutputs);
255259
});
260+
261+
test('can use prebuilt sdk from path', () async {
262+
final builder = sdkJsCompile(
263+
const BuilderOptions({'use-prebuilt-sdk-from-path': 'path/to/sdk'}),
264+
);
265+
final sdkAssets = <String, Object>{'build_web_compilers|fake.txt': ''};
266+
final expectedOutputs = {
267+
'build_web_compilers|lib/src/dev_compiler/dart_sdk.js': decodedMatches(
268+
'prebuilt-sdk',
269+
),
270+
'build_web_compilers|lib/src/dev_compiler/dart_sdk.js.map':
271+
decodedMatches('prebuilt-sdk-map'),
272+
};
273+
final fs = MemoryFileSystem();
274+
fs.directory('path/to/sdk')
275+
..createSync(recursive: true)
276+
..childFile('dart_sdk.js').writeAsStringSync('prebuilt-sdk')
277+
..childFile('dart_sdk.js.map').writeAsStringSync('prebuilt-sdk-map');
278+
await IOOverrides.runZoned(createFile: fs.file, () async {
279+
await testBuilder(builder, sdkAssets, outputs: expectedOutputs);
280+
});
281+
});
256282
});
257283
}

build_web_compilers/test/dev_compiler_builder_test.dart

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import 'package:logging/logging.dart';
1111
import 'package:test/test.dart';
1212

1313
void main() {
14+
initializePlatforms();
15+
1416
group('error free project', () {
1517
final startingAssets = {
1618
'a|lib/a.dart': r'''

0 commit comments

Comments
 (0)