You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2018/09/25 15:46:48 UTC
[41/49] tinkerpop git commit: Apply StringEscapeUtils in
GroovyTranslator#convertToString(String)
Apply StringEscapeUtils in GroovyTranslator#convertToString(String)
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/aff2037b
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/aff2037b
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/aff2037b
Branch: refs/heads/TINKERPOP-2039
Commit: aff2037b5973c62c0292ab3065761e923899aa57
Parents: 207c660
Author: Justin Chu <15...@users.noreply.github.com>
Authored: Fri Sep 21 15:12:26 2018 -0400
Committer: Justin Chu <15...@users.noreply.github.com>
Committed: Mon Sep 24 11:22:52 2018 -0400
----------------------------------------------------------------------
.../groovy/jsr223/GroovyTranslatorTest.java | 69 ++++++++++++++++++++
.../gremlin/groovy/jsr223/GroovyTranslator.java | 4 +-
2 files changed, 72 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/aff2037b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
index 56f9699..942f1a5 100644
--- a/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
+++ b/gremlin-groovy-test/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslatorTest.java
@@ -30,7 +30,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SubgraphStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.TranslationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy;
+import org.apache.tinkerpop.gremlin.structure.Edge;
import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge;
+import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex;
import org.apache.tinkerpop.gremlin.util.function.Lambda;
import org.junit.Test;
@@ -116,6 +119,17 @@ public class GroovyTranslatorTest extends AbstractGremlinTest {
assertEquals(7, sacks.get(5).intValue());
//
assertEquals(24, t.getSideEffects().<Number>get("lengthSum").intValue());
+
+ final String script = GroovyTranslator.of("g").translate(t.getBytecode());
+ assertEquals("g.withSideEffect(\"lengthSum\",(int) 0).withSack((int) 1)" +
+ ".V()" +
+ ".filter({it.get().label().equals('person')})" +
+ ".flatMap({it.get().vertices(Direction.OUT)})" +
+ ".map({it.get().value('name').length()})" +
+ ".sideEffect({ x -> x.sideEffects(\"lengthSum\", x.<Integer>sideEffects('lengthSum') + x.get()) })" +
+ ".order().by({a,b -> a <=> b})" +
+ ".sack({ a,b -> a + b })",
+ script);
}
@Test
@@ -141,4 +155,59 @@ public class GroovyTranslatorTest extends AbstractGremlinTest {
public void shouldHaveValidToString() {
assertEquals("translator[h:gremlin-groovy]", GroovyTranslator.of("h").toString());
}
+
+ @Test
+ public void shouldEscapeStrings() {
+ final GraphTraversalSource g = graph.traversal();
+ final String script = GroovyTranslator.of("g").translate(g.addV("customer")
+ .property("customer_id", 501L)
+ .property("name", "Foo\u0020Bar")
+ .property("age", 25)
+ .property("special", "`~!@#$%^&*()-_=+[{]}\\|;:'\",<.>/?")
+ .asAdmin().getBytecode());
+
+ assertEquals("g.addV(\"customer\")" +
+ ".property(\"customer_id\",501L)" +
+ ".property(\"name\",\"Foo Bar\")" +
+ ".property(\"age\",(int) 25)" +
+ ".property(\"special\",\"\"\"`~!@#\\$%^&*()-_=+[{]}\\\\|;:'\\\",<.>/?\"\"\")",
+ script);
+ }
+
+ @Test
+ public void shouldHandleVertexAndEdge() {
+ final GraphTraversalSource g = graph.traversal();
+
+ final Object id1 = "customer:10:foo\u0020bar\u0020\u0024100#90"; // customer:10:foo bar $100#90
+ final Vertex vertex1 = DetachedVertex.build().setLabel("customer").setId(id1)
+ .create();
+ final String script1 = GroovyTranslator.of("g").translate(g.V(vertex1).asAdmin().getBytecode());
+ assertEquals("g.V(new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex(" +
+ "\"customer:10:foo bar \\$100#90\"," +
+ "\"customer\", Collections.emptyMap()))",
+ script1);
+
+ final Object id2 = "user:20:foo\\u0020bar\\u005c\\u0022mr\\u005c\\u0022\\u00241000#50"; // user:20:foo\u0020bar\u005c\u0022mr\u005c\u0022\u00241000#50
+ final Vertex vertex2 = DetachedVertex.build().setLabel("user").setId(id2)
+ .create();
+ final String script2 = GroovyTranslator.of("g").translate(g.V(vertex2).asAdmin().getBytecode());
+ assertEquals("g.V(new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedVertex(" +
+ "\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\"," +
+ "\"user\", Collections.emptyMap()))",
+ script2);
+
+ final Object id3 = "knows:30:foo\u0020bar\u0020\u0024100:\\u0020\\u0024500#70";
+ final Edge edge = DetachedEdge.build().setLabel("knows").setId(id3)
+ .setOutV((DetachedVertex) vertex1)
+ .setInV((DetachedVertex) vertex2)
+ .create();
+ final String script3 = GroovyTranslator.of("g").translate(g.E(edge).asAdmin().getBytecode());
+ assertEquals("g.E(new org.apache.tinkerpop.gremlin.structure.util.detached.DetachedEdge(" +
+ "\"knows:30:foo bar \\$100:\\\\u0020\\\\u0024500#70\"," +
+ "\"knows\",Collections.emptyMap()," +
+ "\"customer:10:foo bar \\$100#90\",\"customer\"," +
+ "\"user:20:foo\\\\u0020bar\\\\u005c\\\\u0022mr\\\\u005c\\\\u0022\\\\u00241000#50\",\"user\"))",
+ script3);
+ }
+
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/aff2037b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
----------------------------------------------------------------------
diff --git a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
index 6e86ce9..0452e0b 100644
--- a/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
+++ b/gremlin-groovy/src/main/java/org/apache/tinkerpop/gremlin/groovy/jsr223/GroovyTranslator.java
@@ -19,6 +19,7 @@
package org.apache.tinkerpop.gremlin.groovy.jsr223;
+import groovy.json.StringEscapeUtils;
import org.apache.commons.configuration.ConfigurationConverter;
import org.apache.tinkerpop.gremlin.process.traversal.Bytecode;
import org.apache.tinkerpop.gremlin.process.traversal.P;
@@ -115,7 +116,8 @@ public final class GroovyTranslator implements Translator.ScriptTranslator {
else if (object instanceof Traversal)
return convertToString(((Traversal) object).asAdmin().getBytecode());
else if (object instanceof String) {
- return (((String) object).contains("\"") ? "\"\"\"" + object + "\"\"\"" : "\"" + object + "\"").replace("$", "\\$");
+ return (((String) object).contains("\"") ? "\"\"\"" + StringEscapeUtils.escapeJava((String) object) + "\"\"\"" : "\"" + StringEscapeUtils.escapeJava((String) object) + "\"")
+ .replace("$", "\\$");
} else if (object instanceof Set) {
final Set<String> set = new HashSet<>(((Set) object).size());
for (final Object item : (Set) object) {