|
@@ -12,40 +12,63 @@ import org.junit.Test;
|
|
|
|
|
|
|
|
import java.io.StringWriter;
|
|
import java.io.StringWriter;
|
|
|
import java.util.Arrays;
|
|
import java.util.Arrays;
|
|
|
|
|
+import java.util.Collection;
|
|
|
import java.util.List;
|
|
import java.util.List;
|
|
|
import java.util.Map;
|
|
import java.util.Map;
|
|
|
|
|
|
|
|
public class ObjectWalkerTest {
|
|
public class ObjectWalkerTest {
|
|
|
|
|
|
|
|
|
|
+ Foo foo0 = Foo.builder()
|
|
|
|
|
+ .bar(new Bar("456", "0xFAD"))
|
|
|
|
|
+ .name("John")
|
|
|
|
|
+ .name("Jenny")
|
|
|
|
|
+ .name("Adam")
|
|
|
|
|
+ .point(17, new Point(21,6,4))
|
|
|
|
|
+ .point(18, new Point(21,6,4))
|
|
|
|
|
+ .point(3, new Point(9,9,9))
|
|
|
|
|
+ .point(8, new Point(9,9,9))
|
|
|
|
|
+ .point(21, new Point(9,9,9))
|
|
|
|
|
+ .point(88, new Point(21,6,4))
|
|
|
|
|
+ .build();
|
|
|
|
|
+
|
|
|
|
|
+ Foo foo1 = Foo.builder()
|
|
|
|
|
+ .bar(new Bar("456", "0xFAD"))
|
|
|
|
|
+ .name("John")
|
|
|
|
|
+ .name("Jenny")
|
|
|
|
|
+ .name("Adam")
|
|
|
|
|
+ .point(17, new Point(21,6,4))
|
|
|
|
|
+ .point(18, new Point(21,6,4))
|
|
|
|
|
+ .point(88, new Point(21,6,4))
|
|
|
|
|
+ .build();
|
|
|
|
|
+
|
|
|
|
|
+ Foo foo2 = Foo.builder()
|
|
|
|
|
+ .bar(new Bar("55", "0xEE"))
|
|
|
|
|
+ .name("Tom")
|
|
|
|
|
+ .point(33, new Point(3,3,3))
|
|
|
|
|
+ .build();
|
|
|
|
|
+
|
|
|
|
|
+ Foo foo3 = Foo.builder()
|
|
|
|
|
+ .bar(new Bar("66", "0x11"))
|
|
|
|
|
+ .name("Ann")
|
|
|
|
|
+ .point(77, new Point(7,7,7))
|
|
|
|
|
+ .build();
|
|
|
|
|
+
|
|
|
@Test
|
|
@Test
|
|
|
public void basic() {
|
|
public void basic() {
|
|
|
- Foo foo = Foo.builder()
|
|
|
|
|
- .bar(new Bar("456", "0xFAD"))
|
|
|
|
|
- .name("John")
|
|
|
|
|
- .name("Jenny")
|
|
|
|
|
- .name("Adam")
|
|
|
|
|
- .point(17, new Point(21,6,4))
|
|
|
|
|
- .point(18, new Point(21,6,4))
|
|
|
|
|
- .point(3, new Point(9,9,9))
|
|
|
|
|
- .point(8, new Point(9,9,9))
|
|
|
|
|
- .point(21, new Point(9,9,9))
|
|
|
|
|
- .point(88, new Point(21,6,4))
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
- ObjectWalker.walk(foo, new ObjectVisitor.AbstractVisitor() {
|
|
|
|
|
|
|
+ ObjectWalker.walk(foo0, new ObjectVisitor.AbstractVisitor() {
|
|
|
@Override
|
|
@Override
|
|
|
public boolean visitObject(ObjectContext ctx) {
|
|
public boolean visitObject(ObjectContext ctx) {
|
|
|
- System.out.printf(" - [%-12s] %-40s | %s = %s%n",
|
|
|
|
|
|
|
+ System.out.printf(
|
|
|
|
|
+ " - [%-12s] %-40s | %s = %s%n",
|
|
|
ctx.getClass().getSimpleName(),
|
|
ctx.getClass().getSimpleName(),
|
|
|
ctx.typePath(),
|
|
ctx.typePath(),
|
|
|
ctx.namePath(),
|
|
ctx.namePath(),
|
|
|
ctx.value()
|
|
ctx.value()
|
|
|
);
|
|
);
|
|
|
|
|
|
|
|
- if(ctx.value() instanceof String) {
|
|
|
|
|
|
|
+ if (ctx.value() instanceof String) {
|
|
|
return false;
|
|
return false;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
return true;
|
|
return true;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|
|
@@ -53,27 +76,14 @@ public class ObjectWalkerTest {
|
|
|
|
|
|
|
|
@Test
|
|
@Test
|
|
|
public void format() {
|
|
public void format() {
|
|
|
- Foo foo = Foo.builder()
|
|
|
|
|
- .bar(new Bar("456", "0xFAD"))
|
|
|
|
|
- .name("John")
|
|
|
|
|
- .name("Jenny")
|
|
|
|
|
- .name("Adam")
|
|
|
|
|
- .point(17, new Point(21,6,4))
|
|
|
|
|
- .point(18, new Point(21,6,4))
|
|
|
|
|
- .point(3, new Point(9,9,9))
|
|
|
|
|
- .point(8, new Point(9,9,9))
|
|
|
|
|
- .point(21, new Point(9,9,9))
|
|
|
|
|
- .point(88, new Point(21,6,4))
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
FormatVisitor visitor = new FormatRules()
|
|
FormatVisitor visitor = new FormatRules()
|
|
|
.hint(Object.class, "{namePath,text} = {value}")
|
|
.hint(Object.class, "{namePath,text} = {value}")
|
|
|
.term(ObjectContext::isNull, "{namePath,text} = <null>")
|
|
.term(ObjectContext::isNull, "{namePath,text} = <null>")
|
|
|
.term(String.class, "{namePath,text} = '{value}'")
|
|
.term(String.class, "{namePath,text} = '{value}'")
|
|
|
.visitor(new StringWriter());
|
|
.visitor(new StringWriter());
|
|
|
|
|
|
|
|
- ObjectWalker.walk(foo, "foo1", visitor);
|
|
|
|
|
- ObjectWalker.walk(foo, "foo2", visitor);
|
|
|
|
|
|
|
+ ObjectWalker.walk(foo0, "foo1", visitor);
|
|
|
|
|
+ ObjectWalker.walk(foo0, "foo2", visitor);
|
|
|
|
|
|
|
|
System.out.println("===");
|
|
System.out.println("===");
|
|
|
System.out.println(visitor.toString());
|
|
System.out.println(visitor.toString());
|
|
@@ -81,17 +91,7 @@ public class ObjectWalkerTest {
|
|
|
|
|
|
|
|
@Test
|
|
@Test
|
|
|
public void visitors() {
|
|
public void visitors() {
|
|
|
- Foo foo = Foo.builder()
|
|
|
|
|
- .bar(new Bar("456", "0xFAD"))
|
|
|
|
|
- .name("John")
|
|
|
|
|
- .name("Jenny")
|
|
|
|
|
- .name("Adam")
|
|
|
|
|
- .point(17, new Point(21,6,4))
|
|
|
|
|
- .point(18, new Point(21,6,4))
|
|
|
|
|
- .point(88, new Point(21,6,4))
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
- ObjectWalker.walk(foo, new ObjectVisitor.AbstractVisitor() {
|
|
|
|
|
|
|
+ ObjectWalker.walk(foo0, new ObjectVisitor.AbstractVisitor() {
|
|
|
@Override
|
|
@Override
|
|
|
public boolean visitObject(ObjectContext ctx) {
|
|
public boolean visitObject(ObjectContext ctx) {
|
|
|
System.out.printf(" - [%-12s] %-40s | %s = %s%n",
|
|
System.out.printf(" - [%-12s] %-40s | %s = %s%n",
|
|
@@ -112,28 +112,6 @@ public class ObjectWalkerTest {
|
|
|
|
|
|
|
|
@Test
|
|
@Test
|
|
|
public void recursive() {
|
|
public void recursive() {
|
|
|
- Foo foo1 = Foo.builder()
|
|
|
|
|
- .bar(new Bar("456", "0xFAD"))
|
|
|
|
|
- .name("John")
|
|
|
|
|
- .name("Jenny")
|
|
|
|
|
- .name("Adam")
|
|
|
|
|
- .point(17, new Point(21,6,4))
|
|
|
|
|
- .point(18, new Point(21,6,4))
|
|
|
|
|
- .point(88, new Point(21,6,4))
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
- Foo foo2 = Foo.builder()
|
|
|
|
|
- .bar(new Bar("55", "0xEE"))
|
|
|
|
|
- .name("Tom")
|
|
|
|
|
- .point(33, new Point(3,3,3))
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
- Foo foo3 = Foo.builder()
|
|
|
|
|
- .bar(new Bar("66", "0x11"))
|
|
|
|
|
- .name("Ann")
|
|
|
|
|
- .point(77, new Point(7,7,7))
|
|
|
|
|
- .build();
|
|
|
|
|
-
|
|
|
|
|
List<Foo> list = Arrays.asList(foo1, foo2, foo1, foo3);
|
|
List<Foo> list = Arrays.asList(foo1, foo2, foo1, foo3);
|
|
|
|
|
|
|
|
ObjectWalker.walk(list, ctx -> {
|
|
ObjectWalker.walk(list, ctx -> {
|
|
@@ -155,6 +133,36 @@ public class ObjectWalkerTest {
|
|
|
});
|
|
});
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ @Test
|
|
|
|
|
+ public void recursiveFormat() {
|
|
|
|
|
+ List<Foo> list = Arrays.asList(foo1, foo2, foo1, foo3);
|
|
|
|
|
+
|
|
|
|
|
+ FormatVisitor visitor = new FormatRules()
|
|
|
|
|
+ .hint(List.class,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} {typeName}")
|
|
|
|
|
+ .hint(Collection.class,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} {typeName}")
|
|
|
|
|
+ .hint(Map.class,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} {typeName}")
|
|
|
|
|
+
|
|
|
|
|
+ .term(ObjectContext::isNull,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} <null>")
|
|
|
|
|
+ .term(String.class,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} String = '{value}'")
|
|
|
|
|
+
|
|
|
|
|
+ .term(ObjectContext::isVisited,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} <ref> = #{ref}")
|
|
|
|
|
+ .hint(Object.class,
|
|
|
|
|
+ "{id,text,4}.{namePath,text,-50} {actual.shortname} = {value}")
|
|
|
|
|
+
|
|
|
|
|
+ .visitor(new StringWriter());
|
|
|
|
|
+
|
|
|
|
|
+ ObjectWalker.walk(list, "list", visitor);
|
|
|
|
|
+ System.out.println(visitor.toString());
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
@Builder
|
|
@Builder
|
|
|
public static class Foo {
|
|
public static class Foo {
|
|
|
private final Bar bar;
|
|
private final Bar bar;
|