package dev.peerat.parser.java; import static org.junit.jupiter.api.Assertions.assertEquals; import org.junit.jupiter.api.Test; import dev.peerat.parser.Parser; import dev.peerat.parser.Token; import dev.peerat.parser.TokenValidator; import dev.peerat.parser.java.Annotation.AnnotableBuffer; import dev.peerat.parser.state.RedirectStateTree; import dev.peerat.parser.state.StateTree; public class ClassTests{ public static StateTree get(){ StateTree clazz_ = new StateTree<>(); StateTree clazz = new StateTree<>(); // clazz_container.then(clazz_); StateTree clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class"))) .then(new RedirectStateTree<>(TypeTests.get(), (global, local) -> global.set("name", local.get()))); clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .end((parent, bag) -> { Class current = new Class((((AnnotableBuffer)parent).getAnnotationBuffer()), bag.get("name")); if(parent instanceof ClassContainer) ((ClassContainer)parent).addClass(current); return current; }) // .multiple(clazz_container) .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))) .end((a,b) -> a); StateTree clazz_implement = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("implements"))); StateTree clazz_implement_name = clazz_implement.then(new RedirectStateTree<>(TypeTests.get(), (global, local) -> { Token token = global.get("implement"); if(token == null) global.set("implement", local.get()); else global.set("implement", token.concat(local.get())); })); clazz_implement_name.then((validator) -> validator.validate( (token) -> token.getValue().equals(","), (bag, token) -> bag.set("implement", bag.get("implement").concat(token)))).then(clazz_implement_name); clazz_implement_name.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .end((parent, bag) -> { Class current = new Class((((AnnotableBuffer)parent).getAnnotationBuffer()),bag.get("name"), bag.get("extend"), bag.get("implements")); if(parent instanceof ClassContainer) ((ClassContainer)parent).addClass(current); return current; }) // .multiple(clazz_container) .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))) .end((a,b) -> a); StateTree clazz_extend = clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("extends"))) .then(new RedirectStateTree<>(TypeTests.get(), (global, local) -> global.set("extend", local.get()))); clazz_extend.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) .end((parent, bag) -> { Class current = new Class((((AnnotableBuffer)parent).getAnnotationBuffer()), bag.get("name"), bag.get("extend"), bag.get("implements")); if(parent instanceof ClassContainer) ((ClassContainer)parent).addClass(current); return current; }) // .multiple(clazz_container) .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))) .end((a,b) -> a); clazz_extend.then(clazz_implement); StateTree clazz_mod = clazz_.then(new RedirectStateTree<>(ModifierTests.get(), (global, local) -> global.set("modifier", local))); clazz_.then(clazz); clazz_mod.then(clazz); return clazz_; } private static Parser parser = new Parser(){ { setTokenizer(ModifierTests.TOKENIZER); setStateTree(get()); } }; JavaElement testCase(String value) throws Exception{ TokenValidator.TOKENS = 0; TokenValidator.MAX_VALIDATE = 0; JavaElement result = null; parser.parse(value, result); assertEquals(TokenValidator.TOKENS, TokenValidator.MAX_VALIDATE); return result; } // @Test // void main() throws Exception{ // JavaElement result = testCase("public static class Test extends MyTest> implements Ahbon{}"); // } }