module Test.HSpec.JUnit.Schema
  ( Suites(..)
  , Suite(..)
  , TestCase(..)
  , Result(..)
  ) where

import Prelude

import Data.Text (Text)

data Suites = Suites Text [Suite]
  deriving (Int -> Suites -> ShowS
[Suites] -> ShowS
Suites -> String
(Int -> Suites -> ShowS)
-> (Suites -> String) -> ([Suites] -> ShowS) -> Show Suites
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Suites] -> ShowS
$cshowList :: [Suites] -> ShowS
show :: Suites -> String
$cshow :: Suites -> String
showsPrec :: Int -> Suites -> ShowS
$cshowsPrec :: Int -> Suites -> ShowS
Show)

data Suite = Suite
  { Suite -> Text
suiteName :: Text
  , Suite -> [Either Suite TestCase]
suiteCases :: [Either Suite TestCase]
  }
  deriving (Int -> Suite -> ShowS
[Suite] -> ShowS
Suite -> String
(Int -> Suite -> ShowS)
-> (Suite -> String) -> ([Suite] -> ShowS) -> Show Suite
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Suite] -> ShowS
$cshowList :: [Suite] -> ShowS
show :: Suite -> String
$cshow :: Suite -> String
showsPrec :: Int -> Suite -> ShowS
$cshowsPrec :: Int -> Suite -> ShowS
Show)

data TestCase = TestCase
  { TestCase -> Text
testCaseClassName :: Text
  , TestCase -> Text
testCaseName :: Text
  , TestCase -> Maybe Result
testCaseResult :: Maybe Result
  }
  deriving (Int -> TestCase -> ShowS
[TestCase] -> ShowS
TestCase -> String
(Int -> TestCase -> ShowS)
-> (TestCase -> String) -> ([TestCase] -> ShowS) -> Show TestCase
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [TestCase] -> ShowS
$cshowList :: [TestCase] -> ShowS
show :: TestCase -> String
$cshow :: TestCase -> String
showsPrec :: Int -> TestCase -> ShowS
$cshowsPrec :: Int -> TestCase -> ShowS
Show)

data Result = Failure Text Text | Skipped Text
  deriving (Int -> Result -> ShowS
[Result] -> ShowS
Result -> String
(Int -> Result -> ShowS)
-> (Result -> String) -> ([Result] -> ShowS) -> Show Result
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Result] -> ShowS
$cshowList :: [Result] -> ShowS
show :: Result -> String
$cshow :: Result -> String
showsPrec :: Int -> Result -> ShowS
$cshowsPrec :: Int -> Result -> ShowS
Show)