// 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 options '--source-map' and '--out' correctly adds // `sourceMappingURL` and "file" attributes to source file and source map file. library test.source_map; import 'package:async_helper/async_helper.dart'; import 'package:compiler/compiler_new.dart'; import 'package:expect/expect.dart'; import '../helpers/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 = new 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('', OutputType.js); Expect.isNotNull(jsOutput); if (mapping != null) { find(jsOutput, '//# sourceMappingURL=$mapping', true); } else { find(jsOutput, '//# sourceMappingURL=', false); } String jsSourceMapOutput = collector.getOutput('', 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'); }); }