{-# LANGUAGE OverloadedStrings, NoImplicitPrelude, ExistentialQuantification #-} module Main where import BasicPrelude hiding (fromString) import Test.Hspec import Test.QuickCheck import Test.QuickCheck.Property import Test.QuickCheck.Monadic import AndroidLintSummary import Data.Stringable (Stringable(toString, fromString)) import System.Directory (getCurrentDirectory) import Text.XML.HXT.Core instance Arbitrary LintSeverity where arbitrary = elements allSeverities instance Arbitrary LintFormatter where arbitrary = elements allFormatters allSeverities :: [LintSeverity] allSeverities = [minBound ..] allFormatters :: [LintFormatter] allFormatters = [minBound ..] openFixture :: forall s b. FilePath -> IO (IOStateArrow s b XmlTree) openFixture path = do dir <- getCurrentDirectory openXMLFile $ dir "Tests" "fixtures" path main :: IO () main = hspec $ do describe "LintSeverity" $ do it "fromString . toString = id" . property $ do \x -> (fromString . toString) x == (x :: LintSeverity) describe "LintFormatter" $ do it "fromString . toString = id" . property $ do \x -> (fromString . toString) x == (x :: LintFormatter) describe "XML Parser" $ do it "reads an empty file" $ do file <- liftIO . openFixture $ "0" "app" "build" "outputs" "lint-results.xml" issues <- liftIO $ readLintIssues file issues `shouldBe` mempty it "reads a non-empty file" $ do file <- liftIO . openFixture $ "1" "lint-results.xml" issues <- liftIO $ readLintIssues file length issues `shouldBe` 2 let iss0 = head issues severity iss0 `shouldBe` WarningSeverity priority iss0 `shouldBe` 6 let loc0 = location iss0 filename loc0 `shouldBe` "/home/pascal/Projects/java/Android-DirectoryChooser/library/build.gradle" line loc0 `shouldBe` Just 25 column loc0 `shouldBe` Just 5