added some tests
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
Some checks failed
Gitea Actions Demo / Explore-Gitea-Actions (push) Has been cancelled
This commit is contained in:
parent
e552bd5ada
commit
2ff720b042
@ -11,10 +11,7 @@ import semantic.exeptions.TypeMismatchException;
|
|||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertInstanceOf;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
public class SemanticTest {
|
public class SemanticTest {
|
||||||
|
|
||||||
@ -23,6 +20,80 @@ public class SemanticTest {
|
|||||||
SemanticAnalyzer.clearAnalyzier();
|
SemanticAnalyzer.clearAnalyzier();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void alreadyDeclaredMethod() {
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
ProgramNode programNode = null;
|
||||||
|
try{
|
||||||
|
programNode = objectMapper.readValue(new File("src/test/resources/semantic/alreadyDeclearedMethod.json"), ProgramNode.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
|
assertEquals(1, SemanticAnalyzer.errors.size());
|
||||||
|
assertEquals(true, SemanticAnalyzer.errors.get(0) instanceof AlreadyDeclearedException);
|
||||||
|
assertEquals(null, typedAst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void duplicatedParamInMethod() {
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
ProgramNode programNode = null;
|
||||||
|
try{
|
||||||
|
programNode = objectMapper.readValue(new File("src/test/resources/semantic/duplicatedParamInMethod.json"), ProgramNode.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
|
assertEquals(1, SemanticAnalyzer.errors.size());
|
||||||
|
assertInstanceOf(AlreadyDeclearedException.class, SemanticAnalyzer.errors.getFirst());
|
||||||
|
assertNull(typedAst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void correctMethodOverloading() {
|
||||||
|
|
||||||
|
//Arrange
|
||||||
|
|
||||||
|
ObjectMapper objectMapper = new ObjectMapper();
|
||||||
|
ProgramNode programNode = null;
|
||||||
|
try{
|
||||||
|
programNode = objectMapper.readValue(new File("src/test/resources/semantic/correctMethodOverloading.json"), ProgramNode.class);
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
//Act
|
||||||
|
|
||||||
|
ASTNode typedAst = SemanticAnalyzer.generateTast(programNode);
|
||||||
|
|
||||||
|
//Assert
|
||||||
|
|
||||||
|
assertEquals(0, SemanticAnalyzer.errors.size());
|
||||||
|
assertNotEquals(null, typedAst);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void alreadyDeclaredLocalFieldVar() {
|
public void alreadyDeclaredLocalFieldVar() {
|
||||||
|
|
||||||
|
64
src/test/resources/semantic/alreadyDeclearedMethod.json
Normal file
64
src/test/resources/semantic/alreadyDeclearedMethod.json
Normal file
@ -0,0 +1,64 @@
|
|||||||
|
{
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"identifier": "testClass1",
|
||||||
|
"accessType": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"members": [
|
||||||
|
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasConstructor": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
70
src/test/resources/semantic/correctMethodOverloading.json
Normal file
70
src/test/resources/semantic/correctMethodOverloading.json
Normal file
@ -0,0 +1,70 @@
|
|||||||
|
{
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"identifier": "testClass1",
|
||||||
|
"accessType": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasConstructor": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
45
src/test/resources/semantic/duplicatedParamInMethod.json
Normal file
45
src/test/resources/semantic/duplicatedParamInMethod.json
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
{
|
||||||
|
"classes": [
|
||||||
|
{
|
||||||
|
"identifier": "testClass1",
|
||||||
|
"accessType": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"members": [
|
||||||
|
{
|
||||||
|
"@type": "Method",
|
||||||
|
"visibility": {
|
||||||
|
"enumAccessTypeNode": "PUBLIC"
|
||||||
|
},
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "testMethod",
|
||||||
|
"parameters": {
|
||||||
|
"parameters": [
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"type": {
|
||||||
|
"@type": "Base",
|
||||||
|
"enumType": "INT"
|
||||||
|
},
|
||||||
|
"identifier": "param1"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"statements": [
|
||||||
|
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"hasConstructor": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user