9
9
module LS.XPile.PurescriptSpec (spec ) where
10
10
11
11
import Control.Monad (unless )
12
+ import Control.Monad.Trans.Except (runExceptT )
12
13
import Data.Either (lefts , rights )
14
+ import Data.Text (Text )
15
+ import qualified Data.Text as Text
13
16
import Data.Text.Lazy qualified as TL
14
17
import Data.Text.Lazy.IO qualified as TL
15
- import LS qualified as SFL4
16
- import LS.NLP.NLG (NLGEnv , allLangs , langEng , myNLGEnv , printLangs )
17
- import LS.XPile.Logging (fmapE , xpLog )
18
- import LS.XPile.Purescript (translate2PS )
19
18
import System.FilePath
20
- import Test.Hspec (Spec , describe , it , runIO )
19
+ import System.IO.Unsafe (unsafeInterleaveIO )
20
+ import Test.Hspec (Spec , describe , it )
21
21
import Test.Hspec.Golden ( Golden (.. ) )
22
22
import Prelude hiding (exp , seq )
23
23
import LS.Interpreter (l4interpret )
24
24
import PGF (Language )
25
- import LS (Interpreted )
25
+
26
+ import LS qualified as SFL4
27
+ import LS.Log
28
+ import LS.NLP.NLG (NLGEnv , allLangs , langEng , myNLGEnv , NlgLog , printLangs )
29
+ import LS.XPile.Logging (xpLog , fmapE )
30
+ import LS.XPile.Purescript (translate2PS )
31
+
26
32
data NLGData
27
33
= MkNLGData
28
34
{ env :: NLGEnv ,
29
35
allEnv :: [NLGEnv ]
30
36
}
31
37
32
- loadNLGEnv :: Either [String ] Language -> Interpreted -> IO NLGData
33
- loadNLGEnv engE l4i =
38
+ loadNLGEnv :: IOTracer NlgLog -> Either [Text ] Language -> IO NLGData
39
+ loadNLGEnv tracer engE =
34
40
case engE of
35
41
Left err -> do
36
- error $ unlines $ " natural4: encountered error when obtaining langEng" : err
42
+ fail $ Text. unpack $ Text. unlines $ " natural4: encountered error when obtaining langEng" : err
37
43
Right eng -> do
38
- ( nlgEnv, _nlgEnvErr) <- xpLog <$> myNLGEnv l4i eng -- Only load the NLG environment if we need it.
39
- ( allNLGEnv, _) <- do
44
+ nlgEnv <- runExceptT $ myNLGEnv tracer eng
45
+ allNLGEnv <- do
40
46
nlgLangs <- allLangs
41
- xps <- traverse (myNLGEnv l4i) nlgLangs
42
- return (xpLog $ sequenceA xps)
47
+ traverse (runExceptT . myNLGEnv tracer) nlgLangs
43
48
case nlgEnv of
44
49
Left err -> do
45
- error $ unlines $ " natural4: encountered error while obtaining myNLGEnv" : err
50
+ fail $ Text. unpack $ Text. unlines $ " natural4: encountered error while obtaining myNLGEnv" : err
46
51
Right nlgEnvR -> do
47
52
let allNLGEnvErrors = mconcat $ lefts allNLGEnv
48
53
unless (null allNLGEnvErrors) do
49
- error $ unlines $ " natural4: encountered error while obtaining allNLGEnv" : allNLGEnvErrors
54
+ fail $ Text. unpack $ Text. unlines $ " natural4: encountered error while obtaining allNLGEnv" : allNLGEnvErrors
50
55
51
56
let allNLGEnvR = rights allNLGEnv
52
57
@@ -59,23 +64,26 @@ loadNLGEnv engE l4i =
59
64
60
65
transpileFile :: String -> IO TL. Text
61
66
transpileFile filename = do
67
+ let tracer =
68
+ -- Use the 'prettyTracer' if you need logs for debugging
69
+ -- prettyTracer
70
+ mempty
62
71
let testPath = " test" </> " testdata" </> " golden" </> " PurescriptSpec" </> filename <.> " csv"
63
72
opts = SFL4. defaultOptions {SFL4. file = [testPath]}
64
- strLangs <- printLangs allLangs
65
73
rules <- SFL4. dumpRules opts
66
74
l4i <- l4interpret rules
67
- ( engE, _) <- xpLog <$> langEng
68
- nlgData <- loadNLGEnv engE l4i
69
-
75
+ engE <- runExceptT $ langEng tracer
76
+ nlgData <- loadNLGEnv tracer engE
77
+ strLangs <- unsafeInterleaveIO $ printLangs allLangs
70
78
let justNLGDate = nlgData
71
79
nlgEnvs = justNLGDate. allEnv
72
80
eng = justNLGDate. env
73
81
(psResult, _) = xpLog do
74
- fmapE (<> (" \n\n " <> " allLang = [\" " <> strLangs <> " \" ]" )) (translate2PS nlgEnvs eng rules )
75
-
82
+ fmapE (<> (" \n\n " <> " allLang = [\" " <> strLangs <> " \" ]" )) (translate2PS nlgEnvs eng l4i )
83
+
76
84
case psResult of
77
85
Left err -> do
78
- error $ unlines $ " natural4: encountered error while obtaining myNLGEnv" : err
86
+ fail $ unlines $ " natural4: encountered error while obtaining myNLGEnv" : err
79
87
Right goodResult -> do
80
88
pure $ TL. pack goodResult
81
89
@@ -100,11 +108,11 @@ spec :: Spec
100
108
spec = do
101
109
describe " Purescript transpiler" do
102
110
describe " must_sing" do
103
- must_sing_purs <- runIO $ transpileFile " must_sing"
104
111
it " convert must sing to Purescript" do
105
- goldenGeneric " must_sing" must_sing_purs
112
+ must_sing_purs <- transpileFile " must_sing"
113
+ pure $ goldenGeneric " must_sing" must_sing_purs
106
114
107
115
describe " rodents" do
108
- rodents_purs <- runIO $ transpileFile " rodents"
109
116
it " convert must sing to Purescript" do
110
- goldenGeneric " rodents" rodents_purs
117
+ rodents_purs <- transpileFile " rodents"
118
+ pure $ goldenGeneric " rodents" rodents_purs
0 commit comments