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 2019/07/15 23:31:04 UTC

[tinkerpop] branch TINKERPOP-1921 updated (ed4ce73 -> 233eb2d)

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

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


    from ed4ce73  asciidoc fixes - CTR
     new c1a4272  Added hasNext() for gremlin-javascript
     new 233eb2d  TINKERPOP-1921 Add HasNext() to .NET

The 2 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.


Summary of changes:
 .../Process/Traversal/DefaultTraversal.cs          | 29 +++++++++++++++--
 .../Gremlin.Net/Process/Traversal/ITraversal.cs    |  6 ++++
 .../Process/Traversal/TraversalTests.cs            | 18 +++++++++++
 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 ++++++++++++++++++++++
 7 files changed, 117 insertions(+), 5 deletions(-)


[tinkerpop] 01/02: Added hasNext() for gremlin-javascript

Posted by sp...@apache.org.
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 <sp...@genoprime.com>
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 = {


[tinkerpop] 02/02: TINKERPOP-1921 Add HasNext() to .NET

Posted by sp...@apache.org.
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 233eb2d6520a37e9b6a8d79111b7c56bdaec98a0
Author: Stephen Mallette <sp...@genoprime.com>
AuthorDate: Mon Jul 15 19:30:22 2019 -0400

    TINKERPOP-1921 Add HasNext() to .NET
---
 .../Process/Traversal/DefaultTraversal.cs          | 29 ++++++++++++++++++++--
 .../Gremlin.Net/Process/Traversal/ITraversal.cs    |  6 +++++
 .../Process/Traversal/TraversalTests.cs            | 18 ++++++++++++++
 3 files changed, 51 insertions(+), 2 deletions(-)

diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs
index 1ffda51..8f56352 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/DefaultTraversal.cs
@@ -64,6 +64,9 @@ namespace Gremlin.Net.Process.Traversal
         private IEnumerator<Traverser> TraverserEnumerator
             => _traverserEnumerator ?? (_traverserEnumerator = GetTraverserEnumerator());
 
+        private bool _nextAvailable;
+        private bool _fetchedNext;
+
         /// <inheritdoc />
         public void Dispose()
         {
@@ -73,13 +76,27 @@ namespace Gremlin.Net.Process.Traversal
         /// <inheritdoc />
         public bool MoveNext()
         {
+            var more = MoveNextInternal();            
+            _fetchedNext = false;
+            return more;
+        }
+        
+        private bool MoveNextInternal()
+        {                   
+            if (_fetchedNext) return _nextAvailable;
+            
             var currentTraverser = TraverserEnumerator.Current;
             if (currentTraverser?.Bulk > 1)
             {
                 currentTraverser.Bulk--;
-                return true;
+                _nextAvailable = true;
             }
-            return TraverserEnumerator.MoveNext();
+            else
+            {
+                _nextAvailable = TraverserEnumerator.MoveNext();
+            }
+
+            return _nextAvailable;
         }
 
         /// <summary>
@@ -167,6 +184,14 @@ namespace Gremlin.Net.Process.Traversal
                 await strategy.ApplyAsync(this).ConfigureAwait(false);
         }
 
+        /// <inheritdoc />
+        public bool HasNext()
+        {
+            var more = MoveNextInternal();            
+            _fetchedNext = true;
+            return more;
+        }
+
         /// <summary>
         ///     Gets the next result from the traversal.
         /// </summary>
diff --git a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs
index 498ef7f..48268c1 100644
--- a/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs
+++ b/gremlin-dotnet/src/Gremlin.Net/Process/Traversal/ITraversal.cs
@@ -68,6 +68,12 @@ namespace Gremlin.Net.Process.Traversal
         E Next();
 
         /// <summary>
+        ///     Determines if the traversal contains any additional results for iteration.
+        /// </summary>
+        /// <returns>True if there are more results and false otherwise.</returns>
+        bool HasNext();
+
+        /// <summary>
         ///     Gets the next n-number of results from the traversal.
         /// </summary>
         /// <param name="amount">The number of results to get.</param>
diff --git a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
index f32b567..a7d62ac 100644
--- a/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
+++ b/gremlin-dotnet/test/Gremlin.Net.UnitTest/Process/Traversal/TraversalTests.cs
@@ -42,6 +42,24 @@ namespace Gremlin.Net.UnitTest.Process.Traversal
             var actualObj = traversal.Next();
 
             Assert.Equal(traverserObj, actualObj);
+
+            Assert.Equal(null, traversal.Next());
+        }
+        [Theory]
+        [InlineData(1)]
+        [InlineData("test")]
+        public void ShouldCheckHasNext(object traverserObj)
+        {
+            var traversal = new TestTraversal(new List<object> {traverserObj});
+
+            Assert.Equal(true, traversal.HasNext());
+            Assert.Equal(true, traversal.HasNext());
+            
+            var actualObj = traversal.Next();
+            Assert.Equal(traverserObj, actualObj);
+            
+            Assert.Equal(false, traversal.HasNext());
+            Assert.Equal(false, traversal.HasNext());
         }
 
         [Theory]