#region CPL License /* Nuclex Framework Copyright (C) 2002-2009 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #endregion using System; using System.IO; #if UNITTEST using NUnit.Framework; using NUnit.Framework.SyntaxHelpers; namespace Nuclex.Support { /// Unit Test for the path helper class [TestFixture] public class PathHelperTest { /// /// Tests whether the relative path creator keeps the absolute path if /// the location being passed is not relative to the base path. /// [Test] public void TestRelativeWindowsPathOfNonRelativePath() { Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2"), platformify("D:/Folder1/Folder2") ), Is.EqualTo(platformify("D:/Folder1/Folder2")) ); Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2/"), platformify("D:/Folder1/Folder2/") ), Is.EqualTo(platformify("D:/Folder1/Folder2/")) ); } /// /// Tests whether the relative path creator correctly builds the relative /// path to the parent folder of the base path for windows paths. /// [Test] public void TestRelativeWindowsPathToParentFolder() { Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2"), platformify("C:/Folder1") ), Is.EqualTo(platformify("..")) ); Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2/"), platformify("C:/Folder1/") ), Is.EqualTo(platformify("../")) ); } /// /// Tests whether the relative path creator correctly builds the relative path to /// the parent folder of the base path for windows paths with more than one level. /// [Test] public void TestRelativeWindowsPathToParentFolderTwoLevels() { Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2/Folder3"), platformify("C:/Folder1") ), Is.EqualTo(platformify("../..")) ); Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2/Folder3/"), platformify("C:/Folder1/") ), Is.EqualTo(platformify("../../")) ); } /// /// Tests whether the relative path creator correctly builds the relative /// path to the parent folder of the base path for unix paths. /// [Test] public void TestRelativeUnixPathToParentFolder() { Assert.That( PathHelper.MakeRelative( platformify("/Folder1/Folder2"), platformify("/Folder1") ), Is.EqualTo(platformify("..")) ); Assert.That( PathHelper.MakeRelative( platformify("/Folder1/Folder2/"), platformify("/Folder1/") ), Is.EqualTo(platformify("../")) ); } /// /// Tests whether the relative path creator correctly builds the relative path to /// the parent folder of the base path for unix paths with more than one level. /// [Test] public void TestRelativeUnixPathToParentFolderTwoLevels() { Assert.That( PathHelper.MakeRelative( platformify("/Folder1/Folder2/Folder3"), platformify("/Folder1") ), Is.EqualTo(platformify("../..")) ); Assert.That( PathHelper.MakeRelative( platformify("/Folder1/Folder2/Folder3/"), platformify("/Folder1/") ), Is.EqualTo(platformify("../../")) ); } /// /// Tests whether the relative path creator correctly builds the relative /// path to a nested folder in the base path for windows paths. /// [Test] public void TestRelativeWindowsPathToNestedFolder() { Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1"), platformify("C:/Folder1/Folder2") ), Is.EqualTo(platformify("Folder2")) ); Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/"), platformify("C:/Folder1/Folder2/") ), Is.EqualTo(platformify("Folder2/")) ); } /// /// Tests whether the relative path creator correctly builds the relative /// path to a nested folder in the base path for unix paths. /// [Test] public void TestRelativeUnixPathToNestedFolder() { Assert.That( PathHelper.MakeRelative( platformify("/Folder1"), platformify("/Folder1/Folder2") ), Is.EqualTo(platformify("Folder2")) ); Assert.That( PathHelper.MakeRelative( platformify("/Folder1/"), platformify("/Folder1/Folder2/") ), Is.EqualTo(platformify("Folder2/")) ); } /// /// Tests whether the relative path creator correctly builds the relative /// path to another folder on the same level as base path for windows paths. /// [Test] public void TestRelativeWindowsPathToSiblingFolder() { Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2/"), platformify("C:/Folder1/Folder2345") ), Is.EqualTo(platformify("../Folder2345")) ); Assert.That( PathHelper.MakeRelative( platformify("C:/Folder1/Folder2345/"), platformify("C:/Folder1/Folder2") ), Is.EqualTo(platformify("../Folder2")) ); } /// /// Tests whether the relative path creator correctly builds the relative /// path to another folder on the same level as base path for unix paths. /// [Test] public void TestRelativeUnixPathToSiblingFolder() { Assert.That( PathHelper.MakeRelative( platformify("/Folder1/Folder2/"), platformify("/Folder1/Folder2345") ), Is.EqualTo(platformify("../Folder2345")) ); Assert.That( PathHelper.MakeRelative( platformify("/Folder1/Folder2345/"), platformify("/Folder1/Folder2") ), Is.EqualTo(platformify("../Folder2")) ); } /// /// Converts unix-style directory separators into the format used by the current platform /// /// Path to converts into the platform-dependent format /// Platform-specific version of the provided unix-style path private string platformify(string path) { return path.Replace('/', Path.DirectorySeparatorChar); } } } // namespace Nuclex.Support #endif // UNITTEST