packages feed

twitch-0.1.7.0: tests/Tests/Twitch/Main.hs

{-# LANGUAGE OverloadedStrings #-}
module Tests.Twitch.Main where
import Test.Hspec
import Options.Applicative.Extra
import Data.Monoid
import Twitch.Main
import Options.Applicative.Builder
import Prelude hiding (log)

runParser :: [String] -> Maybe Options
runParser xs = getParseResult $ execParserPure (prefs mempty) opts xs

-- testParser :: String -> 
testParser f initial expected 
  = fmap f (runParser [initial]) `shouldBe` Just expected
  
testParserMulti f xs expected 
  = fmap f (runParser xs) `shouldBe` Just expected

tests :: Spec
tests = do
  describe "Command Line Parser" $ do
    it "parses the log option" $ do
      -- long
      testParser log "--log=LogToStdout" LogToStdout
      testParser log "--log=LogToFile"   LogToFile
      testParser log "--log=NoLogger"    NoLogger
      -- short
      testParser log "-lLogToStdout" LogToStdout
      testParser log "-lLogToFile"   LogToFile
      testParser log "-lNoLogger"    NoLogger
    
    it "parses the log-file option (long)" $ 
      testParser logFile "--log-file=./log.txt" $ Just "./log.txt" 
    it "parses the log-file option (short)" $ 
      testParser logFile "-f./log.txt"          $ Just "./log.txt"
    
    it "parses the root option" $ do
      testParser root "--root=./src" $ Just "./src"
      testParser root "-r./src"      $ Just "./src"
    
    it "parses the recurse option" $ do
      testParser recurseThroughDirectories "--no-recurse" False
      testParser recurseThroughDirectories "-n"  False

    it "parses the debounce option" $ do
      testParser debounce "--debounce=DebounceDefault" DebounceDefault
      testParser debounce "--debounce=Debounce"        Debounce
      testParser debounce "--debounce=NoDebounce"      NoDebounce
    
      testParser debounce "-bDebounceDefault" DebounceDefault
      testParser debounce "-bDebounce"        Debounce
      testParser debounce "-bNoDebounce"      NoDebounce
    
    it "parses the debounce-amount option" $ do
      testParser debounceAmount "--debounce-amount=1.0" 1.0
      testParser debounceAmount "-a1.0" 1.0
    
    it "parses the poll-interval" $ do
      testParser pollInterval "--poll-interval=1" 1
      testParser pollInterval "-i1" 1
      
    it "parses the poll" $ do
      testParser usePolling "--should-poll" True      
      testParser usePolling "-p"     True