| // Copyright (c) 2012, 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. |
| |
| // Tests that the dart2js compiler can be run in a js engine. This ensures that |
| // the internal compiler APIs have no dependency on dart:io. |
| library dummy_compiler; |
| |
| import 'dart:async'; |
| |
| import 'package:async_helper/async_helper.dart'; |
| import 'package:compiler/compiler.dart'; |
| |
| import 'mock_libraries.dart'; |
| |
| String libProvider(Uri uri) { |
| if (uri.path.endsWith(".platform")) { |
| return DEFAULT_PLATFORM_CONFIG; |
| } |
| if (uri.path.endsWith("/core.dart")) { |
| return buildLibrarySource(DEFAULT_CORE_LIBRARY); |
| } else if (uri.path.endsWith('core_patch.dart')) { |
| return DEFAULT_PATCH_CORE_SOURCE; |
| } else if (uri.path.endsWith('internal.dart')) { |
| return buildLibrarySource(DEFAULT_INTERNAL_LIBRARY); |
| } else if (uri.path.endsWith('interceptors.dart')) { |
| return buildLibrarySource(DEFAULT_INTERCEPTORS_LIBRARY); |
| } else if (uri.path.endsWith('js_helper.dart')) { |
| return buildLibrarySource(DEFAULT_JS_HELPER_LIBRARY); |
| } else if (uri.path.endsWith('/async.dart')) { |
| return buildLibrarySource(DEFAULT_ASYNC_LIBRARY); |
| } else { |
| return "library lib${uri.path.replaceAll('/', '.')};"; |
| } |
| } |
| |
| Future<String> provider(Uri uri) { |
| String source; |
| if (uri.scheme == "main") { |
| source = "main() {}"; |
| } else if (uri.scheme == "lib") { |
| source = libProvider(uri); |
| } else { |
| throw "unexpected URI $uri"; |
| } |
| return new Future.value(source); |
| } |
| |
| void handler(Uri uri, int begin, int end, String message, Diagnostic kind) { |
| if (uri == null) { |
| print('$kind: $message'); |
| } else { |
| print('$uri:$begin:$end: $kind: $message'); |
| } |
| } |
| |
| main() { |
| asyncStart(); |
| Future<CompilationResult> result = compile(new Uri(scheme: 'main'), |
| new Uri(scheme: 'lib', path: '/'), provider, handler); |
| result.then((CompilationResult result) { |
| if (!result.isSuccess) { |
| throw 'Compilation failed'; |
| } |
| }, onError: (e, s) { |
| throw 'Compilation failed: $e\n$s'; |
| }).then(asyncSuccess); |
| } |