diff options
| author | Eugen Wissner <belka@caraus.de> | 2024-07-23 22:44:42 +0200 |
|---|---|---|
| committer | Eugen Wissner <belka@caraus.de> | 2024-07-23 22:44:42 +0200 |
| commit | 9d1f0385945e926e7084e60fc72fe5846e7139b2 (patch) | |
| tree | 96bd319dc0dc26059ce3f42d5a91f84624fe3ea0 /tests | |
| parent | 01398f48bf2d17a3836a5d5b5467d0fb05e3f337 (diff) | |
| download | elna-9d1f0385945e926e7084e60fc72fe5846e7139b2.tar.gz | |
Split in lib and tests
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/Language/Elna/ParserSpec.hs | 58 | ||||
| -rw-r--r-- | tests/Spec.hs | 1 |
2 files changed, 59 insertions, 0 deletions
diff --git a/tests/Language/Elna/ParserSpec.hs b/tests/Language/Elna/ParserSpec.hs new file mode 100644 index 0000000..11907ab --- /dev/null +++ b/tests/Language/Elna/ParserSpec.hs @@ -0,0 +1,58 @@ +module Language.Elna.ParserSpec + ( spec + ) where + +import Test.Hspec (Spec, describe, it, pendingWith, xit) +import Test.Hspec.Megaparsec (shouldParse, shouldSucceedOn, parseSatisfies) +import Language.Elna.Parser (programP) +import Text.Megaparsec (parse) +import Language.Elna.AST + ( Declaration(..) + , Parameter(..) + , Program(..) + , TypeExpression(..) + ) + +spec :: Spec +spec = + describe "programP" $ do + it "parses an empty main function" $ + parse programP "" `shouldSucceedOn` "proc main() {}" + + it "parses type definition for a type starting like array" $ + let expected = Program [TypeDefinition "t" $ NamedType "arr"] + actual = parse programP "" "type t = arr" + in actual `shouldParse` expected + + it "parses array type definition" $ + let expected = Program [TypeDefinition "t" $ ArrayType (NamedType "integer") 10] + actual = parse programP "" "type t = array[10] of integer" + in actual `shouldParse` expected + + it "parses parameters" $ + let given = "proc main(x: integer) {}" + parameters = [Parameter "x" (NamedType "integer") False] + expected = Program [ProcedureDefinition "main" parameters [] []] + actual = parse programP "" given + in actual `shouldParse` expected + + it "parses ref parameters" $ + let given = "proc main(x: integer, ref y: boolean) {}" + parameters = + [ Parameter "x" (NamedType "integer") False + , Parameter "y" (NamedType "boolean") True + ] + expected = Program [ProcedureDefinition "main" parameters [] []] + actual = parse programP "" given + in actual `shouldParse` expected + + it "parses variable declaration" $ + let given = "proc main() { var x: integer; }" + expected (Program [ProcedureDefinition _ _ variables _]) = + not $ null variables + expected _ = False + actual = parse programP "" given + in actual `parseSatisfies` expected + + it "parses procedure body statements" $ + pendingWith "Not implemented" diff --git a/tests/Spec.hs b/tests/Spec.hs new file mode 100644 index 0000000..a824f8c --- /dev/null +++ b/tests/Spec.hs @@ -0,0 +1 @@ +{-# OPTIONS_GHC -F -pgmF hspec-discover #-} |
