diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 4259b8b..20cb18a 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -51,7 +51,7 @@ jobs: name: Unit tests upload if: ${{ failure() && steps.unit.conclusion == 'failure' }} with: - name: unit-tests-artifacts + name: unit-tests-artifacts-${{ matrix.os }} path: | test/unit/goldens @@ -63,7 +63,7 @@ jobs: name: Functional tests upload if: ${{ failure() && steps.functional.conclusion == 'failure' }} with: - name: functional-tests-artifacts + name: functional-tests-artifacts-${{ matrix.os }} path: | test/functional/goldens diff --git a/src/Pacer/Prelude.hs b/src/Pacer/Prelude.hs index 0f28bc3..5d517d8 100644 --- a/src/Pacer/Prelude.hs +++ b/src/Pacer/Prelude.hs @@ -92,6 +92,7 @@ module Pacer.Prelude currentOsStr, isPosix, posixWindowsStr, + posixWindowsOsPath, -- * Misc pattern SetToSeqNE, @@ -604,6 +605,12 @@ isPosix = case currentOs of Windows -> False _ -> True +posixWindowsOsPath :: OsPath +posixWindowsOsPath = + if isPosix + then [osp|posix|] + else [osp|windows|] + posixWindowsStr :: String posixWindowsStr = if isPosix diff --git a/test/unit/Unit/Pacer/Command/Chart/Params.hs b/test/unit/Unit/Pacer/Command/Chart/Params.hs index 72310b4..2a22d87 100644 --- a/test/unit/Unit/Pacer/Command/Chart/Params.hs +++ b/test/unit/Unit/Pacer/Command/Chart/Params.hs @@ -54,7 +54,7 @@ successTests = testEvolvePhaseCliPaths :: TestTree testEvolvePhaseCliPaths = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Uses CLI paths", testName = [osp|testEvolvePhaseCliPaths|], @@ -79,7 +79,7 @@ testEvolvePhaseCliPaths = testEvolvePhaseCliData :: TestTree testEvolvePhaseCliData = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Uses CLI data", testName = [osp|testEvolvePhaseCliData|], @@ -105,7 +105,7 @@ testEvolvePhaseCliData = testEvolvePhaseConfigPaths :: TestTree testEvolvePhaseConfigPaths = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Uses config paths", testName = [osp|testEvolvePhaseConfigPaths|], @@ -133,7 +133,7 @@ testEvolvePhaseConfigPaths = testEvolvePhaseConfigData :: TestTree testEvolvePhaseConfigData = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Uses config data", testName = [osp|testEvolvePhaseConfigData|], @@ -161,7 +161,7 @@ testEvolvePhaseConfigData = testEvolvePhaseXdgPaths :: TestTree testEvolvePhaseXdgPaths = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Uses xdg paths", testName = [osp|testEvolvePhaseXdgPaths|], @@ -200,7 +200,7 @@ failureTests = testEvolvePhaseCliPathsEx :: TestTree testEvolvePhaseCliPathsEx = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Exception for unknown CLI paths", testName = [osp|testEvolvePhaseCliPathsEx|], @@ -225,7 +225,7 @@ testEvolvePhaseCliPathsEx = testEvolvePhaseConfigPathsEx :: TestTree testEvolvePhaseConfigPathsEx = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Exception for unknown config paths", testName = [osp|testEvolvePhaseConfigPathsEx|], @@ -250,7 +250,7 @@ testEvolvePhaseConfigPathsEx = testEvolvePhaseMissingEx :: TestTree testEvolvePhaseMissingEx = - testGoldenParams + testGoldenParamsOs $ MkGoldenParams { testDesc = "Exception for missing paths", testName = [osp|testEvolvePhaseMissingEx|], @@ -287,17 +287,18 @@ runEvolvePhase xdg params mToml = do env = MkMockEnv { knownFiles = - Set.fromList - [ [osp|/root/cli-cr.toml|], - [osp|/root/cli-runs.toml|], - [osp|/root/cli-data/chart-requests.toml|], - [osp|/root/cli-data/runs.toml|], - [osp|/root/config-cr.toml|], - [osp|/root/config-runs.toml|], - [osp|/root/config-data/chart-requests.toml|], - [osp|/root/config-data/runs.toml|], - [osp|/root/xdg/config/pacer/chart-requests.toml|], - [osp|/root/xdg/config/pacer/runs.toml|] + Set.fromList $ + (root ) <$> + [ [ospPathSep|cli-cr.toml|], + [ospPathSep|cli-runs.toml|], + [ospPathSep|cli-data/chart-requests.toml|], + [ospPathSep|cli-data/runs.toml|], + [ospPathSep|config-cr.toml|], + [ospPathSep|config-runs.toml|], + [ospPathSep|config-data/chart-requests.toml|], + [ospPathSep|config-data/runs.toml|], + [ospPathSep|xdg/config/pacer/chart-requests.toml|], + [ospPathSep|xdg/config/pacer/runs.toml|] ], xdg } @@ -318,7 +319,7 @@ runPathReaderMock :: Eff (PathReader : es) a -> Eff es a runPathReaderMock = interpret_ $ \case - CanonicalizePath p -> pure $ [osp|/root|] p + CanonicalizePath p -> pure $ root p DoesFileExist p -> do knownFiles <- asks @MockEnv (.knownFiles) pure $ p `Set.member` knownFiles @@ -328,8 +329,8 @@ runPathReaderMock = interpret_ $ \case xdg <- asks @MockEnv (.xdg) pure $ if xdg - then [osp|/root/xdg/config|] p - else [osp|/root/bad_xdg/config|] p + then root [ospPathSep|xdg/config|] p + else root [ospPathSep|bad_xdg/config|] p _ -> error $ "runPathReaderMock: unexpected xdg type: " <> show d _ -> error $ "runPathReaderMock: unimplemented" @@ -343,3 +344,9 @@ goldenRunnerXdg xdg params toml = do -- displayInner over displayException since we do not want unstable -- callstacks in output. Left ex -> encodeUtf8 $ packText $ Ann.displayInner ex + +root :: OsPath +root = + if isPosix + then [osp|/root|] + else [osp|c:\\root|] diff --git a/test/unit/Unit/Prelude.hs b/test/unit/Unit/Prelude.hs index 93b09f6..b143127 100644 --- a/test/unit/Unit/Prelude.hs +++ b/test/unit/Unit/Prelude.hs @@ -17,6 +17,7 @@ module Unit.Prelude -- * Golden GoldenParams (..), testGoldenParams, + testGoldenParamsOs, -- * Parsing parseOrDie, @@ -181,6 +182,14 @@ data GoldenParams = MkGoldenParams runner :: IO ByteString } +testGoldenParamsOs :: GoldenParams -> TestTree +testGoldenParamsOs goldenParams = testGoldenParams goldenParams' + where + goldenParams' = + goldenParams + { testName = goldenParams.testName <> ([osp|_|] <> posixWindowsOsPath) + } + testGoldenParams :: GoldenParams -> TestTree testGoldenParams goldenParams = goldenVsFile goldenParams.testDesc goldenPath actualPath $ do diff --git a/test/unit/goldens/testEvolvePhaseCliData.golden b/test/unit/goldens/testEvolvePhaseCliData_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseCliData.golden rename to test/unit/goldens/testEvolvePhaseCliData_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseCliData_windows.golden b/test/unit/goldens/testEvolvePhaseCliData_windows.golden new file mode 100644 index 0000000..680ff7f --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseCliData_windows.golden @@ -0,0 +1,7 @@ +MkChartParams + { cleanInstall = False + , chartRequestsPath = "c:\\root\cli-data\chart-requests.toml" + , dataDir = () + , json = False + , runsPath = "c:\\root\cli-data\runs.toml" + } diff --git a/test/unit/goldens/testEvolvePhaseCliPathsEx.golden b/test/unit/goldens/testEvolvePhaseCliPathsEx_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseCliPathsEx.golden rename to test/unit/goldens/testEvolvePhaseCliPathsEx_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseCliPathsEx_windows.golden b/test/unit/goldens/testEvolvePhaseCliPathsEx_windows.golden new file mode 100644 index 0000000..9a6c565 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseCliPathsEx_windows.golden @@ -0,0 +1 @@ +File not found: c:\\root\bad_cr.toml diff --git a/test/unit/goldens/testEvolvePhaseCliPaths.golden b/test/unit/goldens/testEvolvePhaseCliPaths_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseCliPaths.golden rename to test/unit/goldens/testEvolvePhaseCliPaths_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseCliPaths_windows.golden b/test/unit/goldens/testEvolvePhaseCliPaths_windows.golden new file mode 100644 index 0000000..7ce1d79 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseCliPaths_windows.golden @@ -0,0 +1,7 @@ +MkChartParams + { cleanInstall = False + , chartRequestsPath = "c:\\root\cli-cr.toml" + , dataDir = () + , json = False + , runsPath = "c:\\root\cli-runs.toml" + } diff --git a/test/unit/goldens/testEvolvePhaseConfigData.golden b/test/unit/goldens/testEvolvePhaseConfigData_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseConfigData.golden rename to test/unit/goldens/testEvolvePhaseConfigData_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseConfigData_windows.golden b/test/unit/goldens/testEvolvePhaseConfigData_windows.golden new file mode 100644 index 0000000..94fde58 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseConfigData_windows.golden @@ -0,0 +1,7 @@ +MkChartParams + { cleanInstall = False + , chartRequestsPath = "c:\\root\config-data\chart-requests.toml" + , dataDir = () + , json = False + , runsPath = "c:\\root\config-data\runs.toml" + } diff --git a/test/unit/goldens/testEvolvePhaseConfigPathsEx.golden b/test/unit/goldens/testEvolvePhaseConfigPathsEx_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseConfigPathsEx.golden rename to test/unit/goldens/testEvolvePhaseConfigPathsEx_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseConfigPathsEx_windows.golden b/test/unit/goldens/testEvolvePhaseConfigPathsEx_windows.golden new file mode 100644 index 0000000..9c70f14 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseConfigPathsEx_windows.golden @@ -0,0 +1 @@ +File not found: c:\\root\bad-cr.toml diff --git a/test/unit/goldens/testEvolvePhaseConfigPaths.golden b/test/unit/goldens/testEvolvePhaseConfigPaths_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseConfigPaths.golden rename to test/unit/goldens/testEvolvePhaseConfigPaths_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseConfigPaths_windows.golden b/test/unit/goldens/testEvolvePhaseConfigPaths_windows.golden new file mode 100644 index 0000000..1444b18 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseConfigPaths_windows.golden @@ -0,0 +1,7 @@ +MkChartParams + { cleanInstall = False + , chartRequestsPath = "c:\\root\config-cr.toml" + , dataDir = () + , json = False + , runsPath = "c:\\root\config-runs.toml" + } diff --git a/test/unit/goldens/testEvolvePhaseMissingEx.golden b/test/unit/goldens/testEvolvePhaseMissingEx_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseMissingEx.golden rename to test/unit/goldens/testEvolvePhaseMissingEx_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseMissingEx_windows.golden b/test/unit/goldens/testEvolvePhaseMissingEx_windows.golden new file mode 100644 index 0000000..d9aea34 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseMissingEx_windows.golden @@ -0,0 +1,4 @@ +Required chart file not found. Searched for paths(s) [chart-requests.toml] in directories: + - some-dir + - some-config-data + - c:\\root\bad_xdg\config\pacer\ diff --git a/test/unit/goldens/testEvolvePhaseXdgPaths.golden b/test/unit/goldens/testEvolvePhaseXdgPaths_posix.golden similarity index 100% rename from test/unit/goldens/testEvolvePhaseXdgPaths.golden rename to test/unit/goldens/testEvolvePhaseXdgPaths_posix.golden diff --git a/test/unit/goldens/testEvolvePhaseXdgPaths_windows.golden b/test/unit/goldens/testEvolvePhaseXdgPaths_windows.golden new file mode 100644 index 0000000..13d2e25 --- /dev/null +++ b/test/unit/goldens/testEvolvePhaseXdgPaths_windows.golden @@ -0,0 +1,7 @@ +MkChartParams + { cleanInstall = False + , chartRequestsPath = "c:\\root\xdg\config\pacer\chart-requests.toml" + , dataDir = () + , json = False + , runsPath = "c:\\root\xdg\config\pacer\runs.toml" + }