|
| 1 | +import Test.Cabal.Prelude |
| 2 | +import Test.Cabal.DecodeShowBuildInfo |
| 3 | +import Data.Maybe (isJust) |
| 4 | +import Data.List (sort, nub) |
| 5 | + |
| 6 | +main = cabalTest $ do |
| 7 | + -- output-format flag is missing but required, must fail |
| 8 | + r <- fails $ cabal' "status" ["--target", "Main.hs"] |
| 9 | + assertOutputContains "The status command requires the flag '--output-format'." r |
| 10 | + |
| 11 | + -- Simple file target tests |
| 12 | + runStatusWithTargets ["exe/Main.hs"]$ \si -> do |
| 13 | + resolveOnce "exe/Main.hs" si |
| 14 | + runStatusWithTargets ["exe/Main.hs", "exe/Main2.hs"] $ \si -> do |
| 15 | + resolveOnce "exe/Main.hs" si |
| 16 | + resolveOnce "exe/Main2.hs" si |
| 17 | + runStatusWithTargets ["src/MyLib.hs"] $ \si -> do |
| 18 | + rts <- resolve "src/MyLib.hs" si |
| 19 | + assertEqual "Ambiguous component" 3 (length rts) |
| 20 | + runStatusWithTargets ["src/MyLib2.hs"] $ \si -> do |
| 21 | + resolveOnce "src/MyLib2.hs" si |
| 22 | + runStatusWithTargets ["bench/Bench.hs"] $ \si -> do |
| 23 | + resolveOnce "bench/Bench.hs" si |
| 24 | + runStatusWithTargets ["test/Main.hs"]$ \si -> do |
| 25 | + resolveOnce "test/Main.hs" si |
| 26 | + runStatusWithTargets ["flibsrc/MyForeignLib/AnotherVal.hs", |
| 27 | + "flibsrc/MyForeignLib/Hello.hs", |
| 28 | + "flibsrc/MyForeignLib/SomeBindings.hsc", |
| 29 | + "csrc/MyForeignLibWrapper.c" |
| 30 | + ]$ \si -> do |
| 31 | + resolveOnce "flibsrc/MyForeignLib/AnotherVal.hs" si |
| 32 | + resolveOnce "flibsrc/MyForeignLib/Hello.hs" si |
| 33 | + resolveOnce "flibsrc/MyForeignLib/SomeBindings.hsc" si |
| 34 | + unresolvable "csrc/MyForeignLibWrapper.c" si |
| 35 | + runStatusWithTargets ["lib:Simple", "exe:Simple", "Simple:exe:Simple"] $ \si -> do |
| 36 | + resolveOnce "lib:Simple" si |
| 37 | + resolveOnce "exe:Simple" si |
| 38 | + resolveOnce "Simple:exe:Simple" si |
| 39 | + -- pkgs syntax tests |
| 40 | + runStatusWithTargets ["Benchs"] $ \si -> do |
| 41 | + resolveOnce "Benchs" si |
| 42 | + -- meta targets |
| 43 | + runStatusWithTargets ["all"] $ \si -> do |
| 44 | + rts <- resolve "all" si |
| 45 | + assertEqual "Seven components" 7 (length rts) |
| 46 | + runStatusWithTargets ["exes"] $ \si -> do |
| 47 | + rts <- resolve "exes" si |
| 48 | + assertEqual "Two executables" 2 (length rts) |
| 49 | + runStatusWithTargets ["tests"] $ \si -> do |
| 50 | + resolveOnce "tests" si |
| 51 | + runStatusWithTargets ["benchmarks"] $ \si -> do |
| 52 | + resolveOnce "benchmarks" si |
| 53 | + |
| 54 | + -- unknown target selectors |
| 55 | + runStatusWithTargets ["executables"] $ \si -> |
| 56 | + unresolvable "executables" si |
| 57 | + runStatusWithTargets ["Main2.hs"] $ \si -> |
| 58 | + unresolvable "Main2.hs" si |
| 59 | + |
| 60 | + -- partially works, Main3.hs isn't known while `src/MyLib2.hs` is. |
| 61 | + runStatusWithTargets ["Main3.hs", "src/MyLib2.hs"] $ \si -> do |
| 62 | + unresolvable "Main3.hs" si |
| 63 | + resolveOnce "src/MyLib2.hs" si |
| 64 | + |
| 65 | + -- component fails to compile, still works |
| 66 | + runStatusWithTargets ["src/Fails.hs"] $ \si -> do |
| 67 | + resolveOnce "src/Fails.hs" si |
| 68 | + cabal "status" ["--output-format=json", "--compiler", "--target", "Fails.hs"] |
| 69 | + -- unbuildable target, resolves to 'null' |
| 70 | + runStatusWithTargets ["src/Unbuildable.hs"] $ \si -> do |
| 71 | + unresolvable "src/Unbuildable.hs" si |
| 72 | + cabal "status" ["--output-format=json", "--compiler", "--target", "src/Unbuildable"] |
| 73 | + where |
| 74 | + runStatusWithTargets :: [String] -> (StatusInformation -> TestM a) -> TestM a |
| 75 | + runStatusWithTargets targets act = do |
| 76 | + r <- cabal' "status" $ ["--output-format=json"] ++ concatMap (\t -> ["--target", t]) targets |
| 77 | + statusInfo <- withJsonOutput r |
| 78 | + act statusInfo |
0 commit comments