blob: c42aa55b22e3cd0c162fa3f59fc1d3c05df01de3 [file] [log] [blame]
// Copyright (c) 2013, 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 tree-shaking hasn't been turned off.
import 'package:expect/expect.dart';
import "package:async_helper/async_helper.dart";
import 'memory_source_file_helper.dart';
import 'package:compiler/implementation/dart2jslib.dart'
show NullSink;
import 'package:compiler/compiler.dart'
show Diagnostic;
import 'dart:async';
import 'package:compiler/implementation/js_backend/js_backend.dart'
show JavaScriptBackend;
main() {
Uri script = currentDirectory.resolveUri(Platform.script);
Uri libraryRoot = script.resolve('../../../sdk/');
Uri packageRoot = script.resolve('./packages/');
var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
void diagnosticHandler(Uri uri, int begin, int end,
String message, Diagnostic kind) {
if (kind == Diagnostic.VERBOSE_INFO
|| kind == Diagnostic.WARNING
|| kind == Diagnostic.HINT) {
return;
}
throw '$uri:$begin:$end:$message:$kind';
}
EventSink<String> outputProvider(String name, String extension) {
return new NullSink('$name.$extension');
}
Compiler compiler = new Compiler(provider.readStringFromUri,
outputProvider,
diagnosticHandler,
libraryRoot,
packageRoot,
[],
{});
asyncTest(() => compiler.run(Uri.parse('memory:main.dart')).then((_) {
Expect.isFalse(compiler.compilationFailed);
Expect.isFalse(compiler.enqueuer.resolution.hasEnqueuedReflectiveElements);
Expect.isFalse(compiler.enqueuer.resolution.hasEnqueuedReflectiveStaticFields);
Expect.isFalse(compiler.enqueuer.codegen.hasEnqueuedReflectiveElements);
Expect.isFalse(compiler.enqueuer.codegen.hasEnqueuedReflectiveStaticFields);
Expect.isFalse(compiler.disableTypeInference);
JavaScriptBackend backend = compiler.backend;
Expect.isFalse(backend.hasRetainedMetadata);
}));
}
const Map MEMORY_SOURCE_FILES = const {
'main.dart': r"""
import 'dart:mirrors';
class Foo {
noSuchMethod(invocation) {
print('Invoked ${MirrorSystem.getName(invocation.memberName)}');
return reflect('foobar').delegate(invocation);
}
}
void main() {
print(new Foo().substring(3));
}
""",
};