| // 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<String> options = <String>[]; |
| 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'); |
| }); |
| } |