{-# LANGUAGE QuasiQuotes, ExtendedDefaultRules #-} module Main where import Text.InterpolatedString.Perl6 import Test.HUnit import GHC.Exts(fromString) import Data.ByteString.Char8 as BS(ByteString, pack) import Data.Text as T(Text, pack) data Foo = Foo Int String deriving Show t1 = "字元" testEmpty = assertBool "" ([$qc||] == "") testCharLiteral = assertBool "" ([$qc|{1+2}|] == "3") testString = assertBool "" ([$qc|a string {t1} is here|] == "a string 字元 is here") testVariable = assertBool "" ([$qq|a string {t1} $t1 {t1} $t1 is here|] == "a string 字元 字元 字元 字元 is here") testEscape = assertBool "" ([$qc|#\{}|] == "#{}" && [$qc|\{}|] == "{}") testComplex = assertBool "" ([$qc| ok {Foo 4 "Great!" : [Foo 3 "Scott!"]} then |] == ("\n" ++ " ok\n" ++ "[Foo 4 \"Great!\",Foo 3 \"Scott!\"]\n" ++ " then\n")) testConvert = assertBool "" (([$qc|{fromString "a"::Text} {fromString "b"::ByteString}|] :: String) == "a b") tests = TestList [ TestLabel "Empty String" $ TestCase testEmpty , TestLabel "Character Literal" $ TestCase testCharLiteral , TestLabel "String Variable" $ TestCase testString , TestLabel "Dollar Variable" $ TestCase testVariable , TestLabel "Escape Sequences" $ TestCase testEscape , TestLabel "Complex Expression" $ TestCase testComplex , TestLabel "String Conversion" $ TestCase testConvert ] main = runTestTT tests