{-# LANGUAGE QuasiQuotes #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TemplateHaskell #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE ScopedTypeVariables #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE KindSignatures #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE GADTs #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE FlexibleContexts #-} {-# LANGUAGE UndecidableInstances #-} {-# OPTIONS_GHC -fno-warn-unused-top-binds #-} module Basic (tests) where import Data.Aeson as A import Data.Aeson.TypeScript.TH import Data.Aeson.TypeScript.Types import Data.Proxy import Data.String.Interpolate import Prelude hiding (Double) import Test.Hspec data Unit1 = Unit1 $(deriveTypeScript A.defaultOptions ''Unit1) data Unit2 = Unit2 $(deriveTypeScript (A.defaultOptions { A.tagSingleConstructors = True , A.constructorTagModifier = const "foo" }) ''Unit2) tests :: SpecWith () tests = describe "Basic tests" $ do describe "tagSingleConstructors and constructorTagModifier" $ do it [i|Works with a normal unit|] $ do (getTypeScriptDeclarations (Proxy :: Proxy Unit1)) `shouldBe` ([ TSTypeAlternatives "Unit1" [] ["IUnit1"] , TSTypeAlternatives "IUnit1" [] ["void[]"] ]) it [i|Works with a unit with constructorTagModifier|] $ do (getTypeScriptDeclarations (Proxy :: Proxy Unit2)) `shouldBe` ([]) main :: IO () main = hspec tests