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 2017/10/26 17:15:10 UTC

[18/50] tinkerpop git commit: TINKERPOP-1784 Completed the VertexTest cases

TINKERPOP-1784 Completed the VertexTest cases


Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/4b699283
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/4b699283
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/4b699283

Branch: refs/heads/TINKERPOP-1784
Commit: 4b6992839db6e7340c45e3faef23dd9d8e60595d
Parents: d1d38ed
Author: Stephen Mallette <sp...@genoprime.com>
Authored: Fri Sep 29 15:44:50 2017 -0400
Committer: Stephen Mallette <sp...@genoprime.com>
Committed: Thu Oct 26 13:14:36 2017 -0400

----------------------------------------------------------------------
 .../src/main/jython/radish/feature_steps.py     |  18 +-
 gremlin-test/features/map/Vertex.feature        | 226 ++++++++++++++++---
 .../gremlin/process/FeatureCoverageTest.java    |  93 ++++++++
 .../gremlin/structure/FeatureCoverageTest.java  |  92 --------
 4 files changed, 305 insertions(+), 124 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b699283/gremlin-python/src/main/jython/radish/feature_steps.py
----------------------------------------------------------------------
diff --git a/gremlin-python/src/main/jython/radish/feature_steps.py b/gremlin-python/src/main/jython/radish/feature_steps.py
index a298d6c..340f84a 100644
--- a/gremlin-python/src/main/jython/radish/feature_steps.py
+++ b/gremlin-python/src/main/jython/radish/feature_steps.py
@@ -21,7 +21,7 @@ import json
 import re
 from gremlin_python.structure.graph import Graph
 from gremlin_python.process.graph_traversal import __
-from gremlin_python.process.traversal import P, Scope, Column
+from gremlin_python.process.traversal import P, Scope, Column, Direction
 from radish import given, when, then
 from hamcrest import *
 
@@ -35,6 +35,12 @@ def choose_graph(step, graph_name):
     step.context.g = Graph().traversal().withRemote(step.context.remote_conn[graph_name])
 
 
+@given("an unsupported test")
+def unsupported_scenario(step):
+    # this is a do nothing step as the test can't be supported for whatever reason
+    return
+
+
 @given("using the parameter {param_name:w} is {param:QuotedString}")
 def add_parameter(step, param_name, param):
     if not hasattr(step.context, "traversal_params"):
@@ -48,6 +54,7 @@ def translate_traversal(step):
     g = step.context.g
     b = {"g": g,
          "Column": Column,
+         "Direction": Direction,
          "P": P,
          "Scope": Scope,
          "bothE": __.bothE}
@@ -75,6 +82,11 @@ def assert_result(step, characterized_as):
         raise ValueError("unknown data characterization of " + characterized_as)
 
 
+@then("nothing should happen")
+def nothing_happening(step):
+    return
+
+
 def __convert(val, ctx):
     if isinstance(val, dict):                                         # convert dictionary keys/values
         n = {}
@@ -89,10 +101,14 @@ def __convert(val, ctx):
         return long(val[2:-1])
     elif isinstance(val, str) and re.match("^v\[.*\]\.id$", val):     # parse vertex id
         return ctx.lookup_v["modern"][val[2:-4]].id
+    elif isinstance(val, str) and re.match("^v\[.*\]\.sid$", val):    # parse vertex id as string
+        return ctx.lookup_v["modern"][val[2:-5]].id
     elif isinstance(val, str) and re.match("^v\[.*\]$", val):         # parse vertex
         return ctx.lookup_v["modern"][val[2:-1]]
     elif isinstance(val, str) and re.match("^e\[.*\]\.id$", val):     # parse edge id
         return ctx.lookup_e["modern"][val[2:-4]].id
+    elif isinstance(val, str) and re.match("^e\[.*\]\.sid$", val):    # parse edge id as string
+        return ctx.lookup_e["modern"][val[2:-5]].id
     elif isinstance(val, str) and re.match("^e\[.*\]$", val):         # parse edge
         return ctx.lookup_e["modern"][val[2:-1]]
     elif isinstance(val, str) and re.match("^m\[.*\]$", val):         # parse json as a map

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b699283/gremlin-test/features/map/Vertex.feature
----------------------------------------------------------------------
diff --git a/gremlin-test/features/map/Vertex.feature b/gremlin-test/features/map/Vertex.feature
index 1905f3a..37e398b 100644
--- a/gremlin-test/features/map/Vertex.feature
+++ b/gremlin-test/features/map/Vertex.feature
@@ -19,7 +19,7 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VXlistX1_2_3XX_name
     Given the modern graph
-    And using the parameter vx is "l[v[marko],v[vadas],v[lop]]"
+    And using the parameter vx is "l[v[marko].id,v[vadas].id,v[lop].id]"
     And the traversal of
       """
       g.V(vx).values("name")
@@ -32,7 +32,7 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VXlistXv1_v2_v3XX_name
     Given the modern graph
-    And using the parameter vx is "l[v[marko].id,v[vadas].id,v[lop].id]"
+    And using the parameter vx is "l[v[marko],v[vadas],v[lop]]"
     And the traversal of
       """
       g.V(vx).values("name")
@@ -60,10 +60,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX1X_out
     Given the modern graph
-    And using the parameter v1 is "v[marko]"
+    And using the parameter v1Id is "v[marko].id"
     And the traversal of
       """
-      g.V(v1).out()
+      g.V(v1Id).out()
       """
     When iterated to list
     Then the result should be unordered
@@ -73,10 +73,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX2X_in
     Given the modern graph
-    And using the parameter v2 is "v[vadas]"
+    And using the parameter v2Id is "v[vadas].id"
     And the traversal of
       """
-      g.V(v2).in()
+      g.V(v2Id).in()
       """
     When iterated to list
     Then the result should be unordered
@@ -84,10 +84,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX4X_both
     Given the modern graph
-    And using the parameter v4 is "v[josh]"
+    And using the parameter v4Id is "v[josh].id"
     And the traversal of
       """
-      g.V(v4).both()
+      g.V(v4Id).both()
       """
     When iterated to list
     Then the result should be unordered
@@ -112,10 +112,21 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_EX11X
     Given the modern graph
-    And using the parameter e11 is "e[josh-created->lop]"
+    And using the parameter e11Id is "e[josh-created->lop].id"
+    And the traversal of
+    """
+      g.E(e11Id)
+      """
+    When iterated to list
+    Then the result should be unordered
+      | e[josh-created->lop] |
+
+  Scenario: g_EX11AsStringX
+    Given the modern graph
+    And using the parameter e11Id is "e[josh-created->lop].sid"
     And the traversal of
     """
-      g.E(e11)
+      g.E(e11Id)
       """
     When iterated to list
     Then the result should be unordered
@@ -123,10 +134,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX1X_outE
     Given the modern graph
-    And using the parameter v1 is "v[marko]"
+    And using the parameter v1Id is "v[marko].id"
     And the traversal of
     """
-      g.V(v1).outE()
+      g.V(v1Id).outE()
       """
     When iterated to list
     Then the result should be unordered
@@ -136,10 +147,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX2X_outE
     Given the modern graph
-    And using the parameter v2 is "v[vadas]"
+    And using the parameter v2Id is "v[vadas].id"
     And the traversal of
     """
-      g.V(v2).inE()
+      g.V(v2Id).inE()
       """
     When iterated to list
     Then the result should be unordered
@@ -147,10 +158,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX4X_bothEXcreatedX
     Given the modern graph
-    And using the parameter v4 is "v[josh]"
+    And using the parameter v4Id is "v[josh].id"
     And the traversal of
     """
-      g.V(v4).bothE("created")
+      g.V(v4Id).bothE("created")
       """
     When iterated to list
     Then the result should be unordered
@@ -159,10 +170,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX4X_bothE
     Given the modern graph
-    And using the parameter v4 is "v[josh]"
+    And using the parameter v4Id is "v[josh].id"
     And the traversal of
     """
-      g.V(v4).bothE()
+      g.V(v4Id).bothE()
       """
     When iterated to list
     Then the result should be unordered
@@ -172,10 +183,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX1X_outE_inV
     Given the modern graph
-    And using the parameter v1 is "v[marko]"
+    And using the parameter v1Id is "v[marko].id"
     And the traversal of
       """
-      g.V(v1).both()
+      g.V(v1Id).both()
       """
     When iterated to list
     Then the result should be unordered
@@ -185,10 +196,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX2X_inE_outV
     Given the modern graph
-    And using the parameter v2 is "v[vadas]"
+    And using the parameter v2Id is "v[vadas].id"
     And the traversal of
       """
-      g.V(v2).inE().outV()
+      g.V(v2Id).inE().outV()
       """
     When iterated to list
     Then the result should be unordered
@@ -226,10 +237,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX1X_outEXknowsX_bothV_name
     Given the modern graph
-    And using the parameter v1 is "v[marko]"
+    And using the parameter v1Id is "v[marko].id"
     And the traversal of
       """
-      g.V(v1).outE("knows").bothV().values("name")
+      g.V(v1Id).outE("knows").bothV().values("name")
       """
     When iterated to list
     Then the result should be unordered
@@ -240,10 +251,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX1X_outE_otherV
     Given the modern graph
-    And using the parameter v1 is "v[marko]"
+    And using the parameter v1Id is "v[marko].id"
     And the traversal of
       """
-      g.V(v1).outE().otherV()
+      g.V(v1Id).outE().otherV()
       """
     When iterated to list
     Then the result should be unordered
@@ -253,10 +264,10 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX4X_bothE_otherV
     Given the modern graph
-    And using the parameter v4 is "v[josh]"
+    And using the parameter v4Id is "v[josh].id"
     And the traversal of
       """
-      g.V(v4).bothE().otherV()
+      g.V(v4Id).bothE().otherV()
       """
     When iterated to list
     Then the result should be unordered
@@ -266,11 +277,164 @@ Feature: Step - V(), E(), out(), in(), both(), inE(), outE(), bothE()
 
   Scenario: g_VX4X_bothE_hasXweight_lt_1X_otherV
     Given the modern graph
-    And using the parameter v4 is "v[josh]"
+    And using the parameter v4Id is "v[josh].id"
+    And the traversal of
+      """
+      g.V(v4Id).bothE().has("weight", P.lt(1.0)).otherV()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[lop] |
+
+  Scenario: g_VX2X_inE
+    Given the modern graph
+    And using the parameter v2Id is "v[vadas].id"
+    And the traversal of
+    """
+      g.V(v2Id).bothE()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | e[marko-knows->vadas] |
+
+  Scenario: get_g_VX1X_outE_otherV
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).outE().otherV()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[vadas] |                               
+      | v[josh] |
+      | v[lop] |
+
+  Scenario: g_VX1X_outXknowsX
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).out("knows")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[vadas] |
+      | v[josh] |
+
+  Scenario: g_VX1AsStringX_outXknowsX
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].sid"
     And the traversal of
       """
-      g.V(v4).bothE().has("weight", P.lt(1.0)).otherV()
+      g.V(v1Id).out("knows")
       """
     When iterated to list
     Then the result should be unordered
-      | v[lop] |
\ No newline at end of file
+      | v[vadas] |
+      | v[josh] |
+
+  Scenario: g_VX1X_outXknows_createdX
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).out("knows","created")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[vadas] |
+      | v[josh] |
+      | v[lop] |
+
+  Scenario: g_VX1X_outEXknowsX_inV
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).outE("knows").inV()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[vadas] |
+      | v[josh] |
+
+  Scenario: g_VX1X_outEXknows_createdX_inV
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).outE("knows","created").inV()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[vadas] |
+      | v[josh] |
+      | v[lop] |
+
+  Scenario: g_V_out_out
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().out().out()
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[ripple] |
+      | v[lop] |
+
+  Scenario: g_VX1X_out_out_out
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).out().out().out()
+      """
+    When iterated to list
+    Then the result should be empty
+
+  Scenario: g_VX1X_out_name
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).out().values("name")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | vadas |
+      | josh |
+      | lop |
+
+  Scenario: g_VX1X_to_XOUT_knowsX
+    Given the modern graph
+    And using the parameter v1Id is "v[marko].id"
+    And the traversal of
+      """
+      g.V(v1Id).to(Direction.OUT, "knows")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | v[vadas] |
+      | v[josh] |
+
+  Scenario: g_VX1_2_3_4X_name
+    Given an unsupported test
+    Then nothing should happen
+
+  Scenario: g_V_hasLabelXpersonX_V_hasLabelXsoftwareX_name
+    Given the modern graph
+    And the traversal of
+      """
+      g.V().hasLabel("person").V().hasLabel("software").values("name")
+      """
+    When iterated to list
+    Then the result should be unordered
+      | lop |
+      | lop |
+      | lop |
+      | lop |
+      | ripple |
+      | ripple |
+      | ripple |
+      | ripple |
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b699283/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
new file mode 100644
index 0000000..d3212a4
--- /dev/null
+++ b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/process/FeatureCoverageTest.java
@@ -0,0 +1,93 @@
+/*
+ * 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.
+ */
+package org.apache.tinkerpop.gremlin.process;
+
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinTest;
+import org.apache.tinkerpop.gremlin.process.traversal.step.map.VertexTest;
+import org.junit.Test;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertThat;
+
+/**
+ * @author Stephen Mallette (http://stephen.genoprime.com)
+ */
+public class FeatureCoverageTest {
+
+    private static Pattern scenarioName = Pattern.compile("^\\s*Scenario:\\s*(.*)$");
+
+    @Test
+    public void shouldImplementAllProcessTestsAsFeatures() throws Exception {
+
+        // TEMPORARY while test framework is under development - all tests should ultimately be included
+        final List<Class<?>> temp = Arrays.asList(CoinTest.class, VertexTest.class);
+
+        final Field field = ProcessStandardSuite.class.getDeclaredField("testsToEnforce");
+        field.setAccessible(true);
+        final Class<?>[] testsToEnforce = (Class<?>[]) field.get(null);
+
+        final List<Class<?>> testClassesToEnforce = Stream.of(testsToEnforce).filter(temp::contains).collect(Collectors.toList());
+        for (Class<?> t : testClassesToEnforce) {
+            final String packge = t.getPackage().getName();
+            final String group = packge.substring(packge.lastIndexOf(".") + 1, packge.length());
+            final String featureFileName = "features" + File.separator +
+                                           group + File.separator +
+                                           t.getSimpleName().replace("Test", "") + ".feature";
+            final Set<String> testMethods = Stream.of(t.getDeclaredMethods())
+                    .filter(m -> m.isAnnotationPresent(Test.class))
+                    .map(Method::getName).collect(Collectors.toSet());
+
+            final File featureFile = new File(featureFileName);
+            assertThat(featureFile.exists(), is(true));
+            assertThat(featureFile.isFile(), is(true));
+
+            final Set<String> testsInFeatureFile = new HashSet<>();
+            final InputStream is = new FileInputStream(featureFile);
+            final BufferedReader buf = new BufferedReader(new InputStreamReader(is));
+            String line = buf.readLine();
+            while(line != null){
+                final Matcher matcher = scenarioName.matcher(line);
+                if (matcher.matches())
+                    testsInFeatureFile.add(matcher.group(1));
+                line = buf.readLine();
+            }
+
+            testMethods.removeAll(testsInFeatureFile);
+
+            assertEquals("All test methods are not implemented in the " + featureFileName + ": " + testMethods, testMethods.size(), 0);
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/4b699283/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/structure/FeatureCoverageTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/structure/FeatureCoverageTest.java b/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/structure/FeatureCoverageTest.java
deleted file mode 100644
index 791d44e..0000000
--- a/gremlin-test/src/test/java/org/apache/tinkerpop/gremlin/structure/FeatureCoverageTest.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * 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.
- */
-package org.apache.tinkerpop.gremlin.structure;
-
-import org.apache.tinkerpop.gremlin.process.ProcessStandardSuite;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.CoinTest;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.CountTest;
-import org.junit.Test;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-import java.util.Arrays;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-import java.util.stream.Collectors;
-import java.util.stream.Stream;
-
-import static org.hamcrest.core.Is.is;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertThat;
-
-/**
- * @author Stephen Mallette (http://stephen.genoprime.com)
- */
-public class FeatureCoverageTest {
-
-    private static Pattern scenarioName = Pattern.compile("^\\s*Scenario:\\s*(.*)$");
-
-    @Test
-    public void shouldImplementAllProcessTestsAsFeatures() throws Exception {
-
-        // TEMPORARY while test framework is under development - all tests should ultimately be included
-        final List<Class<?>> temp = Arrays.asList(CoinTest.class);
-
-        final Field field = ProcessStandardSuite.class.getDeclaredField("testsToEnforce");
-        field.setAccessible(true);
-        final Class<?>[] testsToEnforce = (Class<?>[]) field.get(null);
-
-        final List<Class<?>> testClassesToEnforce = Stream.of(testsToEnforce).filter(temp::contains).collect(Collectors.toList());
-        for (Class<?> t : testClassesToEnforce) {
-            final String packge = t.getPackage().getName();
-            final String group = packge.substring(packge.lastIndexOf(".") + 1, packge.length());
-            final String featureFileName = "features" + File.separator +
-                                           group + File.separator +
-                                           t.getSimpleName().replace("Test", "") + ".feature";
-            final Set<String> testMethods = Stream.of(t.getDeclaredMethods())
-                    .filter(m -> m.isAnnotationPresent(Test.class))
-                    .map(Method::getName).collect(Collectors.toSet());
-
-            final File featureFile = new File(featureFileName);
-            assertThat(featureFile.exists(), is(true));
-            assertThat(featureFile.isFile(), is(true));
-
-            final Set<String> testsInFeatureFile = new HashSet<>();
-            final InputStream is = new FileInputStream(featureFile);
-            final BufferedReader buf = new BufferedReader(new InputStreamReader(is));
-            String line = buf.readLine();
-            while(line != null){
-                final Matcher matcher = scenarioName.matcher(line);
-                if (matcher.matches())
-                    testsInFeatureFile.add(matcher.group(1));
-                line = buf.readLine();
-            }
-
-            assertEquals("All test methods are not implemented in the " + featureFileName, testMethods, testsInFeatureFile);
-        }
-    }
-}