125 lines
3.6 KiB
Java
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;
|
|
}
|
|
}
|