2024-05-02 20:33:35 +00:00
module TestParser ( tests ) where
import Test.HUnit
import Parser.Lexer
import Parser.JavaParser
2024-05-03 13:47:41 +00:00
import Ast
2024-05-02 20:33:35 +00:00
2024-05-03 13:47:41 +00:00
testSingleEmptyClass = TestCase $
assertEqual " expect single empty class hello " [ Class " Hello " [] [] ] $
parse [ CLASS , IDENTIFIER " Hello " , LBRACKET , RBRACKET ]
testTwoEmptyClasses = TestCase $
assertEqual " expect two empty classes " [ Class " Class1 " [] [] , Class " Class2 " [] [] ] $
parse [ CLASS , IDENTIFIER " Class1 " , LBRACKET , RBRACKET , CLASS , IDENTIFIER " Class2 " , LBRACKET , RBRACKET ]
2024-05-03 15:47:59 +00:00
testBooleanField = TestCase $
assertEqual " expect class with boolean field " [ Class " WithBool " [] [ VariableDeclaration " boolean " " value " Nothing ] ] $
parse [ CLASS , IDENTIFIER " WithBool " , LBRACKET , BOOLEAN , IDENTIFIER " value " , SEMICOLON , RBRACKET ]
testIntField = TestCase $
assertEqual " expect class with int field " [ Class " WithInt " [] [ VariableDeclaration " int " " value " Nothing ] ] $
parse [ CLASS , IDENTIFIER " WithInt " , LBRACKET , INT , IDENTIFIER " value " , SEMICOLON , RBRACKET ]
2024-05-06 08:16:57 +00:00
testCustomTypeField = TestCase $
assertEqual " expect class with foo field " [ Class " WithFoo " [] [ VariableDeclaration " Foo " " value " Nothing ] ] $
parse [ CLASS , IDENTIFIER " WithFoo " , LBRACKET , IDENTIFIER " Foo " , IDENTIFIER " value " , SEMICOLON , RBRACKET ]
2024-05-06 08:33:37 +00:00
testMultipleDeclarationSameLine = TestCase $
assertEqual " expect class with two int fields " [ Class " TwoInts " [] [ VariableDeclaration " int " " num1 " Nothing , VariableDeclaration " int " " num2 " Nothing ] ] $
parse [ CLASS , IDENTIFIER " TwoInts " , LBRACKET , INT , IDENTIFIER " num1 " , COMMA , IDENTIFIER " num2 " , SEMICOLON , RBRACKET ]
testMultipleDeclarations = TestCase $
assertEqual " expect class with int and char field " [ Class " Multiple " [] [ VariableDeclaration " int " " value " Nothing , VariableDeclaration " char " " letter " Nothing ] ] $
parse [ CLASS , IDENTIFIER " Multiple " , LBRACKET , INT , IDENTIFIER " value " , SEMICOLON , CHAR , IDENTIFIER " letter " , SEMICOLON , RBRACKET ]
2024-05-06 08:09:50 +00:00
testWithModifier = TestCase $
assertEqual " expect class with int field " [ Class " WithInt " [] [ VariableDeclaration " int " " value " Nothing ] ] $
parse [ ABSTRACT , CLASS , IDENTIFIER " WithInt " , LBRACKET , PUBLIC , INT , IDENTIFIER " value " , SEMICOLON , RBRACKET ]
2024-05-06 21:51:33 +00:00
testEmptyMethod = TestCase $
2024-05-06 21:34:03 +00:00
assertEqual " expect class with method " [ Class " WithMethod " [ MethodDeclaration " int " " foo " [] ( Block [] ) ] [] ] $
parse [ CLASS , IDENTIFIER " WithMethod " , LBRACKET , INT , IDENTIFIER " foo " , LBRACE , RBRACE , SEMICOLON , RBRACKET ]
2024-05-06 21:51:33 +00:00
testEmptyPrivateMethod = TestCase $
assertEqual " expect class with method " [ Class " WithMethod " [ MethodDeclaration " int " " foo " [] ( Block [] ) ] [] ] $
parse [ CLASS , IDENTIFIER " WithMethod " , LBRACKET , PRIVATE , INT , IDENTIFIER " foo " , LBRACE , RBRACE , LBRACKET , RBRACKET , RBRACKET ]
testEmptyVoidMethod = TestCase $
assertEqual " expect class with method " [ Class " WithMethod " [ MethodDeclaration " void " " foo " [] ( Block [] ) ] [] ] $
parse [ CLASS , IDENTIFIER " WithMethod " , LBRACKET , VOID , IDENTIFIER " foo " , LBRACE , RBRACE , LBRACKET , RBRACKET , RBRACKET ]
2024-05-07 13:03:04 +00:00
testEmptyMethodWithParam = TestCase $
assertEqual " expect class with method with param " [ Class " WithParam " [ MethodDeclaration " void " " foo " [ ParameterDeclaration " int " " param " ] ( Block [] ) ] [] ] $
parse [ CLASS , IDENTIFIER " WithParam " , LBRACKET , VOID , IDENTIFIER " foo " , LBRACE , INT , IDENTIFIER " param " , RBRACE , SEMICOLON , RBRACKET ]
testEmptyMethodWithParams = TestCase $
assertEqual " expect class with multiple params " [ Class " WithParams " [ MethodDeclaration " void " " foo " [ ParameterDeclaration " int " " p1 " , ParameterDeclaration " Custom " " p2 " ] ( Block [] ) ] [] ] $
parse [ CLASS , IDENTIFIER " WithParams " , LBRACKET , VOID , IDENTIFIER " foo " , LBRACE , INT , IDENTIFIER " p1 " , COMMA , IDENTIFIER " Custom " , IDENTIFIER " p2 " , RBRACE , SEMICOLON , RBRACKET ]
testClassWithMethodAndField = TestCase $
assertEqual " expect class with method and field " [ Class " WithMethodAndField " [ MethodDeclaration " void " " foo " [] ( Block [] ) , MethodDeclaration " int " " bar " [] ( Block [] ) ] [ VariableDeclaration " int " " value " Nothing ] ] $
parse [ CLASS , IDENTIFIER " WithMethodAndField " , LBRACKET , VOID , IDENTIFIER " foo " , LBRACE , RBRACE , LBRACKET , RBRACKET , INT , IDENTIFIER " value " , SEMICOLON , INT , IDENTIFIER " bar " , LBRACE , RBRACE , SEMICOLON , RBRACKET ]
2024-05-02 20:33:35 +00:00
tests = TestList [
2024-05-03 13:47:41 +00:00
testSingleEmptyClass ,
2024-05-03 15:47:59 +00:00
testTwoEmptyClasses ,
testBooleanField ,
2024-05-06 08:16:57 +00:00
testIntField ,
2024-05-06 08:33:37 +00:00
testCustomTypeField ,
2024-05-06 08:09:50 +00:00
testMultipleDeclarations ,
2024-05-06 21:34:03 +00:00
testWithModifier ,
2024-05-06 21:51:33 +00:00
testEmptyMethod ,
testEmptyPrivateMethod ,
2024-05-07 13:03:04 +00:00
testEmptyVoidMethod ,
testEmptyMethodWithParam ,
testEmptyMethodWithParams ,
testClassWithMethodAndField
2024-05-02 20:33:35 +00:00
]