gherkin 2.4.21-x86-mswin32 → 2.5.0-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.
Files changed (105) hide show
  1. data/Gemfile.lock +5 -6
  2. data/History.md +71 -0
  3. data/features/json_formatter.feature +134 -80
  4. data/features/json_parser.feature +8 -12
  5. data/gherkin.gemspec +2 -2
  6. data/lib/1.8/gherkin_lexer_ar.so +0 -0
  7. data/lib/1.8/gherkin_lexer_bg.so +0 -0
  8. data/lib/1.8/gherkin_lexer_ca.so +0 -0
  9. data/lib/1.8/gherkin_lexer_cs.so +0 -0
  10. data/lib/1.8/gherkin_lexer_cy_gb.so +0 -0
  11. data/lib/1.8/gherkin_lexer_da.so +0 -0
  12. data/lib/1.8/gherkin_lexer_de.so +0 -0
  13. data/lib/1.8/gherkin_lexer_en.so +0 -0
  14. data/lib/1.8/gherkin_lexer_en_au.so +0 -0
  15. data/lib/1.8/gherkin_lexer_en_lol.so +0 -0
  16. data/lib/1.8/gherkin_lexer_en_pirate.so +0 -0
  17. data/lib/1.8/gherkin_lexer_en_scouse.so +0 -0
  18. data/lib/1.8/gherkin_lexer_en_tx.so +0 -0
  19. data/lib/1.8/gherkin_lexer_eo.so +0 -0
  20. data/lib/1.8/gherkin_lexer_es.so +0 -0
  21. data/lib/1.8/gherkin_lexer_et.so +0 -0
  22. data/lib/1.8/gherkin_lexer_fi.so +0 -0
  23. data/lib/1.8/gherkin_lexer_fr.so +0 -0
  24. data/lib/1.8/gherkin_lexer_he.so +0 -0
  25. data/lib/1.8/gherkin_lexer_hr.so +0 -0
  26. data/lib/1.8/gherkin_lexer_hu.so +0 -0
  27. data/lib/1.8/gherkin_lexer_id.so +0 -0
  28. data/lib/1.8/gherkin_lexer_is.so +0 -0
  29. data/lib/1.8/gherkin_lexer_it.so +0 -0
  30. data/lib/1.8/gherkin_lexer_ja.so +0 -0
  31. data/lib/1.8/gherkin_lexer_ko.so +0 -0
  32. data/lib/1.8/gherkin_lexer_lt.so +0 -0
  33. data/lib/1.8/gherkin_lexer_lu.so +0 -0
  34. data/lib/1.8/gherkin_lexer_lv.so +0 -0
  35. data/lib/1.8/gherkin_lexer_nl.so +0 -0
  36. data/lib/1.8/gherkin_lexer_no.so +0 -0
  37. data/lib/1.8/gherkin_lexer_pl.so +0 -0
  38. data/lib/1.8/gherkin_lexer_pt.so +0 -0
  39. data/lib/1.8/gherkin_lexer_ro.so +0 -0
  40. data/lib/1.8/gherkin_lexer_ru.so +0 -0
  41. data/lib/1.8/gherkin_lexer_sk.so +0 -0
  42. data/lib/1.8/gherkin_lexer_sr_cyrl.so +0 -0
  43. data/lib/1.8/gherkin_lexer_sr_latn.so +0 -0
  44. data/lib/1.8/gherkin_lexer_sv.so +0 -0
  45. data/lib/1.8/gherkin_lexer_tr.so +0 -0
  46. data/lib/1.8/gherkin_lexer_uk.so +0 -0
  47. data/lib/1.8/gherkin_lexer_uz.so +0 -0
  48. data/lib/1.8/gherkin_lexer_vi.so +0 -0
  49. data/lib/1.8/gherkin_lexer_zh_cn.so +0 -0
  50. data/lib/1.8/gherkin_lexer_zh_tw.so +0 -0
  51. data/lib/1.9/gherkin_lexer_ar.so +0 -0
  52. data/lib/1.9/gherkin_lexer_bg.so +0 -0
  53. data/lib/1.9/gherkin_lexer_ca.so +0 -0
  54. data/lib/1.9/gherkin_lexer_cs.so +0 -0
  55. data/lib/1.9/gherkin_lexer_cy_gb.so +0 -0
  56. data/lib/1.9/gherkin_lexer_da.so +0 -0
  57. data/lib/1.9/gherkin_lexer_de.so +0 -0
  58. data/lib/1.9/gherkin_lexer_en.so +0 -0
  59. data/lib/1.9/gherkin_lexer_en_au.so +0 -0
  60. data/lib/1.9/gherkin_lexer_en_lol.so +0 -0
  61. data/lib/1.9/gherkin_lexer_en_pirate.so +0 -0
  62. data/lib/1.9/gherkin_lexer_en_scouse.so +0 -0
  63. data/lib/1.9/gherkin_lexer_en_tx.so +0 -0
  64. data/lib/1.9/gherkin_lexer_eo.so +0 -0
  65. data/lib/1.9/gherkin_lexer_es.so +0 -0
  66. data/lib/1.9/gherkin_lexer_et.so +0 -0
  67. data/lib/1.9/gherkin_lexer_fi.so +0 -0
  68. data/lib/1.9/gherkin_lexer_fr.so +0 -0
  69. data/lib/1.9/gherkin_lexer_he.so +0 -0
  70. data/lib/1.9/gherkin_lexer_hr.so +0 -0
  71. data/lib/1.9/gherkin_lexer_hu.so +0 -0
  72. data/lib/1.9/gherkin_lexer_id.so +0 -0
  73. data/lib/1.9/gherkin_lexer_is.so +0 -0
  74. data/lib/1.9/gherkin_lexer_it.so +0 -0
  75. data/lib/1.9/gherkin_lexer_ja.so +0 -0
  76. data/lib/1.9/gherkin_lexer_ko.so +0 -0
  77. data/lib/1.9/gherkin_lexer_lt.so +0 -0
  78. data/lib/1.9/gherkin_lexer_lu.so +0 -0
  79. data/lib/1.9/gherkin_lexer_lv.so +0 -0
  80. data/lib/1.9/gherkin_lexer_nl.so +0 -0
  81. data/lib/1.9/gherkin_lexer_no.so +0 -0
  82. data/lib/1.9/gherkin_lexer_pl.so +0 -0
  83. data/lib/1.9/gherkin_lexer_pt.so +0 -0
  84. data/lib/1.9/gherkin_lexer_ro.so +0 -0
  85. data/lib/1.9/gherkin_lexer_ru.so +0 -0
  86. data/lib/1.9/gherkin_lexer_sk.so +0 -0
  87. data/lib/1.9/gherkin_lexer_sr_cyrl.so +0 -0
  88. data/lib/1.9/gherkin_lexer_sr_latn.so +0 -0
  89. data/lib/1.9/gherkin_lexer_sv.so +0 -0
  90. data/lib/1.9/gherkin_lexer_tr.so +0 -0
  91. data/lib/1.9/gherkin_lexer_uk.so +0 -0
  92. data/lib/1.9/gherkin_lexer_uz.so +0 -0
  93. data/lib/1.9/gherkin_lexer_vi.so +0 -0
  94. data/lib/1.9/gherkin_lexer_zh_cn.so +0 -0
  95. data/lib/1.9/gherkin_lexer_zh_tw.so +0 -0
  96. data/lib/gherkin/formatter/json_formatter.rb +10 -6
  97. data/lib/gherkin/formatter/model.rb +6 -20
  98. data/lib/gherkin/formatter/pretty_formatter.rb +3 -6
  99. data/lib/gherkin/json_parser.rb +5 -6
  100. data/lib/gherkin/listener/formatter_listener.rb +5 -1
  101. data/spec/gherkin/fixtures/complex.json +30 -42
  102. data/spec/gherkin/formatter/json_formatter_spec.rb +74 -0
  103. data/spec/gherkin/json_parser_spec.rb +5 -8
  104. data/tasks/cucumber.rake +1 -0
  105. metadata +26 -24
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -29,14 +29,17 @@ module Gherkin
29
29
 
30
30
  def background(background)
31
31
  feature_elements << background.to_hash
32
+ @step_index = 0
32
33
  end
33
34
 
34
35
  def scenario(scenario)
35
36
  feature_elements << scenario.to_hash
37
+ @step_index = 0
36
38
  end
37
39
 
38
40
  def scenario_outline(scenario_outline)
39
41
  feature_elements << scenario_outline.to_hash
42
+ @step_index = 0
40
43
  end
41
44
 
42
45
  def examples(examples)
@@ -48,11 +51,16 @@ module Gherkin
48
51
  end
49
52
 
50
53
  def match(match)
51
- last_step['match'] = match.to_hash
54
+ current_steps[@step_index]['match'] = match.to_hash
52
55
  end
53
56
 
54
57
  def result(result)
55
- last_step['result'] = result.to_hash
58
+ current_steps[@step_index]['result'] = result.to_hash
59
+ @step_index += 1
60
+ end
61
+
62
+ def last_step
63
+ current_steps[-1]
56
64
  end
57
65
 
58
66
  def embedding(mime_type, data)
@@ -81,10 +89,6 @@ module Gherkin
81
89
  feature_element['steps'] ||= []
82
90
  end
83
91
 
84
- def last_step
85
- current_steps[-1]
86
- end
87
-
88
92
  def embeddings
89
93
  last_step['embeddings'] ||= []
90
94
  end
@@ -112,15 +112,15 @@ module Gherkin
112
112
  class Step < BasicStatement
113
113
  native_impl('gherkin')
114
114
 
115
- attr_accessor :multiline_arg
115
+ attr_accessor :rows
116
+ attr_accessor :doc_string
116
117
 
117
118
  def line_range
118
119
  range = super
119
- case multiline_arg
120
- when Array
121
- range = range.first..multiline_arg[-1].line
122
- when Model::DocString
123
- range = range.first..multiline_arg.line_range.last
120
+ if(rows)
121
+ range = range.first..rows[-1].line
122
+ elsif(doc_string)
123
+ range = range.first..doc_string.line_range.last
124
124
  end
125
125
  range
126
126
  end
@@ -136,20 +136,6 @@ module Gherkin
136
136
  Argument.new(offset, val)
137
137
  end
138
138
  end
139
-
140
- def to_hash
141
- hash = super
142
- if Array === @multiline_arg
143
- hash['multiline_arg'] = {
144
- 'type' => 'table',
145
- 'value' => hash['multiline_arg']
146
- }
147
- elsif DocString === @multiline_arg
148
- hash['multiline_arg']['type'] = 'doc_string'
149
- hash['multiline_arg']['content_type'] = @multiline_arg.content_type
150
- end
151
- hash
152
- end
153
139
  end
154
140
 
155
141
  class Comment < Hashable
@@ -110,12 +110,9 @@ module Gherkin
110
110
  @io.write(text_format.text(step.keyword))
111
111
  @step_printer.write_step(@io, text_format, arg_format, step.name, arguments)
112
112
  @io.puts(indented_location(location, proceed))
113
- case step.multiline_arg
114
- when Model::DocString
115
- doc_string(step.multiline_arg)
116
- when Array
117
- table(step.multiline_arg)
118
- end
113
+
114
+ doc_string(step.doc_string) if step.doc_string
115
+ table(step.rows) if step.rows
119
116
  end
120
117
 
121
118
  class MonochromeFormat
@@ -53,12 +53,11 @@ module Gherkin
53
53
  def step(o)
54
54
  step = Formatter::Model::Step.new(comments(o), keyword(o), name(o), line(o))
55
55
 
56
- if(ma = o['multiline_arg'])
57
- if(ma['type'] == 'table')
58
- step.multiline_arg = rows(ma['value'])
59
- else
60
- step.multiline_arg = Formatter::Model::DocString.new(ma['content_type'].to_s, ma['value'], ma['line'])
61
- end
56
+ if(o['rows'])
57
+ step.rows = rows(o['rows'])
58
+ elsif(o['doc_string'])
59
+ ds = o['doc_string']
60
+ step.doc_string = Formatter::Model::DocString.new(ds['content_type'].to_s, ds['value'], ds['line'])
62
61
  end
63
62
 
64
63
  step
@@ -98,7 +98,11 @@ module Gherkin
98
98
 
99
99
  def replay_step_or_examples
100
100
  if(@step_statement)
101
- @step_statement.multiline_arg = grab_doc_string! || grab_rows!
101
+ if(doc_string = grab_doc_string!)
102
+ @step_statement.doc_string = doc_string
103
+ elsif(rows = grab_rows!)
104
+ @step_statement.rows = rows
105
+ end
102
106
  @formatter.step(@step_statement)
103
107
  @step_statement = nil
104
108
  end
@@ -29,14 +29,9 @@
29
29
  "steps": [
30
30
  { "name": "A step with a table",
31
31
  "keyword": "Given ",
32
- "multiline_arg": {
33
- "type": "table",
34
- "value" : [
35
- {"cells":
36
- [ "a","row","for","a","step" ]
37
- }
38
- ]
39
- }
32
+ "rows" : [
33
+ {"cells": [ "a","row","for","a","step" ]}
34
+ ]
40
35
  }
41
36
  ],
42
37
  "examples": [
@@ -79,41 +74,35 @@
79
74
  "steps" : [
80
75
  { "name" : "a third step with a table",
81
76
  "keyword": "Given ",
82
- "multiline_arg": {
83
- "type": "table",
84
- "value": [
85
- {
86
- "cells" : [ "a","b" ],
87
- "line" : 987
88
- },
89
- { "cells" :
90
- [ "c","d" ]
91
- },
92
- { "cells" :
93
- [ "e", "f" ]
94
- }
95
- ]
96
- }
77
+ "rows": [
78
+ {
79
+ "cells" : [ "a","b" ],
80
+ "line" : 987
81
+ },
82
+ { "cells" :
83
+ [ "c","d" ]
84
+ },
85
+ { "cells" :
86
+ [ "e", "f" ]
87
+ }
88
+ ]
97
89
  },
98
90
  { "name" : "I am still testing things",
99
91
  "keyword": "Given ",
100
- "multiline_arg": {
101
- "type": "table",
102
- "value": [
103
- { "cells" :
104
- [ "g","h" ]
105
- },
106
- { "cells" :
107
- [ "e","r" ]
108
- },
109
- { "cells" :
110
- [ "k", "i" ]
111
- },
112
- { "cells" :
113
- [ "n", "" ]
114
- }
115
- ]
116
- }
92
+ "rows": [
93
+ { "cells" :
94
+ [ "g","h" ]
95
+ },
96
+ { "cells" :
97
+ [ "e","r" ]
98
+ },
99
+ { "cells" :
100
+ [ "k", "i" ]
101
+ },
102
+ { "cells" :
103
+ [ "n", "" ]
104
+ }
105
+ ]
117
106
  },
118
107
  { "name" : "I am done testing these tables",
119
108
  "keyword": "Given " },
@@ -128,8 +117,7 @@
128
117
  "steps" : [
129
118
  { "name" : "All work and no play",
130
119
  "keyword": "Given ",
131
- "multiline_arg": {
132
- "type": "doc_string",
120
+ "doc_string": {
133
121
  "content_type": "text",
134
122
  "value": "Makes Homer something something\nAnd something else",
135
123
  "line": 777
@@ -0,0 +1,74 @@
1
+ require 'spec_helper'
2
+ require 'stringio'
3
+ require 'gherkin/formatter/json_formatter'
4
+ require 'gherkin/formatter/model'
5
+
6
+ module Gherkin
7
+ module Formatter
8
+ describe JSONFormatter do
9
+ it "renders results" do
10
+ io = StringIO.new
11
+ f = JSONFormatter.new(io)
12
+ f.uri("f.feature")
13
+ f.feature(Model::Feature.new([], [], "Feature", "f", "", 1))
14
+ f.scenario(Model::Scenario.new([], [], "Feature", "f", "", 2))
15
+ f.step(Model::Step.new([], "Given ", "g", 3))
16
+ f.step(Model::Step.new([], "When ", "w", 4))
17
+
18
+ f.match(Model::Match.new([], "def.rb:33"))
19
+ f.result(Model::Result.new(:passed, 1, nil))
20
+
21
+ f.match(Model::Match.new([], "def.rb:44"))
22
+ f.result(Model::Result.new(:passed, 1, nil))
23
+
24
+ f.eof
25
+
26
+ expected = %{
27
+ {
28
+ "keyword": "Feature",
29
+ "name": "f",
30
+ "line": 1,
31
+ "description": "",
32
+ "elements": [
33
+ {
34
+ "keyword": "Feature",
35
+ "name": "f",
36
+ "line": 2,
37
+ "description": "",
38
+ "type": "scenario",
39
+ "steps": [
40
+ {
41
+ "keyword": "Given ",
42
+ "name": "g",
43
+ "line": 3,
44
+ "match": {
45
+ "location": "def.rb:33"
46
+ },
47
+ "result": {
48
+ "status": "passed",
49
+ "duration": 1
50
+ }
51
+ },
52
+ {
53
+ "keyword": "When ",
54
+ "name": "w",
55
+ "line": 4,
56
+ "match": {
57
+ "location": "def.rb:44"
58
+ },
59
+ "result": {
60
+ "status": "passed",
61
+ "duration": 1
62
+ }
63
+ }
64
+ ]
65
+ }
66
+ ]
67
+ }
68
+ }
69
+
70
+ JSON.parse(expected).should == JSON.parse(io.string)
71
+ end
72
+ end
73
+ end
74
+ end