packages feed

interpolatedstring-perl6-0.2: tests/Test.hs

{-# LANGUAGE QuasiQuotes, ExtendedDefaultRules #-}

module Main where

import Text.InterpolatedString.Perl6
import Test.HUnit

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 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"))


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
    ]

main = runTestTT tests