{-# LANGUAGE DeriveDataTypeable #-}
# LANGUAGE DeriveGeneric #

module Distribution.Types.TestSuiteInterface (
    TestSuiteInterface(..),
) where

import Prelude ()
import Distribution.Compat.Prelude

import Distribution.Types.TestType
import Distribution.ModuleName
import Distribution.Version

-- | The test suite interfaces that are currently defined. Each test suite must
-- specify which interface it supports.
--
-- More interfaces may be defined in future, either new revisions or totally
-- new interfaces.
--
data TestSuiteInterface =

     -- | Test interface \"exitcode-stdio-1.0\". The test-suite takes the form
  of an executable . It returns a zero exit code for success , non - zero for
     -- failure. The stdout and stderr channels may be logged. It takes no
  command line parameters and nothing on stdin .
     --
     TestSuiteExeV10 Version FilePath

     -- | Test interface \"detailed-0.9\". The test-suite takes the form of a
     -- library containing a designated module that exports \"tests :: [Test]\".
     --
   | TestSuiteLibV09 Version ModuleName

  | A test suite that does not conform to one of the above interfaces for
     -- the given reason (e.g. unknown test type).
     --
   | TestSuiteUnsupported TestType
   deriving (Eq, Generic, Read, Show, Typeable, Data)

instance Binary TestSuiteInterface


instance Monoid TestSuiteInterface where
    mempty  =  TestSuiteUnsupported (TestTypeUnknown mempty nullVersion)
    mappend = (<>)

instance Semigroup TestSuiteInterface where
    a <> (TestSuiteUnsupported _) = a
    _ <> b                        = b

# LANGUAGE DeriveDataTypeable #
 | The test suite interfaces that are currently defined. Each test suite must
 specify which interface it supports.

 More interfaces may be defined in future, either new revisions or totally
 new interfaces.

 | Test interface \"exitcode-stdio-1.0\". The test-suite takes the form
 failure. The stdout and stderr channels may be logged. It takes no

 | Test interface \"detailed-0.9\". The test-suite takes the form of a
 library containing a designated module that exports \"tests :: [Test]\".

 the given reason (e.g. unknown test type).

# LANGUAGE DeriveGeneric #

module Distribution.Types.TestSuiteInterface (
    TestSuiteInterface(..),
) where

import Prelude ()
import Distribution.Compat.Prelude

import Distribution.Types.TestType
import Distribution.ModuleName
import Distribution.Version

data TestSuiteInterface =

  of an executable . It returns a zero exit code for success , non - zero for
  command line parameters and nothing on stdin .
     TestSuiteExeV10 Version FilePath

   | TestSuiteLibV09 Version ModuleName

  | A test suite that does not conform to one of the above interfaces for
   | TestSuiteUnsupported TestType
   deriving (Eq, Generic, Read, Show, Typeable, Data)

instance Binary TestSuiteInterface


instance Monoid TestSuiteInterface where
    mempty  =  TestSuiteUnsupported (TestTypeUnknown mempty nullVersion)
    mappend = (<>)

instance Semigroup TestSuiteInterface where
    a <> (TestSuiteUnsupported _) = a
    _ <> b                        = b
