-- The examples also constitute the test suite: Make sure they all compile.
import Control.Monad
import Control.Exception
import System.Directory
import System.IO
import System.IO.Temp
import qualified Examples.Blink.Demo
import qualified Examples.Button.Demo
import qualified Examples.Feather.Demo
data TestCase = TestCase
{ desc :: String
, builder :: IO ()
, compileC :: Bool
}
tests :: [TestCase]
tests =
[ TestCase "Blink" Examples.Blink.Demo.main True
, TestCase "Button" Examples.Button.Demo.main True
, TestCase "Feather" Examples.Feather.Demo.main True
]
main :: IO ()
main = forM_ tests (runtest False)
runtest :: Bool -> TestCase -> IO ()
runtest canccompile t = withSystemTempDirectory "arduino-copilot-test" $ \tmpdir ->
bracket (setup tmpdir) cleanup (const copilottest)
where
setup tmpdir = do
setCurrentDirectory tmpdir
cleanup _ = return ()
copilottest = do
putStr (desc t ++ " copilot ")
hFlush stdout
r <- try' (builder t)
case r of
Right () -> do
putStrLn "OK"
hFlush stdout
ccompiletest
Left ex ->
putStrLn ("FAILED: " ++ show ex)
ccompiletest = when (canccompile && compileC t) $ do
putStr (desc t ++ " C compilation ")
error "compilation not implemented"
try' :: IO () -> IO (Either SomeException ())
try' = try