From 9d1f0385945e926e7084e60fc72fe5846e7139b2 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Tue, 23 Jul 2024 22:44:42 +0200 Subject: Split in lib and tests --- tests/Language/Elna/ParserSpec.hs | 58 +++++++++++++++++++++++++++++++++++++++ tests/Spec.hs | 1 + 2 files changed, 59 insertions(+) create mode 100644 tests/Language/Elna/ParserSpec.hs create mode 100644 tests/Spec.hs (limited to 'tests') 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 #-} -- cgit v1.2.3