{-# LANGUAGE OverloadedStrings #-} {-| Module : Main Copyright : © 2020 Albert Krewinkel License : MIT Maintainer : Albert Krewinkel Stability : alpha Portability : Requires language extensions ForeignFunctionInterface, OverloadedStrings. Tests for the `doclayout` Lua module. -} module Main (main) where import Control.Monad (void) import Foreign.Lua (Lua) import Foreign.Lua.Module.DocLayout (preloadModule, pushModule) import Test.Tasty (TestTree, defaultMain, testGroup) import Test.Tasty.HUnit (assertEqual, testCase) import Test.Tasty.Lua (translateResultsFromFile) import qualified Foreign.Lua as Lua main :: IO () main = do luaTestResults <- Lua.run $ do Lua.openlibs Lua.requirehs "doclayout" (void pushModule) translateResultsFromFile "test/test-doclayout.lua" defaultMain $ testGroup "hslua-module-doclayout" [tests, luaTestResults] -- | HSpec tests for the Lua 'system' module tests :: TestTree tests = testGroup "HsLua doclayout module" [ testCase "module can be pushed to the stack" $ Lua.run (void pushModule) , testCase "module can be added to the preloader" . Lua.run $ do Lua.openlibs preloadModule "doclayout" assertEqual' "function not added to preloader" Lua.TypeFunction =<< do Lua.getglobal' "package.preload.doclayout" Lua.ltype (-1) , testCase "module can be loaded via preloader" . Lua.run $ do Lua.openlibs preloadModule "doclayout" assertEqual' "loading the module fails " Lua.OK =<< Lua.dostring "require 'doclayout'" ] assertEqual' :: (Show a, Eq a) => String -> a -> a -> Lua () assertEqual' msg expected = Lua.liftIO . assertEqual msg expected