// 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. // Test that options '--source-map' and '--out' correctly adds // `sourceMappingURL` and "file" attributes to source file and source map file. library test.source_map; import 'package:compiler/compiler_api.dart' as api; import 'package:expect/async_helper.dart'; import 'package:expect/expect.dart'; import 'package:compiler/src/util/memory_compiler.dart'; const SOURCE = const { '/main.dart': """ main() {} """, }; void find(String text, String substring, bool expected) { bool found = text.contains(substring); if (expected && !found) { Expect.isTrue(found, 'Expected "$substring" in:\n$text'); } if (!expected && found) { Expect.isFalse( found, 'Unexpected "$substring" in:\n' '${text.substring(text.indexOf(substring))}', ); } } test({String? out, String? sourceMap, String? mapping, String? file}) async { OutputCollector collector = OutputCollector(); List options = []; if (out != null) { options.add("--out=$out"); } if (sourceMap != null) { options.add("--source-map=$sourceMap"); } await runCompiler( entryPoint: Uri.parse('memory:/main.dart'), memorySourceFiles: SOURCE, showDiagnostics: true, outputProvider: collector, options: options, ); String? jsOutput = collector.getOutput('', api.OutputType.js); Expect.isNotNull(jsOutput); if (mapping != null) { find(jsOutput!, '//# sourceMappingURL=$mapping', true); } else { find(jsOutput!, '//# sourceMappingURL=', false); } String? jsSourceMapOutput = collector.getOutput('', api.OutputType.sourceMap); Expect.isNotNull(jsSourceMapOutput); if (file != null) { find(jsSourceMapOutput!, '"file": "$file"', true); } else { find(jsSourceMapOutput!, '"file": ', false); } } void main() { asyncTest(() async { await test(); await test(sourceMap: 'file:/out.js.map'); await test(out: 'file:/out.js'); await test( out: 'file:/out.js', sourceMap: 'file:/out.js.map', file: 'out.js', mapping: 'out.js.map', ); await test( out: 'file:/dir/out.js', sourceMap: 'file:/dir/out.js.map', file: 'out.js', mapping: 'out.js.map', ); }); }