This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch TINKERPOP-1921 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit c1a42724f2f2d087773cc72bc880f0bd3879e2eb Author: Stephen Mallette <[email protected]> AuthorDate: Mon Jul 15 12:20:46 2019 -0400 Added hasNext() for gremlin-javascript --- gremlin-javascript/glv/TraversalSource.template | 12 ++++++++ .../gremlin-javascript/lib/process/traversal.js | 12 ++++++++ .../test/integration/traversal-test.js | 9 ++++-- .../gremlin-javascript/test/unit/traversal-test.js | 36 ++++++++++++++++++++++ 4 files changed, 66 insertions(+), 3 deletions(-) diff --git a/gremlin-javascript/glv/TraversalSource.template b/gremlin-javascript/glv/TraversalSource.template index afacce8..772b5a1 100644 --- a/gremlin-javascript/glv/TraversalSource.template +++ b/gremlin-javascript/glv/TraversalSource.template @@ -66,6 +66,18 @@ class Traversal { }; /** + * Determines if there are any more items to iterate from the traversal. + * @returns {Promise.<boolean>} + */ + hasNext() { + return this._applyStrategies().then(() => { + return this.traversers && this.traversers.length > 0 && + this._traversersIteratorIndex < this.traversers.length && + this.traversers[this._traversersIteratorIndex].bulk > 0; + }); + } + + /** * Iterates all Traverser instances in the traversal. * @returns {Promise} */ diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js index bb763a2..a5172e3 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/lib/process/traversal.js @@ -66,6 +66,18 @@ class Traversal { }; /** + * Determines if there are any more items to iterate from the traversal. + * @returns {Promise.<boolean>} + */ + hasNext() { + return this._applyStrategies().then(() => { + return this.traversers && this.traversers.length > 0 && + this._traversersIteratorIndex < this.traversers.length && + this.traversers[this._traversersIteratorIndex].bulk > 0; + }); + } + + /** * Iterates all Traverser instances in the traversal. * @returns {Promise} */ 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 e413f21..e68b615 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 @@ -83,9 +83,12 @@ describe('Traversal', function () { it('should submit the traversal and return an iterator', function () { var g = traversal().withRemote(connection); var t = g.V().count(); - return t.next() - .then(function (item) { - assert.ok(item); + return t.hasNext() + .then(function (more) { + assert.ok(more); + assert.strictEqual(more, true); + return t.next(); + }).then(function (item) { assert.strictEqual(item.done, false); assert.strictEqual(typeof item.value, 'number'); return t.next(); diff --git a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/traversal-test.js b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/traversal-test.js index 7a5d5b3..9e82f9a 100644 --- a/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/traversal-test.js +++ b/gremlin-javascript/src/main/javascript/gremlin-javascript/test/unit/traversal-test.js @@ -59,6 +59,42 @@ describe('Traversal', function () { }); }); + describe('#hasNext()', function() { + it('should apply strategies and determine if there is anything left to iterate in the traversal') + const strategyMock = { + apply: function (traversal) { + traversal.traversers = [ new t.Traverser(1, 1), new t.Traverser(2, 1) ]; + return Promise.resolve(); + } + }; + const strategies = new TraversalStrategies(); + strategies.addStrategy(strategyMock); + const traversal = new t.Traversal(null, strategies, null); + return traversal.hasNext() + .then(function (more) { + assert.strictEqual(more, true); + return traversal.next(); + }) + .then(function (item) { + assert.strictEqual(item.value, 1); + assert.strictEqual(item.done, false); + return traversal.next(); + }) + .then(function (item) { + assert.strictEqual(item.value, 2); + assert.strictEqual(item.done, false); + return traversal.next(); + }) + .then(function (item) { + assert.strictEqual(item.value, null); + assert.strictEqual(item.done, true); + return traversal.hasNext(); + }) + .then(function (more) { + assert.strictEqual(more, false); + }); + }); + describe('#next()', function () { it('should apply the strategies and return a Promise with the iterator item', function () { const strategyMock = {
