diff --git a/src/test/Fake.Core.UnitTests/Fake.DotNet.Xdt.fs b/src/test/Fake.Core.UnitTests/Fake.DotNet.Xdt.fs index ccfe7a58e81..c97fa8ff81b 100644 --- a/src/test/Fake.Core.UnitTests/Fake.DotNet.Xdt.fs +++ b/src/test/Fake.Core.UnitTests/Fake.DotNet.Xdt.fs @@ -6,80 +6,94 @@ open System.Text open Fake.DotNet open Fake.IO open Expecto +open Fake.SystemHelper module TestData = - let fileName file = + let testFilePath file = Path.Combine(__SOURCE_DIRECTORY__, "TestFiles", "Fake.DotNet.Xdt.Files", file) let replaceNewLines text = RegularExpressions.Regex.Replace(text, @"\r\n?|\n", Environment.NewLine) let exists file = - File.Exists(fileName file) + File.Exists(file) let require file = if not (exists file) then invalidArg "file" (sprintf "Unable to read test data from %s" - (Path.GetFullPath(fileName file))) + (Path.GetFullPath(file))) let read file = require file - File.ReadAllText(fileName file, Encoding.UTF8) + File.ReadAllText(file, Encoding.UTF8) |> replaceNewLines let copy source dest = require source - File.Copy(fileName source, fileName dest, true) + File.Copy(source, dest, true) let delete file = - File.Delete(fileName file) + File.Delete(file) + + let withTestDir f = + let tempFolder = Path.GetTempFileName() + File.Delete(tempFolder) + Directory.CreateDirectory(tempFolder) + |> ignore + try + f tempFolder + finally + try + Directory.Delete(tempFolder, true) + with + | :? DirectoryNotFoundException -> () + +open Fake.IO.FileSystemOperators [] let tests = + let configFile = TestData.testFilePath "web.config" + let testTransformFile = TestData.testFilePath "web.test.config" + let expectedTransformed = TestData.testFilePath "web.transformed.config" testList "Fake.DotNet.Xdt.Tests" [ test "when transforming file explicitly" { - let testFile = "web.new.config" - try - let expected = TestData.read "web.transformed.config" - Xdt.transformFile (TestData.fileName "web.config") - (TestData.fileName "web.test.config") - (TestData.fileName testFile) + TestData.withTestDir (fun dir -> + let testFile = dir "web.new.config" + let expected = TestData.read expectedTransformed + Xdt.transformFile configFile + testTransformFile + testFile let actual = TestData.read testFile Expect.equal actual expected "Expected the transformed file to match" - finally - TestData.delete testFile + ) } test "when transforming file with config name" { - let confFile = "web.transformFile.config" - let testFile = "web.transformFile.test.config" - try - let expected = TestData.read "web.transformed.config" - TestData.copy "web.config" confFile - TestData.copy "web.test.config" testFile - Xdt.transformFileWithConfigName "test" (TestData.fileName confFile) + TestData.withTestDir (fun dir -> + let confFile = dir "web.transformFile.config" + let testFile = dir "web.transformFile.test.config" + let expected = TestData.read expectedTransformed + TestData.copy configFile confFile + TestData.copy testTransformFile testFile + Xdt.transformFileWithConfigName "test" confFile let actual = TestData.read confFile Expect.equal actual expected "Expected the transformed file to match" - finally - TestData.delete confFile - TestData.delete testFile + ) } test "when transforming files with config name" { - let confFile = "web.transformFiles.config" - let testFile = "web.transformFiles.test.config" - try - let expected = TestData.read "web.transformed.config" - TestData.copy "web.config" confFile - TestData.copy "web.test.config" testFile + TestData.withTestDir (fun dir -> + let confFile = dir "web.transformFiles.config" + let testFile = dir "web.transformFiles.test.config" + let expected = TestData.read expectedTransformed + TestData.copy configFile confFile + TestData.copy testTransformFile testFile let files = - GlobbingPattern.create confFile - |> GlobbingPattern.setBaseDir (Path.Combine(__SOURCE_DIRECTORY__, "TestFiles", "Fake.DotNet.Xdt.Files")) + GlobbingPattern.create "web.transformFiles.config" + |> GlobbingPattern.setBaseDir (dir) Xdt.transformFilesWithConfigName "test" files let actual = TestData.read confFile Expect.equal actual expected "Expected the transformed file to match" - finally - TestData.delete confFile - TestData.delete testFile + ) } ]