diff --git a/test/be/jeffcheasey88/peeratcode/parser/java/OperationTests.java b/test/be/jeffcheasey88/peeratcode/parser/java/OperationTests.java index 42a2c42..5f69a1b 100644 --- a/test/be/jeffcheasey88/peeratcode/parser/java/OperationTests.java +++ b/test/be/jeffcheasey88/peeratcode/parser/java/OperationTests.java @@ -7,6 +7,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.function.BiConsumer; +import java.util.function.BiFunction; import org.junit.jupiter.api.Test; @@ -23,6 +24,7 @@ import be.jeffcheasey88.peeratcode.parser.java.operation.ContinueOperation; import be.jeffcheasey88.peeratcode.parser.java.operation.DoOperation; import be.jeffcheasey88.peeratcode.parser.java.operation.ElseOperation; import be.jeffcheasey88.peeratcode.parser.java.operation.FinallyOperation; +import be.jeffcheasey88.peeratcode.parser.java.operation.ForOperation; import be.jeffcheasey88.peeratcode.parser.java.operation.IfOperation; import be.jeffcheasey88.peeratcode.parser.java.operation.ReturnOperation; import be.jeffcheasey88.peeratcode.parser.java.operation.SynchronizedOperation; @@ -35,12 +37,6 @@ import be.jeffcheasey88.peeratcode.parser.state.StateTree; public class OperationTests { public static StateTree get(){ - BiConsumer methodCallConcat = (bag, token) -> { - Token value = bag.get(); - if(value == null) bag.set(token); - else bag.set(value.concat(token)); - }; - StateTree operation = new StateTree<>(); StateTree operation_name = operation.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set("left", local.get()))); operation_name.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))).end(); @@ -210,7 +206,7 @@ public class OperationTests { StateTree operation_for = operation.then((validator) -> validator.validate((token) -> token.getValue().equals("for"))) .then((validator) -> validator.validate((token) -> token.getValue().equals("("))); - + StateTree operation_for_first_part = operation_for.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); @@ -249,23 +245,45 @@ public class OperationTests { StateTree operation_for_second_part = operation_for_first_part.then((validator) -> validator.validate((token) -> token.getValue().equals(";"))); - operation_for_first_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set(null))) + operation_for_first_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set("condition", local.get()))) .then(operation_for_second_part); + BiFunction operation_for_builder = (parent, bag) -> { + + List init_vars = new ArrayList<>(); + List init_values = new ArrayList<>(); + List updates = new ArrayList<>(); + + if(bag.has("init_type")){ + + } + + ForOperation op = new ForOperation(init_vars, init_values, bag.get("condition"), updates); + if(parent instanceof OperationContainer) ((OperationContainer)parent).addOperation(op); + return op; + }; + StateTree operation_for_end = operation_for_second_part.then((validator) -> validator.validate((token) -> token.getValue().equals(")"))); - operation_for_end.end((a,b) -> a); + operation_for_end.end(operation_for_builder); operation_for_end.then((validator) -> validator.validate((token) -> token.getValue().equals("{"))) - .end((a,b) -> a) + .end(operation_for_builder) // .multiple(function_container) .unique((validator) -> validator.validate((token) -> token.getValue().equals("}"))) - .end((a,b) -> a); + .end(); operation_for_assign.then((validator) -> validator.validate((token) -> token.getValue().equals(":"))) .then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set(null))) .then(operation_for_end); - StateTree operation_for_update = operation_for_second_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> global.set(null))); + StateTree operation_for_update = operation_for_second_part.then(new RedirectStateTree<>(ValueTests.get(), (global, local) -> { + List list = global.get("updates"); + if(list == null){ + list = new ArrayList<>(); + global.set("updates", list); + } + list.add(local.get()); + })); operation_for_update.then(operation_for_end); operation_for_update.then((validator) -> validator.validate((token) -> token.getValue().equals(","))) .then(operation_for_update); @@ -370,6 +388,8 @@ public class OperationTests { @Test void forOp() throws Exception{ testCase("for(;;){}"); + testCase("for(int i = 4,j=6;j < i;i++,j++){}"); + testCase("for(i = 4,j=6;j < i;i++,j++){}"); } @Test