From 5edc98ad3eb0fbc2d728ea0a7d5b1f0392ba218f Mon Sep 17 00:00:00 2001
From: jeffcheasey88 <66554203+jeffcheasey88@users.noreply.github.com>
Date: Wed, 19 Jul 2023 10:02:24 +0200
Subject: [PATCH] Unit Test for workspace & Parser type
---
.classpath | 2 +
.../peeratcode/parser/TokenValidator.java | 6 ++-
.../peeratcode/parser/java/JavaFile.java | 6 +--
.../peeratcode/parser/java/JavaParser.java | 40 +++++++++++++++-
.../peeratcode/parser/state/StateTree.java | 1 -
test/GlobalCover.java | 47 +++++++++++++++++++
6 files changed, 95 insertions(+), 7 deletions(-)
create mode 100644 test/GlobalCover.java
diff --git a/.classpath b/.classpath
index 51a8bba..c7f1dff 100644
--- a/.classpath
+++ b/.classpath
@@ -2,5 +2,7 @@
+
+
diff --git a/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java b/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java
index b7792f2..81d9b0d 100644
--- a/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java
+++ b/src/be/jeffcheasey88/peeratcode/parser/TokenValidator.java
@@ -6,6 +6,7 @@ import java.util.function.Function;
public class TokenValidator{
public static int MAX_VALIDATE = 0;
+ public static int TOKENS = 0;
private Token[] elements;
private int index;
@@ -29,7 +30,10 @@ public class TokenValidator{
public boolean validate(Function action){
if(validated >= this.elements.length) return false;
if(action.apply(this.elements[validated])){
- if(validated+1 > MAX_VALIDATE) MAX_VALIDATE = validated+1;
+ if(validated+1 > MAX_VALIDATE){
+ MAX_VALIDATE = validated+1;
+ TOKENS = elements.length;
+ }
this.validated++;
return true;
}
diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java
index 3721b07..3021007 100644
--- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java
+++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaFile.java
@@ -20,19 +20,19 @@ public class JavaFile extends JavaElement{
JavaFile setPackage(Bag bag){
this.pack = bag.>get();
- System.out.println("setPackage "+pack);
+// System.out.println("setPackage "+pack);
return this;
}
JavaFile addImport(Bag bag){
this.imports.add(bag.>get());
- System.out.println("addImport "+imports.get(imports.size()-1));
+// System.out.println("addImport "+imports.get(imports.size()-1));
return this;
}
Class setClass(Class clazz){
this.mainClazz = clazz;
- System.out.println("setClass "+clazz);
+// System.out.println("setClass "+clazz);
return clazz;
}
}
diff --git a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java
index e8e732a..72ad5c0 100644
--- a/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java
+++ b/src/be/jeffcheasey88/peeratcode/parser/java/JavaParser.java
@@ -11,6 +11,7 @@ import java.util.List;
import be.jeffcheasey88.peeratcode.parser.Parser;
import be.jeffcheasey88.peeratcode.parser.Token;
+import be.jeffcheasey88.peeratcode.parser.TokenType;
import be.jeffcheasey88.peeratcode.parser.Tokenizer;
import be.jeffcheasey88.peeratcode.parser.state.BuilderStateTree;
import be.jeffcheasey88.peeratcode.parser.state.RedirectStateTree;
@@ -20,6 +21,10 @@ public class JavaParser extends Parser {
public static long time;
+ static {
+ time = System.currentTimeMillis();
+ }
+
public static void main(String[] args) throws Exception{
File file = new File("C:\\Users\\jeffc\\eclipse-workspace\\peer-at-code-backend\\src\\be\\jeffcheasey88\\peeratcode\\routes\\Result.java");
BufferedReader reader = new BufferedReader(new FileReader(file));
@@ -49,12 +54,43 @@ public class JavaParser extends Parser {
})) mod = true;
return mod;
});
+ modifier.end((a,b) -> a);
+
+ StateTree type = new StateTree().then((validator) ->
+ validator.validate(
+ (token) -> token.getType().equals(TokenType.NAME),
+ (bag, token) -> bag.set(token)));
+ StateTree type_generic_begin = type.then((validator) -> validator.validate(
+ (token) -> token.getValue().equals("<"),
+ (bag, token) -> bag.set(bag.get().concat(token))));
+ StateTree type_generic_name = type_generic_begin.then((validator) ->
+ validator.validate(
+ (token) -> token.getType().equals(TokenType.NAME),
+ (bag, token) -> bag.set(token)));
+ StateTree type_generic_split = type_generic_name.then((validator) -> validator.validate(
+ (token) -> token.getValue().equals(","),
+ (bag, token) -> bag.set(bag.get().concat(token))));
+ StateTree type_generic_end = type_generic_name.then((validator) -> validator.validate(
+ (token) -> token.getValue().equals(">"),
+ (bag, token) -> bag.set(bag.get().concat(token)))).loop();
+
+ type.end((a,b) -> a);
+ type_generic_begin.then(type_generic_name);
+ type_generic_split.then(type_generic_name);
+ type_generic_end.then(type_generic_name);
+ type_generic_end.then(type_generic_split);
+ type_generic_end.end((a,b) -> a);
StateTree clazz_ = new StateTree<>();
StateTree clazz = new StateTree<>();
- clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier"));
+ StateTree clazz_base = clazz.then((validator) -> validator.validate((token) -> token.getValue().equals("class")))
+ .then(new RedirectStateTree<>(type, (bag) -> "name"));
+ clazz_base.then((validator) -> validator.validate((token) -> token.getValue().equals("{")))
+ .end((javafile, bag) -> new Class(bag));
+ StateTree clazz_mod = clazz_.then(new RedirectStateTree<>(modifier, (bag) -> "modifier"));
+ clazz_mod.then(clazz);
StateTree importState = new StateTree<>();
importState.then((validator) -> {
@@ -94,7 +130,7 @@ public class JavaParser extends Parser {
return false;
}).end((javafile, bag) -> javafile.setPackage(bag));
pack.multiple(importState);
- pack.thenNoChild(clazz_);
+ pack.multiple(clazz_);
System.out.println((System.currentTimeMillis()-time)+"ms");
diff --git a/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java b/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java
index d9fb928..77fd960 100644
--- a/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java
+++ b/src/be/jeffcheasey88/peeratcode/parser/state/StateTree.java
@@ -25,7 +25,6 @@ public class StateTree{
TokenValidator validator = new TokenValidator(tokenizer.getTokens().toArray(new Token[0]));
while(validator.hasNext()){
BuilderStateTree build = internalSeed(validator, container);
- System.out.println("Validate "+validator.MAX_VALIDATE+"/"+tokenizer.getTokens().size()+" tokens !");
if(build == null) break;
build.build(validator, container);
}
diff --git a/test/GlobalCover.java b/test/GlobalCover.java
new file mode 100644
index 0000000..f4e05df
--- /dev/null
+++ b/test/GlobalCover.java
@@ -0,0 +1,47 @@
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.jupiter.api.Test;
+
+import be.jeffcheasey88.peeratcode.parser.TokenValidator;
+import be.jeffcheasey88.peeratcode.parser.java.JavaFile;
+import be.jeffcheasey88.peeratcode.parser.java.JavaParser;
+
+class GlobalCover {
+
+ @Test
+ void workspace() throws Exception{
+ JavaParser parser = new JavaParser();
+
+ List files = files(new File("C:\\Users\\jeffc\\eclipse-workspace"));
+ int validated = 0;
+ double tokens = 0;
+ int count = 0;
+
+ long time = System.currentTimeMillis();
+ for(File file : files){
+ if(file.getName().endsWith(".java")){
+ parser.parse(new BufferedReader(new FileReader(file)), new JavaFile());
+ validated += TokenValidator.MAX_VALIDATE;
+ tokens += TokenValidator.TOKENS;
+ TokenValidator.MAX_VALIDATE = 0;
+ TokenValidator.TOKENS = 0;
+ count++;
+ }
+ }
+ System.out.println("Load time : "+((System.currentTimeMillis()-time)/1000.0)+"s");
+ System.out.println(((validated/tokens)*100.0)+"% validated in "+count+" files !");
+ }
+
+ private List files(File dir){
+ List result = new ArrayList<>();
+ if(dir.isDirectory()){
+ for(File file : dir.listFiles()) result.addAll(files(file));
+ }else result.add(dir);
+ return result;
+ }
+
+}