packages feed

snail-0.1.0.0: test/Snail/IOSpec.hs

module Snail.IOSpec where

import Data.Either
import Snail
import Test.Hspec

spec :: Spec
spec = do
    describe "successfully lexes some basic snail files" $ do
        it "lex a basic snail file" $ do
            eResults <- readSnailFile "snail-files/basic.snail"
            eResults `shouldSatisfy` isRight

        it "lex an empty snail file" $ do
            eResults <- readSnailFile "snail-files/fail-empty.snail"
            eResults `shouldSatisfy` isLeft

        it "lex should fail with bad comment" $ do
            eResults <- readSnailFile "snail-files/fail-comment.snail"
            eResults `shouldSatisfy` isLeft

        it "lex should fail with non-terminated s-expression" $ do
            eResults <- readSnailFile "snail-files/fail.snail"
            eResults `shouldSatisfy` isLeft

        it "lex should fail with non-escaped quote" $ do
            eResults <- readSnailFile "snail-files/fail-quotes.snail"
            eResults `shouldSatisfy` isLeft

        it "lex should fail with non-escaped quote 2" $ do
            eResults <- readSnailFile "snail-files/fail-quotes-2.snail"
            eResults `shouldSatisfy` isLeft

        it "lex should fail with non-escaped quote 3" $ do
            eResults <- readSnailFile "snail-files/fail-quotes-3.snail"
            eResults `shouldSatisfy` isLeft

        it "lex should fail on naked nil" $ do
            eResults <- readSnailFile "snail-files/fail-nil.snail"
            eResults `shouldSatisfy` isLeft

    describe "successfully lexes some examples from other languages" $ do
        it "lexes a basic scheme file with converted comments" $ do
            eResults <- readSnailFile "./test/files/r5rs_pitfalls.scm"
            eResults `shouldSatisfy` isRight

        it "lexes a basic fennel file with converted comments" $ do
            eResults <- readSnailFile "./test/files/fennel-reference.fnl"
            eResults `shouldSatisfy` isRight

        it "lexes a basic common lisp file with converted comments" $ do
            eResults <- readSnailFile "./test/files/learnxyz.cl"
            eResults `shouldSatisfy` isRight