using System.Linq; using Xunit; namespace Wabbajack.Paths.Test { public class RelativePathTests { [Fact] public void CanReplaceExtensions() { Assert.Equal(new Extension(".dds"), ((RelativePath)@"foo\bar.dds").Extension); Assert.Equal((RelativePath)@"foo\bar.zip", ((RelativePath)@"foo\bar.dds").ReplaceExtension(new Extension(".zip"))); Assert.NotEqual((RelativePath)@"foo\bar\z.zip", ((RelativePath)@"foo\bar.dds").ReplaceExtension(new Extension(".zip"))); Assert.Equal((RelativePath)@"foo\bar.zip", ((RelativePath)@"foo\bar").ReplaceExtension(new Extension(".zip"))); } [Fact] public void PathsAreValidated() { Assert.Throws(() => @"c:\foo".ToRelativePath()); } [Fact] public void CanCreatePathsRelativeTo() { Assert.Equal((AbsolutePath)@"c:\foo\bar\baz.zip", ((RelativePath)@"baz.zip").RelativeTo((AbsolutePath)@"c:\foo\bar")); } [Fact] public void ObjectMethods() { Assert.Equal(@"foo\bar", ((RelativePath)@"foo\bar").ToString()); Assert.Equal((RelativePath)@"foo\bar", (RelativePath)@"foo/bar"); Assert.NotEqual((RelativePath)@"foo\bar", (object)42); Assert.True((RelativePath)@"foo\bar" == (RelativePath)@"foo/bar"); Assert.True((RelativePath)@"foo\bar" != (RelativePath)@"foo/baz"); Assert.Equal(((RelativePath)@"foo\bar").GetHashCode(), ((RelativePath)@"Foo\bar").GetHashCode()); } [Fact] public void CanGetPathHashCodes() { Assert.Equal(@"foo\bar.baz".ToRelativePath().GetHashCode(), @"Foo\Bar.bAz".ToRelativePath().GetHashCode()); } [Fact] public void CaseInsensitiveEquality() { Assert.Equal(@"foo\bar.baz".ToRelativePath(), @"Foo\Bar.bAz".ToRelativePath()); Assert.NotEqual(@"foo\bar.baz".ToRelativePath(), (object)42); } [Fact] public void CanGetFilenameFromRelativePath() { Assert.Equal((RelativePath)"bar.dds", @"foo\bar.dds".ToRelativePath().FileName); } [Fact] public void PathsAreComparable() { var data = new[] { (RelativePath)@"a", (RelativePath)@"b\c", (RelativePath)@"d\e\f", (RelativePath)@"b" }; var data2 = data.OrderBy(a => a).ToArray(); var data3 = new[] { (RelativePath)@"a", (RelativePath)@"b", (RelativePath)@"b\c", (RelativePath)@"d\e\f" }; Assert.Equal(data3, data2); } } }