blob: 4302187917bf947bc916c35f7cc9043633eb7439 [file] [log] [blame]
// Copyright (c) 2015, 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.
library package_config.parse_write_test;
import "package:package_config/packages_file.dart";
import "package:test/test.dart";
main() {
testBase(baseDirString) {
var baseDir = Uri.parse(baseDirString);
group("${baseDir.scheme} base", () {
Uri packagesFile = baseDir.resolve(".packages");
roundTripTest(String name, Map<String, Uri> map) {
group(name, () {
test("write with no baseUri", () {
var content = writeToString(map).codeUnits;
var resultMap = parse(content, packagesFile);
expect(resultMap, map);
test("write with base directory", () {
var content = writeToString(map, baseUri: baseDir).codeUnits;
var resultMap = parse(content, packagesFile);
expect(resultMap, map);
test("write with base .packages file", () {
var content = writeToString(map, baseUri: packagesFile).codeUnits;
var resultMap = parse(content, packagesFile);
expect(resultMap, map);
var lowerDir = baseDir.resolve("path3/path4/");
var higherDir = baseDir.resolve("../");
var parallelDir = baseDir.resolve("../path3/");
var rootDir = baseDir.resolve("/");
var fileDir = Uri.parse("file:///path1/part2/");
var httpDir = Uri.parse("");
var otherDir = Uri.parse("other:/path1/path2/");
roundTripTest("empty", {});
roundTripTest("lower directory", {"foo": lowerDir});
roundTripTest("higher directory", {"foo": higherDir});
roundTripTest("parallel directory", {"foo": parallelDir});
roundTripTest("same directory", {"foo": baseDir});
roundTripTest("root directory", {"foo": rootDir});
roundTripTest("file directory", {"foo": fileDir});
roundTripTest("http directory", {"foo": httpDir});
roundTripTest("other scheme directory", {"foo": otherDir});
roundTripTest("multiple same-type directories",
{"foo": lowerDir, "bar": higherDir, "baz": parallelDir});
roundTripTest("multiple scheme directories",
{"foo": fileDir, "bar": httpDir, "baz": otherDir});
roundTripTest("multiple scheme directories and mutliple same type", {
"foo": fileDir,
"bar": httpDir,
"baz": otherDir,
"qux": lowerDir,
"hip": higherDir,
"dep": parallelDir
// Check that writing adds the comment.
test("write preserves comment", () {
var comment = "comment line 1\ncomment line 2\ncomment line 3";
var result = writeToString({}, comment: comment);
// Comment with "# " before each line and "\n" after last.
var expectedComment =
"# comment line 1\n# comment line 2\n# comment line 3\n";
expect(result, startsWith(expectedComment));
String writeToString(Map<String, Uri> map, {Uri baseUri, String comment}) {
var buffer = new StringBuffer();
write(buffer, map, baseUri: baseUri, comment: comment);
return buffer.toString();