blob: 1a4480014450946eb44bd57d4982d6ac946ba7a7 [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.
/// Check that relative URIs are resolved against the canonical name of a
/// library. This only matters for dart:-libraries, so this test mocks up two
/// dart:-libraries.
import "dart:io";
import "dart:async";
import "memory_source_file_helper.dart";
import "package:async_helper/async_helper.dart";
import 'package:expect/expect.dart' show
Expect;
import 'package:compiler/src/elements/elements.dart' show
LibraryElement;
import 'package:compiler/src/dart2jslib.dart' show
MessageKind,
NullSink;
import 'package:_internal/libraries.dart' show
DART2JS_PLATFORM,
LibraryInfo;
const LibraryInfo mock1LibraryInfo = const LibraryInfo(
"mock1.dart",
category: "Shared",
documented: false,
platforms: DART2JS_PLATFORM);
const LibraryInfo mock2LibraryInfo = const LibraryInfo(
"mock2.dart",
category: "Shared",
documented: false,
platforms: DART2JS_PLATFORM);
class CustomCompiler extends Compiler {
final Map<String, LibraryInfo> customLibraryInfo;
CustomCompiler(
this.customLibraryInfo,
provider,
outputProvider,
handler,
libraryRoot,
packageRoot,
options,
environment)
: super(
provider,
outputProvider,
handler,
libraryRoot,
packageRoot,
options,
environment);
LibraryInfo lookupLibraryInfo(String name) {
if (name == "m_o_c_k_1") return mock1LibraryInfo;
if (name == "m_o_c_k_2") return mock2LibraryInfo;
return super.lookupLibraryInfo(name);
}
}
main() {
Uri sdkRoot = Uri.base.resolve("sdk/");
Uri packageRoot = Uri.base.resolve(Platform.packageRoot);
var provider = new MemorySourceFileProvider(MEMORY_SOURCE_FILES);
var handler = new FormattingDiagnosticHandler(provider);
outputProvider(String name, String extension) {
if (name != '') throw 'Attempt to output file "$name.$extension"';
return new NullSink('$name.$extension');
}
Future wrappedProvider(Uri uri) {
if (uri == sdkRoot.resolve('lib/mock1.dart')) {
return provider.readStringFromUri(Uri.parse('memory:mock1.dart'));
}
if (uri == sdkRoot.resolve('lib/mock2.dart')) {
return provider.readStringFromUri(Uri.parse('memory:mock2.dart'));
}
return provider.readStringFromUri(uri);
}
String expectedMessage =
MessageKind.LIBRARY_NOT_FOUND.message(
{'resolvedUri': 'dart:mock2.dart'}).computeMessage();
int actualMessageCount = 0;
wrappedHandler(
Uri uri, int begin, int end, String message, kind) {
if (message == expectedMessage) {
actualMessageCount++;
} else {
return handler(uri, begin, end, message, kind);
}
}
checkLibrary(LibraryElement library) {
Expect.equals(1, actualMessageCount);
}
Compiler compiler = new CustomCompiler(
{},
wrappedProvider,
outputProvider,
wrappedHandler,
sdkRoot,
packageRoot,
[],
{});
asyncStart();
compiler.libraryLoader.loadLibrary(Uri.parse("dart:m_o_c_k_1"))
.then(checkLibrary)
.then(asyncSuccess);
}
const Map MEMORY_SOURCE_FILES = const {
"mock1.dart": "library mock1; import 'mock2.dart';",
"mock2.dart": "library mock2;",
};