summaryrefslogtreecommitdiff
path: root/tests/Language
diff options
context:
space:
mode:
Diffstat (limited to 'tests/Language')
-rw-r--r--tests/Language/Elna/NameAnalysisSpec.hs31
1 files changed, 30 insertions, 1 deletions
diff --git a/tests/Language/Elna/NameAnalysisSpec.hs b/tests/Language/Elna/NameAnalysisSpec.hs
index f0b133e..9d63e74 100644
--- a/tests/Language/Elna/NameAnalysisSpec.hs
+++ b/tests/Language/Elna/NameAnalysisSpec.hs
@@ -4,7 +4,14 @@ module Language.Elna.NameAnalysisSpec
import Data.Text (Text)
import Text.Megaparsec (runParser)
-import Test.Hspec (Spec, describe, it, shouldBe, shouldSatisfy)
+import Test.Hspec
+ ( Spec
+ , describe
+ , expectationFailure
+ , it
+ , shouldBe
+ , shouldSatisfy
+ )
import Language.Elna.NameAnalysis (Error(..), nameAnalysis)
import Language.Elna.SymbolTable (Info(..), SymbolTable)
import qualified Language.Elna.SymbolTable as SymbolTable
@@ -47,3 +54,25 @@ spec = describe "nameAnalysis" $ do
actual <- nameAnalysisOnText given
actual `shouldSatisfy` (expected ==) . fmap (SymbolTable.lookup "C")
+
+ it "puts parameters into the local symbol table" $ do
+ let given = "proc main(ref param: int) {}"
+ expected = SymbolTable.enter "param" (VariableInfo intType True) SymbolTable.empty
+ actual <- nameAnalysisOnText given
+
+ case SymbolTable.lookup "main" <$> actual of
+ Right lookupResult
+ | Just (ProcedureInfo localTable _) <- lookupResult ->
+ localTable `shouldBe` expected
+ _ -> expectationFailure "Procedure symbol not found"
+
+ it "puts variables into the local symbol table" $ do
+ let given = "proc main() { var var1: int; }"
+ expected = SymbolTable.enter "var1" (VariableInfo intType False) SymbolTable.empty
+ actual <- nameAnalysisOnText given
+
+ case SymbolTable.lookup "main" <$> actual of
+ Right lookupResult
+ | Just (ProcedureInfo localTable _) <- lookupResult ->
+ localTable `shouldBe` expected
+ _ -> expectationFailure "Procedure symbol not found"