packages feed

ddc-war-0.2.1.1: DDC/War/Create/CreateDCX.hs

module DDC.War.Create.CreateDCX
        (create)
where
import DDC.War.Create.Way
import DDC.War.Driver
import System.FilePath
import DDC.War.Job                              ()
import Data.Set                                 (Set)
import qualified DDC.War.Job.RunDCX             as RunDCX
import qualified DDC.War.Job.Diff               as Diff
import qualified Data.Set                       as Set


-- | Run .dcx files with the interpreter.
create :: Way -> Set FilePath -> FilePath -> Maybe Chain
create way allFiles filePath
 | takeFileName filePath == "Test.dcx"
 = let  
        fileName         = takeFileName filePath
        sourceDir        = takeDirectory  filePath
        buildDir         = sourceDir </> "war-" ++ wayName way
        testName         = filePath

        testDDCiStdout   = buildDir  </> replaceExtension fileName ".ddci-core.stdout"
        testDDCiStderr   = buildDir  </> replaceExtension fileName ".ddci-core.stderr"

        testStdoutCheck  = sourceDir </> "Test.stdout.check"
        testStdoutDiff   = buildDir  </> "Test.stdout.check.diff"
        shouldDiffStdout = Set.member testStdoutCheck allFiles

        jobRun           = jobOfSpec (JobId testName (wayName way))
                         $ RunDCX.Spec
                                filePath
                                buildDir testDDCiStdout testDDCiStderr

        jobDiff          = jobOfSpec (JobId testName (wayName way))
                         $ Diff.Spec
                                testStdoutCheck
                                testDDCiStdout testStdoutDiff

   in   Just $ Chain 
                $  [jobRun] 
                ++ (if shouldDiffStdout then [jobDiff] else [])

 | otherwise    = Nothing