Fix bug in MemoryFileSystemEntity.resolveSymbolicLinks() (#57)
It was resolving absolute paths correctly, but then
returning the resolved path relative to the current
directory.
diff --git a/lib/src/backends/memory/memory_file_system_entity.dart b/lib/src/backends/memory/memory_file_system_entity.dart
index 0ca0c6d..b43a6dd 100644
--- a/lib/src/backends/memory/memory_file_system_entity.dart
+++ b/lib/src/backends/memory/memory_file_system_entity.dart
@@ -81,6 +81,9 @@
@override
String resolveSymbolicLinksSync() {
List<String> ledger = <String>[];
+ if (isAbsolute) {
+ ledger.add('');
+ }
_Node node = fileSystem._findNode(path,
pathWithSymlinks: ledger, followTailLink: true);
_checkExists(node, () => path);
diff --git a/test/common_tests.dart b/test/common_tests.dart
index 99ed345..2e9648e 100644
--- a/test/common_tests.dart
+++ b/test/common_tests.dart
@@ -172,6 +172,15 @@
expect(fs.currentDirectory.path, ns('/foo/bar'));
});
+ test('succeedsIfSetToAbsolutePathWhenCwdIsNotRoot', () {
+ fs.directory(ns('/foo/bar')).createSync(recursive: true);
+ fs.directory(ns('/baz/qux')).createSync(recursive: true);
+ fs.currentDirectory = ns('/foo/bar');
+ expect(fs.currentDirectory.path, ns('/foo/bar'));
+ fs.currentDirectory = fs.directory(ns('/baz/qux'));
+ expect(fs.currentDirectory.path, ns('/baz/qux'));
+ });
+
test('succeedsIfSetToParentDirectory', () {
fs.directory(ns('/foo')).createSync();
fs.currentDirectory = 'foo';
@@ -749,6 +758,13 @@
fs.directory('baz').resolveSymbolicLinksSync(), ns('/foo/bar'));
});
+ test('resolvesAbsolutePathsAbsolutely', () {
+ fs.directory(ns('/foo/bar')).createSync(recursive: true);
+ fs.currentDirectory = ns('/foo');
+ expect(fs.directory(ns('/foo/bar')).resolveSymbolicLinksSync(),
+ ns('/foo/bar'));
+ });
+
test('handlesRelativeLinks', () {
fs.directory(ns('/foo/bar/baz')).createSync(recursive: true);
fs.link(ns('/foo/qux')).createSync('bar/baz');