public void ResolveRelativePath_should_return_expected_values() { ForTest.Scenarios ( new { Base = @"C:\SourceCode\sparky-test-helpers\.vs\SparkyTestHelpers\lut\0\t\SparkyTestHelpers.Xml.UnitTests\bin\Debug", Relative = "../../../../../../../../app.transform1.config", Expected = @"C:\SourceCode\sparky-test-helpers\app.transform1.config" }, new { Base = @"c:\folder\subfolder", Relative = @"something\web.config", Expected = @"c:\folder\subfolder\something\web.config" }, new { Base = @"c:\folder\subfolder", Relative = @"/something/web.config", Expected = @"c:\something\web.config" }, // Can use either forward or backward slashes: new { Base = @"c:\folder\subfolder", Relative = @"../../something/web.config", Expected = @"c:\something\web.config" }, new { Base = @"c:\folder\subfolder", Relative = @"..\..\something\web.config", Expected = @"c:\something\web.config" }, new { Base = @"c:\folder\subfolder", Relative = @"../something\web.config", Expected = @"c:\folder\something\web.config" }, new { Base = @"c:\folder\subfolder", Relative = @"..\something\web.config", Expected = @"c:\folder\something\web.config" }, // Full path ignores base: new { Base = @"c:\folder\subfolder", Relative = @"c:\different\subDifferent\web.config", Expected = @"c:\different\subDifferent\web.config" } ) .TestEach(scenario => Assert.AreEqual( scenario.Expected.ToLowerInvariant(), XmlTransformer.ResolveRelativePath(scenario.Base, scenario.Relative).ToLowerInvariant())); }