content: {-# LANGUAGE PackageImports #-}
  module Main (main) where
  
  import Prelude ()
  
  import Game.LambdaHack.Core.Prelude
  
  import qualified Data.Text as T
  import           Options.Applicative
  import           System.IO.Unsafe (unsafePerformIO)
  import           Test.Tasty
  import           Test.Tasty.HUnit
  
  import           Game.LambdaHack.Client.UI.UIOptions
  import           Game.LambdaHack.Client.UI.UIOptionsParse
  import           Game.LambdaHack.Common.ClientOptions
  import qualified Game.LambdaHack.Content.RuleKind as RK
  import           Game.LambdaHack.Server
  
  -- For the case of flattened .cabal file, to avoid ambiguity.
  import qualified "Allure" Content.RuleKind
  import           "Allure" TieKnot
  
  main :: IO ()
  main = defaultMain tests
  
  tests :: TestTree
  tests = testGroup "Tests" [integrationTests]
  
  integrationTests :: TestTree
  integrationTests = testGroup "integrationTests" $
    [ testCase "Null frontend; 5 frames" $ do
        let seed = "SMGen 131 141"
            args = words "--dbgMsgSer --logPriority 4 --newGame 1 --noAnim --maxFps 100000 --frontendNull --benchmark --stopAfterFrames 5 --automateAll --keepAutomated --gameMode crawl"
                   ++ [ "--setDungeonRng", seed, "--setMainRng", seed]
        serverOptions <- handleParseResult $ execParserPure defaultPrefs serverOptionsPI args
        tieKnot serverOptions
    ]
  #ifndef USE_BROWSER
    ++
    let corule = RK.makeData Content.RuleKind.standardRules
        uiOptions = unsafePerformIO $ mkUIOptions corule defClientOptions
        testFontset :: Int -> String -> TestTree
        testFontset n fontsetName =
          testCase ("SDL fronted; init only; " ++ fontsetName ++ " fontset") $ do
            -- This test only works when run from the same directory that
            -- the .cabal file is in. And this is what Debian needs, so OK.
            -- The hacky log priority 0 tells SDL frontend to init
            -- and quit at once, for testing on CIs without graphics access.
            let seed = "SMGen " ++ show (13 + 2 * n) ++ " " ++ show (15 + 4 * n)
                args2 = words "--dbgMsgSer --logPriority 0 --newGame 3 --maxFps 100000 --benchmark --stopAfterFrames 5 --automateAll --keepAutomated --gameMode battle"
                        ++ [ "--setDungeonRng", seed, "--setMainRng", seed
                           , "--fontset", fontsetName ]
            serverOptions2 <- handleParseResult $ execParserPure defaultPrefs serverOptionsPI args2
            tieKnot serverOptions2
    in zipWith testFontset [0..] $ map (T.unpack . fst) $ uFontsets uiOptions
  #endif
  