{-# LANGUAGE DataKinds #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE DeriveDataTypeable #-}
{-# LANGUAGE DeriveFunctor #-}
{-# LANGUAGE DeriveFoldable #-}
{-# LANGUAGE DeriveTraversable #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE PolyKinds #-}
{-# LANGUAGE ScopedTypeVariables #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE TypeOperators #-}
{-# LANGUAGE UndecidableInstances #-}
import Network.Wai.Handler.Warp
import Network.Wai
import Network.Wai.Middleware.RequestLogger (logStdout)
import System.Process
-- base
import Control.Concurrent (forkIO)
import Data.Monoid ((<>))
import GHC.TypeLits
-- ByteString
import Data.ByteString (unpack)
-- hspec
import Test.Hspec
-- hspec-aeson-golden
import Test.Aeson.GenericSpecs
-- servant
import Servant
-- servant-server
import Servant.API
-- text
import Data.Text (Text)
-- ocaml-export
import OCaml.Export
import qualified Dependency as D
import qualified File as File
import qualified FileApp as File
import qualified Options as Options
import qualified Product as Product
import ProductApp
import qualified Sum as Sum
import SumApp
logAllMiddleware :: Application -> Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
logAllMiddleware app req respond = do
d <- requestBody req
print $ requestHeaders req
print $ d
app req respond
-- npm start --prefix path/to/your/app
main :: IO ()
main = do
hspec Product.spec
hspec Sum.spec
hspec File.spec
-- hspec Options.spec
hspec D.spec
hspec $
describe "mkOCamlTypeMetaData" $
it "mkOCamlTypeMetaData on package A and B should equal mkOCamlTypeMetaData on B which has A as a dependency" $
(mkOCamlTypeMetaData (Proxy :: Proxy Product.ProductPackage)) <> (mkOCamlTypeMetaData (Proxy :: Proxy D.DependencyPackageWithoutProduct))
`shouldBe` mkOCamlTypeMetaData (Proxy :: Proxy D.DependencyPackage)
-- print $ ocamlPackageTypeCount (Proxy :: Proxy Product.ProductPackage)
-- print $ mkOCamlTypeMetaData (Proxy :: Proxy Product.ProductPackage)
print $ mkOCamlTypeMetaData (Proxy :: Proxy D.SubsPackage)
_ <- forkIO $ run 8081 productPackageApp
_ <- forkIO $ run 8082 sumPackageApp
run 8083 File.filePackageApp
-- curl -i -d '"hi"' -H 'Content-type: application/json' -X POST http://localhost:8081/x/y