diff options
Diffstat (limited to 'tests/Language')
| -rw-r--r-- | tests/Language/Elna/NameAnalysisSpec.hs | 31 |
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" |
