You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by jo...@apache.org on 2020/01/27 09:24:24 UTC

[tinkerpop] branch TINKERPOP-2332 created (now 2c60aa1)

This is an automated email from the ASF dual-hosted git repository.

jorgebg pushed a change to branch TINKERPOP-2332
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


      at 2c60aa1  TINKERPOP-2332 JavaScript GLV: Fix structure toString() methods

This branch includes the following new commits:

     new 2c60aa1  TINKERPOP-2332 JavaScript GLV: Fix structure toString() methods

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[tinkerpop] 01/01: TINKERPOP-2332 JavaScript GLV: Fix structure toString() methods

Posted by jo...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

jorgebg pushed a commit to branch TINKERPOP-2332
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 2c60aa1ce10b36b55f1a181b3d9ff4f85a6a32f1
Author: Jorge Bay Gondra <jo...@gmail.com>
AuthorDate: Mon Jan 27 10:23:03 2020 +0100

    TINKERPOP-2332 JavaScript GLV: Fix structure toString() methods
---
 .../gremlin-javascript/lib/structure/graph.js      | 34 ++++++---
 .../test/unit/structure-types-test.js              | 87 ++++++++++++++++++++++
 2 files changed, 110 insertions(+), 11 deletions(-)

diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.js
index 98d9c77..5019a9c 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/structure/graph.js
@@ -65,7 +65,7 @@ class Vertex extends Element {
   }
 
   toString() {
-    return 'v[' + this.id + ']';
+    return `v[${this.id}]`;
   }
 }
 
@@ -85,7 +85,10 @@ class Edge extends Element {
   }
 
   toString() {
-    return 'e[' + this.id + '][' + this.outV.id + '-' + this.label + '->' + this.inV.id + ']';
+    const outVId = this.outV ? this.outV.id : '?';
+    const inVId = this.inV ? this.inV.id : '?';
+
+    return `e[${this.id}][${outVId}-${this.label}->${inVId}]`;
   }
 }
 
@@ -98,7 +101,7 @@ class VertexProperty extends Element {
   }
 
   toString() {
-    return 'vp[' + this.label + '->' + this.value.substr(0, 20) + ']';
+    return `vp[${this.label}->${summarize(this.value)}]`;
   }
 }
 
@@ -109,7 +112,7 @@ class Property {
   }
 
   toString() {
-    return 'p[' + this.key + '->' + this.value.substr(0, 20) + ']';
+    return `p[${this.key}->${summarize(this.value)}]`;
   }
 
   equals(other) {
@@ -130,7 +133,7 @@ class Path {
   }
 
   toString() {
-    return 'path[' + this.objects.join(", ") +  ']';
+    return `path[${(this.objects || []).join(", ")}]`;
   }
 
   equals(other) {
@@ -165,11 +168,20 @@ function areEqual(obj1, obj2) {
   return false;
 }
 
+function summarize(value) {
+  if (value === null || value === undefined) {
+    return value;
+  }
+
+  const strValue = value.toString();
+  return strValue.length > 20 ? strValue.substr(0, 20) : strValue;
+}
+
 module.exports = {
-  Edge: Edge,
-  Graph: Graph,
-  Path: Path,
-  Property: Property,
-  Vertex: Vertex,
-  VertexProperty: VertexProperty
+  Edge,
+  Graph,
+  Path,
+  Property,
+  Vertex,
+  VertexProperty
 };
\ No newline at end of file
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/structure-types-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/structure-types-test.js
new file mode 100644
index 0000000..29bebfa
--- /dev/null
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/structure-types-test.js
@@ -0,0 +1,87 @@
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one
+ *  or more contributor license agreements.  See the NOTICE file
+ *  distributed with this work for additional information
+ *  regarding copyright ownership.  The ASF licenses this file
+ *  to you under the Apache License, Version 2.0 (the
+ *  "License"); you may not use this file except in compliance
+ *  with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing,
+ *  software distributed under the License is distributed on an
+ *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ *  KIND, either express or implied.  See the License for the
+ *  specific language governing permissions and limitations
+ *  under the License.
+ */
+
+/**
+ * @author Jorge Bay Gondra
+ */
+'use strict';
+
+const { assert } = require('chai');
+const { VertexProperty, Property, Vertex, Edge, Path } = require('../../lib/structure/graph');
+
+describe('Edge', () => {
+  describe('#toString()', () => {
+    it('should support empty outV and inV', () => {
+      const element = new Edge('123', null, 'label1', undefined, null);
+      assert.strictEqual(element.toString(), `e[123][?-label1->?]`);
+    });
+  });
+});
+
+describe('Vertex', () => {
+  describe('#toString()', () => {
+    it('should return the string representation based on the id', () => {
+      const element = new Vertex(-200, 'label1', null);
+      assert.strictEqual(element.toString(), `v[-200]`);
+    });
+  });
+});
+
+describe('VertexProperty', () => {
+  describe('#toString()', () => {
+    it('should return the string representation and summarize', () => {
+      [
+        [ new VertexProperty(1, 'label1', 'value1'), 'vp[label1->value1]' ],
+        [ new VertexProperty(1, 'label2', null), 'vp[label2->null]' ],
+        [ new VertexProperty(1, 'label3', undefined), 'vp[label3->undefined]' ],
+        [ new VertexProperty(1, 'label4', 'abcdefghijklmnopqrstuvwxyz'), 'vp[label4->abcdefghijklmnopqrst]' ]
+      ].forEach(item => {
+        assert.strictEqual(item[0].toString(), item[1]);
+      });
+    });
+  });
+});
+
+describe('Property', () => {
+  describe('#toString()', () => {
+    it('should return the string representation and summarize', () => {
+      [
+        [ new Property('key1', 'value1'), 'p[key1->value1]' ],
+        [ new Property('key2', null), 'p[key2->null]' ],
+        [ new Property('key3', undefined), 'p[key3->undefined]' ],
+        [ new Property('key4', 'abcdefghijklmnopqrstuvwxyz'), 'p[key4->abcdefghijklmnopqrst]' ]
+      ].forEach(item => {
+        assert.strictEqual(item[0].toString(), item[1]);
+      });
+    });
+  });
+});
+
+describe('Path', () => {
+  describe('#toString()', () => {
+    it('should return the string representation and summarize', () => {
+      [
+        [ new Path(['a', 'b'], [1, 2]), 'path[1, 2]' ],
+        [ new Path(['a', 'b'], null), 'path[]' ]
+      ].forEach(item => {
+        assert.strictEqual(item[0].toString(), item[1]);
+      });
+    });
+  });
+});
\ No newline at end of file