packages feed

haskell-debugger-0.13.0.0: test/haskell/Test/Integration/MultiMain.hs

-- | Multi-main tests ported from the NodeJS integration testsuite.
{-# LANGUAGE CPP #-}
{-# LANGUAGE OverloadedStrings #-}
module Test.Integration.MultiMain (multiMainTests) where

import qualified Data.Text as T
import Test.DAP
import Test.Tasty
import Test.Tasty.HUnit
#ifdef mingw32_HOST_OS
import Test.Tasty.ExpectedFailure
#endif

multiMainTests :: TestTree
multiMainTests =
#ifdef mingw32_HOST_OS
  ignoreTestBecause "Needs to be fixed for Windows (#199)" $
#endif
  testGroup "DAP.Integration.MultiMain"
    [ testCase "should run program to the end" runToTheEnd
    , testCase "should stop at break-point" stopAtBreakpoint
    , testCase "should run the right main" runRightMain
    ]

withCommonSetup :: (FilePath -> TestDAP ()) -> Assertion
withCommonSetup test =
  withTestDAPServer "test/integration/multi-mains" [] $ \test_dir server ->
    withTestDAPServerClient server $ do
      test test_dir
      disconnect

runToTheEnd :: Assertion
runToTheEnd = withCommonSetup $ \test_dir -> do
  let cfg = mkLaunchConfig test_dir "app/Main.hs"
  runToEnd cfg

stopAtBreakpoint :: Assertion
stopAtBreakpoint = withCommonSetup $ \test_dir -> do
  let cfg = mkLaunchConfig test_dir "app/Main.hs"
  hitBreakpointWith cfg 6

runRightMain :: Assertion
runRightMain = withCommonSetup $ \test_dir -> do
  let cfg = mkLaunchConfig test_dir "second/Main.hs"
  runToEnd cfg
  assertFullOutput (T.pack "The right main")
  assertNotFullOutput (T.pack "The bad main")