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 2017/11/30 13:48:14 UTC
[35/47] tinkerpop git commit: Setup world and basic steps
Setup world and basic steps
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/2031c573
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/2031c573
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/2031c573
Branch: refs/heads/TINKERPOP-1489
Commit: 2031c5731899ad003832862fd60eb87b5d61ac8b
Parents: af2873d
Author: Jorge Bay Gondra <jo...@gmail.com>
Authored: Thu Nov 23 15:06:17 2017 +0100
Committer: Jorge Bay Gondra <jo...@gmail.com>
Committed: Thu Nov 30 14:45:02 2017 +0100
----------------------------------------------------------------------
.../lib/driver/driver-remote-connection.js | 4 +-
.../test/cucumber/feature-steps.js | 59 +++++++++++++++---
.../gremlin-javascript/test/cucumber/world.js | 64 +++++++++++++++++++-
.../test/integration/traversal-test.js | 6 +-
4 files changed, 119 insertions(+), 14 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2031c573/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js
index 18c551c..31f27cd 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/driver-remote-connection.js
@@ -72,11 +72,11 @@ function DriverRemoteConnection(url, options) {
this._responseHandlers = {};
this._reader = options.reader || new serializer.GraphSONReader();
this._writer = options.writer || new serializer.GraphSONWriter();
- this._traversalSource = options.traversalSource || 'g';
this._openPromise = null;
this._openCallback = null;
this._closePromise = null;
this.isOpen = false;
+ this.traversalSource = options.traversalSource || 'g';
}
inherits(DriverRemoteConnection, RemoteConnection);
@@ -127,7 +127,7 @@ DriverRemoteConnection.prototype._getRequest = function (id, bytecode) {
'processor': 'traversal',
'args': {
'gremlin': this._writer.adaptObject(bytecode),
- 'aliases': { 'g': this._traversalSource }
+ 'aliases': { 'g': this.traversalSource }
}
});
};
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2031c573/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
index bea7321..5270b39 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/feature-steps.js
@@ -23,13 +23,24 @@
'use strict';
const defineSupportCode = require('cucumber').defineSupportCode;
+const assert = require('assert');
const vm = require('vm');
-
+const graphModule = require('../../lib/structure/graph');
+const graphTraversalModule = require('../../lib/process/graph-traversal');
+const traversalModule = require('../../lib/process/traversal');
+const Graph = graphModule.Graph;
+const __ = graphTraversalModule.statics;
defineSupportCode(function(methods) {
methods.Given(/^the (.+) graph$/, function (graphName) {
- //TODO: Set context g
+ if (graphName === 'empty') {
+ //TODO
+ }
+ const data = this.getDataByGraphName(graphName);
+ this.graphName = graphName;
+ this.g = new Graph().traversal().withRemote(data.connection)
});
+
methods.Given('the graph initializer of', function () {
//TODO
});
@@ -37,7 +48,7 @@ defineSupportCode(function(methods) {
methods.Given('an unsupported test', () => {});
methods.Given('the traversal of', function (traversalText) {
- //TODO: make traversal
+ this.traversal = vm.runInNewContext(translate(traversalText), getSandbox(this.g));
});
methods.Given(/^$/, function (paramName, stringValue) {
@@ -45,16 +56,24 @@ defineSupportCode(function(methods) {
});
methods.When('iterated to list', function () {
- //TODO
+ return this.traversal.toList().then(list => this.result = list);
});
methods.When('iterated next', function () {
- //TODO
+ return this.traversal.next().then(it => this.result = it.value);
});
methods.Then(/^the result should be (\w+)$/, function (characterizedAs, resultTable) {
+ switch (characterizedAs) {
+ case 'empty':
+ assert.strictEqual(0, result.length);
+ break;
+ case 'ordered':
+ const expectedResult = resultTable.rows().map(parseRow);
+ console.log('--- ordered', expectedResult);
+ break;
+ }
//TODO
- //console.log('--resultTable', resultTable.rows());
if (typeof resultTable === 'function'){
return resultTable();
}
@@ -69,4 +88,30 @@ defineSupportCode(function(methods) {
});
methods.Then('nothing should happen because', () => {});
-});
\ No newline at end of file
+});
+
+function getSandbox(g) {
+ return {
+ g: g,
+ __: __,
+ Cardinality: traversalModule.cardinality,
+ Column: traversalModule.column,
+ Direction: traversalModule.direction,
+ Order: traversalModule.order,
+ P: traversalModule.P,
+ Pick: traversalModule.pick,
+ Scope: traversalModule.scope,
+ Operator: traversalModule.operator,
+ T: traversalModule.t,
+ };
+}
+
+function translate(traversalText) {
+ traversalText = traversalText.replace('.in(', '.in_(');
+ traversalText = traversalText.replace('.from(', '.from_(');
+ return traversalText;
+}
+
+function parseRow(row) {
+ return row[0];
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2031c573/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/world.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/world.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/world.js
index 2e4f6e1..8f72c58 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/world.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/cucumber/world.js
@@ -23,17 +23,77 @@
'use strict';
const defineSupportCode = require('cucumber').defineSupportCode;
+const helper = require('../helper');
+const graphModule = require('../../lib/structure/graph');
+const graphTraversalModule = require('../../lib/process/graph-traversal');
+const Graph = graphModule.Graph;
+const __ = graphTraversalModule.statics;
defineSupportCode(function (methods) {
+ const cache = {};
+
function TinkerPopWorld(){
this.g = null;
this.traversal = null;
+ this.result = null;
+ this.cache = null;
}
+
+ TinkerPopWorld.prototype.getDataByGraphName = function (name) {
+ return this.cache[name];
+ };
+
methods.setWorldConstructor(TinkerPopWorld);
+
methods.BeforeAll(function () {
// load all traversals
+ const promises = ['modern', 'classic', 'crew', 'grateful'].map(graphName => {
+ const connection = helper.getConnection('g' + graphName);
+ return connection.open()
+ .then(() => Promise.all([getVertices(connection), getEdges(connection)]))
+ .then(values => {
+ cache[graphName] = {
+ connection: connection,
+ vertices: values[0],
+ edges: values[1]
+ };
+ });
+ });
+ return Promise.all(promises);
});
- methods.Before(function () {
+ methods.AfterAll(function () {
+ return Promise.all(Object.keys(cache).map(graphName => cache[graphName].connection.close()));
});
-});
\ No newline at end of file
+
+ methods.Before(function () {
+ this.cache = cache;
+ });
+});
+
+function getVertices(connection) {
+ const g = new Graph().traversal().withRemote(connection);
+ return g.V().group().by('name').by(__.tail()).next().then(it => it.value);
+}
+
+function getEdges(connection) {
+ const g = new Graph().traversal().withRemote(connection);
+ return g.E().group()
+ .by(__.project("o", "l", "i").by(__.outV().values("name")).by(__.inV().values("name")))
+ .by(__.tail())
+ .next()
+ .then(it => {
+ const edges = {};
+ Object.keys(it.value).map(key => {
+ edges[getEdgeKey(key)] = it.value[key];
+ });
+ return edges;
+ });
+}
+
+function getEdgeKey(key) {
+ const o = /o=(.+?)[,}]/.exec(key)[1];
+ const l = /l=(.+?)[,}]/.exec(key)[1];
+ const i = /i=(.+?)[,}]/.exec(key)[1];
+ return o + "-" + l + "->" + i;
+}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/2031c573/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
----------------------------------------------------------------------
diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
index 96de7c7..adb7d6c 100644
--- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
+++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/integration/traversal-test.js
@@ -42,10 +42,10 @@ describe('Traversal', function () {
describe('#toList()', function () {
it('should submit the traversal and return a list', function () {
var g = new Graph().traversal().withRemote(connection);
- return g.addV('user').toList().then(function (list) {
+ return g.V().toList().then(function (list) {
assert.ok(list);
- assert.strictEqual(list.length, 1);
- assert.ok(list[0] instanceof Vertex);
+ assert.strictEqual(list.length, 7);
+ list.forEach(v => assert.ok(v instanceof Vertex));
});
});
});