/core/src/test/java/cucumber/runtime/MetadataTest.java

https://github.com/jduey/cucumber-jvm · Java · 113 lines · 95 code · 18 blank · 0 comment · 0 complexity · 5fd00234d530b45003fef3077510f5dd MD5 · raw file

  1. package cucumber.runtime;
  2. import com.google.gson.Gson;
  3. import com.google.gson.GsonBuilder;
  4. import cucumber.resources.AbstractResource;
  5. import cucumber.resources.PathWithLines;
  6. import cucumber.runtime.model.CucumberFeature;
  7. import gherkin.formatter.Argument;
  8. import gherkin.formatter.model.Step;
  9. import org.junit.Test;
  10. import java.io.ByteArrayInputStream;
  11. import java.io.InputStream;
  12. import java.io.UnsupportedEncodingException;
  13. import java.util.ArrayList;
  14. import java.util.List;
  15. import java.util.Map;
  16. import java.util.regex.Pattern;
  17. import static java.util.Arrays.asList;
  18. import static java.util.Collections.emptyList;
  19. import static org.junit.Assert.assertEquals;
  20. public class MetadataTest {
  21. public static final Gson GSON = new GsonBuilder().setPrettyPrinting().create();
  22. @Test
  23. public void generates_code_completion_metadata() {
  24. Metadata meta = new Metadata();
  25. List<StepDefinition> stepDefs = asList(def("I have (\\d+) cukes in my belly"), def("I have (\\d+) apples in my bowl"));
  26. Map<String, List<String>> metadata = meta.generate(stepDefs, features());
  27. assertEquals("" +
  28. "{\n" +
  29. " \"I have (\\\\d+) cukes in my belly\": [\n" +
  30. " \"I have 4 cukes in my belly\",\n" +
  31. " \"I have 42 cukes in my belly\"\n" +
  32. " ],\n" +
  33. " \"I have (\\\\d+) apples in my bowl\": []\n" +
  34. "}",
  35. GSON.toJson(metadata));
  36. }
  37. private List<CucumberFeature> features() {
  38. List<CucumberFeature> features = new ArrayList<CucumberFeature>();
  39. FeatureBuilder fb = new FeatureBuilder(features);
  40. fb.parse(new AbstractResource(new PathWithLines("test.feature")) {
  41. @Override
  42. public String getPath() {
  43. return pathWithLines.path;
  44. }
  45. @Override
  46. public InputStream getInputStream() {
  47. try {
  48. return new ByteArrayInputStream(("" +
  49. "Feature: Test\n" +
  50. " Scenario: Test\n" +
  51. " Given I have 4 cukes in my belly\n" +
  52. " And I have 3 bananas in my basket\n" +
  53. " Given I have 42 cukes in my belly\n")
  54. .getBytes("UTF-8"));
  55. } catch (UnsupportedEncodingException e) {
  56. throw new RuntimeException(e);
  57. }
  58. }
  59. }, emptyList());
  60. return features;
  61. }
  62. private StepDefinition def(final String pattern) {
  63. return new StepDefinition() {
  64. Pattern regexp = Pattern.compile(pattern);
  65. @Override
  66. public List<Argument> matchedArguments(Step step) {
  67. return new JdkPatternArgumentMatcher(regexp).argumentsFrom(step.getName());
  68. }
  69. @Override
  70. public Class getTypeForTableList(int argIndex) {
  71. throw new UnsupportedOperationException();
  72. }
  73. @Override
  74. public String getLocation() {
  75. throw new UnsupportedOperationException("TODO");
  76. }
  77. @Override
  78. public Class<?>[] getParameterTypes() {
  79. throw new UnsupportedOperationException("TODO");
  80. }
  81. @Override
  82. public void execute(Object[] args) throws Throwable {
  83. throw new UnsupportedOperationException("TODO");
  84. }
  85. @Override
  86. public boolean isDefinedAt(StackTraceElement stackTraceElement) {
  87. throw new UnsupportedOperationException("TODO");
  88. }
  89. @Override
  90. public String getPattern() {
  91. return pattern;
  92. }
  93. };
  94. }
  95. }