peer-at-code-parser-java/test/dev/peerat/parser/java/element/BaseElementTests.java
2024-10-02 14:29:59 +02:00

125 lines
3.6 KiB
Java

package dev.peerat.parser.java.element;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.function.Consumer;
import org.junit.jupiter.api.Test;
import dev.peerat.parser.Parser;
import dev.peerat.parser.Token;
import dev.peerat.parser.java.Class;
import dev.peerat.parser.java.ClassBase;
import dev.peerat.parser.java.Enumeration;
import dev.peerat.parser.java.Function;
import dev.peerat.parser.java.Interface;
import dev.peerat.parser.java.JavaElement;
import dev.peerat.parser.java.JavaFile;
import dev.peerat.parser.java.JavaParser;
import dev.peerat.parser.java.Operation;
import dev.peerat.parser.java.Variable;
public class BaseElementTests{
private int size;
private List<String> texts = new ArrayList<>();
private List<Consumer<JavaFile>> checkers = new ArrayList<>();
public void register(String text, Consumer<JavaFile> checker){
this.texts.add(text);
this.checkers.add(checker);
this.size++;
}
@Test
void main(){
String text = null;
try{
Parser<JavaElement> parser = new JavaParser();
for(int i = 0; i < size; i++){
System.out.printf("----------------------- Test %,4d ------------------------\n", (i+1));
JavaFile javaFile = new JavaFile();
parser.parse((text = texts.get(i)), javaFile);
checkers.get(i).accept(javaFile);
}
System.out.println("["+getClass().getSimpleName()+"] passed "+size+" tests");
}catch(Exception|AssertionError e){
System.err.println("["+getClass().getSimpleName()+"] failed "+text+" for cause "+e.getMessage());
throw new RuntimeException(e);
}
}
public void printObject(Object object){
try {
printObject(object, "");
}catch(Exception ex) {
ex.printStackTrace();
}
}
private void printObject(Object object, String spaces) throws Exception{
System.out.println(spaces+"["+object.getClass()+"]");
for(Field field : object.getClass().getDeclaredFields()){
field.setAccessible(true);
System.out.println(spaces+" - "+field.getName());
Object value = field.get(object);
if(value == null) System.out.println(spaces+"\tnull");
else{
if(value.getClass().getPackage().getName().startsWith("java.lang") || value.getClass().isEnum()){
System.out.println(spaces+"\t"+value);
continue;
}
printObject(value, spaces+"\t");
}
}
}
public void assertToken(String value, Token token){
assertNotNull(token);
assertEquals(value, token.getValue());
}
public Class checkClass(JavaFile javafile){
ClassBase clazzb = javafile.getMainClass();
assertNotNull(clazzb);
assertTrue(clazzb instanceof Class);
return (Class)clazzb;
}
public Interface checkInterface(JavaFile javafile){
ClassBase clazzb = javafile.getMainClass();
assertNotNull(clazzb);
assertTrue(clazzb instanceof Interface);
return (Interface)clazzb;
}
public Enumeration checkEnum(JavaFile javafile){
ClassBase clazzb = javafile.getMainClass();
assertNotNull(clazzb);
assertTrue(clazzb instanceof Enumeration);
return (Enumeration)clazzb;
}
public Function checkFunction(JavaElement element){
assertNotNull(element);
assertTrue(element instanceof Function);
return (Function)element;
}
public Variable checkVariable(JavaElement element){
assertNotNull(element);
assertTrue(element instanceof Variable);
return (Variable)element;
}
public Operation checkOperation(JavaElement element){
assertNotNull(element);
assertTrue(element instanceof Operation);
return (Operation)element;
}
}