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 texts = new ArrayList<>(); private List> checkers = new ArrayList<>(); public void register(String text, Consumer checker){ this.texts.add(text); this.checkers.add(checker); this.size++; } @Test void main(){ String text = null; try{ Parser 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()); e.printStackTrace(); } } 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; } }