blob: aaf86cfa61841e463d3d8f46defd96db49b582bc [file] [log] [blame]
// 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:async_helper/async_helper.dart';
import 'package:compiler/compiler_new.dart';
import 'package:expect/expect.dart';
import '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');
});
}