public void GraftingDuplicateQualifiedPath_RecordsDuplicateGraft() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); builder.AddNamedRoot("Root", root); builder.AddGraftPoint(root, "Child", builder.CreateNode(@"C:\Other\A", FileSystemCasing.CasePreservingInsensitive)); var error = builder.AddGraftPoint(root, "Child", builder.CreateNode(@"C:\Other\B", FileSystemCasing.CasePreservingInsensitive)); Assert.That(error, Is.InstanceOf <DuplicateGraftDeclaration>()); Assert.That(builder.Errors, Is.EquivalentTo(new [] { error })); }
public void GraftingLocalRoot_ContainedByExistingGraftedLocalRoot_RecordsOverlappingLocalRoot() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); builder.AddNamedRoot("Root", root); builder.AddGraftPoint(root, "A", builder.CreateNode(@"C:\Other", FileSystemCasing.CasePreservingInsensitive)); var error = builder.AddGraftPoint(root, "B", builder.CreateNode(@"C:\Other\Child", FileSystemCasing.CasePreservingInsensitive)); Assert.That(error, Is.InstanceOf <OverlappingLocalRootDeclaration>()); Assert.That(builder.Errors, Is.EquivalentTo(new [] { error })); }
public void GraftingOntoUndeclaredParent_ThrowsInvalidOperationException() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); Assert.Throws <InvalidOperationException>(() => builder.AddGraftPoint(root, "Child", builder.CreateNode(@"C:\Other\A", FileSystemCasing.CasePreservingInsensitive))); }
public void DoesNotResolveQualifiedPathInRoot_UnderGraftPoint() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); builder.AddNamedRoot("Root", root); builder.AddGraftPoint(root, "Graft", builder.CreateNode(@"C:\Other", FileSystemCasing.CasePreservingInsensitive)); var storage = builder.BuildHierarchies(); Assert.That(storage.TryResolveQualifiedPath(@"C:\root\Graft\some\filepath.txt", out _), Is.False); }
public void GraftingLocalRoot_OntoParentWithDifferingCasingRules_RecordsFileSystemCasingConflict() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); builder.AddNamedRoot("Root", root); var error = builder.AddGraftPoint(root, "Child", builder.CreateNode(@"C:\Other", FileSystemCasing.CaseSensitive)); Assert.That(error, Is.InstanceOf <FileSystemCasingConflict>()); Assert.That(builder.Errors, Is.EquivalentTo(new [] { error })); }
public void RoundtripsQualifiedPathInGraft_BelongingToRoot() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); builder.AddNamedRoot("Root", root); var grafted = builder.CreateNode(@"C:\Other", FileSystemCasing.CasePreservingInsensitive); builder.AddGraftPoint(root, "Graft", grafted); var storage = builder.BuildHierarchies(); Assert.That(storage.TryResolveQualifiedPath(@"C:\Other\some\filepath.txt", out var qualifiedPath), Is.True); Assert.That(qualifiedPath, Is.EqualTo(new QualifiedPath(grafted, RelativePath.CreateFromSegments("some", "filepath.txt"))) .Using(default(QualifiedPath.DefaultEqualityComparer))); Assert.That(storage.ResolveToFile(qualifiedPath)?.FullName, Is.EqualTo(@"C:\Other\some\filepath.txt")); }
public void RoundtripsAbstractPathInGraft_BelongingToRoot() { var builder = new StorageHierarchiesBuilder(new StubFileSystemApi()); var root = builder.CreateNode(@"C:\Root", FileSystemCasing.CasePreservingInsensitive); builder.AddNamedRoot("Root", root); var grafted = builder.CreateNode(@"C:\Other", FileSystemCasing.CasePreservingInsensitive); builder.AddGraftPoint(root, "Graft", grafted); var storage = builder.BuildHierarchies(); var qualifiedPath = new QualifiedPath(grafted, RelativePath.CreateFromSegments("some", "filepath.txt")); var expectedAbstractPath = new AbstractPath(storage.NamedRoots.Single(), RelativePath.CreateFromSegments("Graft", "some", "filepath.txt")); var abstractPath = storage.MapToAbstractPath(qualifiedPath); Assert.That(abstractPath, Is.EqualTo(expectedAbstractPath).Using(default(AbstractPath.DefaultEqualityComparer))); Assert.That(storage.MapFromAbstractPath(abstractPath), Is.EqualTo(qualifiedPath) .Using(default(QualifiedPath.DefaultEqualityComparer))); }