greenpepper-ruby 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. data/bin/greenpepperize +71 -0
  2. data/bin/greenpepperrails +33 -0
  3. data/bin/greenpepperruby +15 -0
  4. data/data/greenpepper.rake +37 -0
  5. data/data/helper.rb +32 -0
  6. data/data/tags +6 -0
  7. data/lib/greenpepper/argumentparser.rb +161 -0
  8. data/lib/greenpepper/common/loadpath.rb +7 -0
  9. data/lib/greenpepper/context/htmlcontext.rb +26 -0
  10. data/lib/greenpepper/converter.rb +347 -0
  11. data/lib/greenpepper/core.rb +152 -0
  12. data/lib/greenpepper/example/collectionexample.rb +305 -0
  13. data/lib/greenpepper/example/dowithexample.rb +192 -0
  14. data/lib/greenpepper/example/exampleheader.rb +41 -0
  15. data/lib/greenpepper/example/examplewithfixture.rb +73 -0
  16. data/lib/greenpepper/example/executionresults.rb +160 -0
  17. data/lib/greenpepper/example/fieldaccessor.rb +36 -0
  18. data/lib/greenpepper/example/freetextexample.rb +51 -0
  19. data/lib/greenpepper/example/importexample.rb +39 -0
  20. data/lib/greenpepper/example/nameresolver.rb +69 -0
  21. data/lib/greenpepper/example/ruleforexample.rb +117 -0
  22. data/lib/greenpepper/example/setupexample.rb +79 -0
  23. data/lib/greenpepper/example/silentexample.rb +14 -0
  24. data/lib/greenpepper/example/unknownexample.rb +17 -0
  25. data/lib/greenpepper/exception/greenpepperexception.rb +57 -0
  26. data/lib/greenpepper/executionunit.rb +39 -0
  27. data/lib/greenpepper/factory/collectionexamplefactory.rb +59 -0
  28. data/lib/greenpepper/factory/dowithexamplefactory.rb +71 -0
  29. data/lib/greenpepper/factory/examplefactory.rb +14 -0
  30. data/lib/greenpepper/factory/freetextexamplefactory.rb +29 -0
  31. data/lib/greenpepper/factory/htmlexamplefactory.rb +49 -0
  32. data/lib/greenpepper/factory/importexamplefactory.rb +27 -0
  33. data/lib/greenpepper/factory/ruleforexamplefactory.rb +46 -0
  34. data/lib/greenpepper/factory/setupexamplefactory.rb +31 -0
  35. data/lib/greenpepper/factory/silentexamplefactory.rb +21 -0
  36. data/lib/greenpepper/factory/unknownexamplefactory.rb +16 -0
  37. data/lib/greenpepper/freetext.rb +164 -0
  38. data/lib/greenpepper/grammar/array.treetop +51 -0
  39. data/lib/greenpepper/grammar/arrayparser.rb +14 -0
  40. data/lib/greenpepper/greenpepperconfig.rb +19 -0
  41. data/lib/greenpepper/greenpeppertask.rb +60 -0
  42. data/lib/greenpepper/logger.rb +45 -0
  43. data/lib/greenpepper/parser/freetextparser.rb +96 -0
  44. data/lib/greenpepper/parser/htmlparser.rb +70 -0
  45. data/lib/greenpepper/parser/scenario.rb +25 -0
  46. data/lib/greenpepper/parser/table.rb +37 -0
  47. data/lib/greenpepper/parser/wikiparser.rb +26 -0
  48. data/lib/greenpepper/pass/freetextpass.rb +24 -0
  49. data/lib/greenpepper/pass/greenpepperpass.rb +92 -0
  50. data/lib/greenpepper/pass/tablepass.rb +38 -0
  51. data/lib/greenpepper/railsargumentparser.rb +46 -0
  52. data/lib/greenpepper/redpeppertask.rb +89 -0
  53. data/lib/greenpepper/repository/atlassianrepository.rb +100 -0
  54. data/lib/greenpepper/writer/consolewriter.rb +21 -0
  55. data/lib/greenpepper/writer/freetextresult.rb +233 -0
  56. data/lib/greenpepper/writer/freetextwriter.rb +44 -0
  57. data/lib/greenpepper/writer/html.rb +14 -0
  58. data/lib/greenpepper/writer/htmldocwriter.rb +82 -0
  59. data/lib/greenpepper/writer/htmlresult.rb +192 -0
  60. data/lib/greenpepper/writer/htmlwriter.rb +112 -0
  61. data/lib/greenpepper/writer/output.rb +26 -0
  62. data/lib/greenpepper/writer/result.rb +35 -0
  63. data/lib/greenpepper/writer/xmlwriter.rb +32 -0
  64. data/test/coreseedstest.rb +39 -0
  65. data/test/greenpepper/argumentparsertest.rb +162 -0
  66. data/test/greenpepper/common/loadpathtest.rb +24 -0
  67. data/test/greenpepper/common/stattest.rb +186 -0
  68. data/test/greenpepper/convertertest.rb +371 -0
  69. data/test/greenpepper/coretest.rb +159 -0
  70. data/test/greenpepper/example/collectionexampletest.rb +484 -0
  71. data/test/greenpepper/example/dowithexampletest.rb +148 -0
  72. data/test/greenpepper/example/exampletest.rb +28 -0
  73. data/test/greenpepper/example/freetextexampletest.rb +151 -0
  74. data/test/greenpepper/example/importexampletest.rb +79 -0
  75. data/test/greenpepper/example/nameresolvertest.rb +56 -0
  76. data/test/greenpepper/example/ruleforexampletest.rb +225 -0
  77. data/test/greenpepper/example/setupexampletest.rb +140 -0
  78. data/test/greenpepper/example/silentexampletest.rb +17 -0
  79. data/test/greenpepper/example/unknownexampletest.rb +17 -0
  80. data/test/greenpepper/factory/collectionexamplefactorytest.rb +51 -0
  81. data/test/greenpepper/factory/dowithexamplefactorytest.rb +48 -0
  82. data/test/greenpepper/factory/examplefactorytest.rb +88 -0
  83. data/test/greenpepper/factory/freetextexamplefactorytest.rb +54 -0
  84. data/test/greenpepper/factory/importexamplefactorytest.rb +40 -0
  85. data/test/greenpepper/factory/ruleforexamplefactorytest.rb +55 -0
  86. data/test/greenpepper/factory/setupexamplefactorytest.rb +29 -0
  87. data/test/greenpepper/factory/silentexamplefactorytest.rb +38 -0
  88. data/test/greenpepper/freetexttest.rb +222 -0
  89. data/test/greenpepper/grammar/arrayparsertest.rb +45 -0
  90. data/test/greenpepper/loggertest.rb +26 -0
  91. data/test/greenpepper/parser/freetextparsertest.rb +124 -0
  92. data/test/greenpepper/parser/htmlparsertest.rb +77 -0
  93. data/test/greenpepper/parser/wikiparsertest.rb +21 -0
  94. data/test/greenpepper/pass/freetextpasstest.rb +54 -0
  95. data/test/greenpepper/pass/greenpepperpasstest.rb +47 -0
  96. data/test/greenpepper/pass/tablepasstest.rb +23 -0
  97. data/test/greenpepper/repository/atlassionrepositorytest.rb +85 -0
  98. data/test/greenpepper/writer/freetextwritertest.rb +301 -0
  99. data/test/greenpepper/writer/htmlcollectionwritertest.rb +145 -0
  100. data/test/greenpepper/writer/htmldowithwritertest.rb +87 -0
  101. data/test/greenpepper/writer/htmlruleforwritertest.rb +147 -0
  102. data/test/greenpepper/writer/htmlsetupwritertest.rb +107 -0
  103. data/test/greenpepper/writer/htmlstatresulttest.rb +118 -0
  104. data/test/greenpepper/writer/htmlwriterpositiontest.rb +53 -0
  105. data/test/greenpepper/writer/writertest.rb +33 -0
  106. data/test/greenpepper/writer/xmlwritertest.rb +34 -0
  107. data/test/integration/collectionexampleintegrationtest.rb +64 -0
  108. data/test/integration/errorhandlingintegrationtest.rb +68 -0
  109. data/test/integration/freetextexampleintegrationtest.rb +75 -0
  110. data/test/integration/greenpepperexecutableintegrationtest.rb +22 -0
  111. data/test/integration/importexampleintegrationtest.rb +41 -0
  112. data/test/integration/interpretationordertest.rb +48 -0
  113. data/test/integration/ruleforexampleintegrationtest.rb +102 -0
  114. data/test/integration/securityintegrationtest.rb +30 -0
  115. data/test/integration/setupexampleintegrationtest.rb +31 -0
  116. data/test/integration/silentexampleintegrationtest.rb +29 -0
  117. data/test/task/greenpeppertasktest.rb +96 -0
  118. data/test/task/redpeppertasktest.rb +120 -0
  119. data/vendor/accents.rb +85 -0
  120. metadata +234 -0
@@ -0,0 +1,301 @@
1
+ =begin
2
+ author: Simon Mathieu (simon.math@gmail.com)
3
+ date: October 3, 2009
4
+ =end
5
+
6
+ require 'test/unit'
7
+ require 'test/helper/assert'
8
+ require 'test/helper/assertion'
9
+
10
+ require 'greenpepper/freetext'
11
+ require 'greenpepper/example/freetextexample'
12
+ require 'greenpepper/writer/freetextwriter'
13
+ require 'greenpepper/writer/freetextresult'
14
+
15
+
16
+ include GreenPepper
17
+
18
+ class FreeTextWriterSuccessTest < Test::Unit::TestCase
19
+ def setup
20
+ @fixture_name = "Some Fixture"
21
+ @ex = FreeTextExample.new @fixture_name
22
+ @ex.add_action "Action 1"
23
+
24
+ @results = FreeTextExecutionResults.new
25
+ @results.add_result HeaderSuccess.new(@fixture_name)
26
+
27
+ @writer = FreeTextWriter.new
28
+ end
29
+
30
+ def test_write_example_with_success_in_header
31
+ ex = FreeTextExample.new @fixture_name
32
+ assert_html "<div class=\"greenpepper-freetext\">Scenario: #{@fixture_name}</div>"
33
+ assert_equal 0, ExecutionResults.get_all_results([@results]).successes
34
+ end
35
+
36
+ def test_writer_example_with_success_in_given
37
+ @results.add_result GivenSuccess.new
38
+ assert_html '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
39
+ '<div class="greenpepper-freetext-indent">Action 1</div>'
40
+ assert_equal 0, ExecutionResults.get_all_results([@results]).successes
41
+ end
42
+
43
+ def test_writer_example_with_success_in_when
44
+ @results.add_result WhenSuccess.new
45
+ assert_html '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
46
+ '<div class="greenpepper-freetext-indent">Action 1</div>'
47
+ assert_equal 0, ExecutionResults.get_all_results([@results]).successes
48
+ end
49
+
50
+ def test_writer_example_with_success_in_check
51
+ @results.add_result CheckSuccess.new
52
+ assert_html '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
53
+ '<div class="greenpepper-freetext-indent">' +
54
+ '<font style="background-color: #98FB98;">Action 1</font></div>'
55
+ assert_equal 1, ExecutionResults.get_all_results([@results]).successes
56
+ end
57
+
58
+ def test_writer_example_with_success_in_ask
59
+ @results.add_result AskSuccess.new('foo')
60
+ assert_html '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
61
+ '<div class="greenpepper-freetext-indent">Action 1' +
62
+ '<div class="greenpepper-freetext-indent">Answer: ' +
63
+ '<font style="background-color: #D3D3D3;">foo</font></div></div>'
64
+ assert_equal 0, ExecutionResults.get_all_results([@results]).successes
65
+ end
66
+
67
+ def test_writer_example_with_success_in_then
68
+ expectation = Expectation.new('1')
69
+ expectation.received = '1'
70
+
71
+ @results.add_result ThenResults.new(/Action (1)/, [expectation])
72
+ assert_html '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
73
+ '<div class="greenpepper-freetext-indent">Action ' +
74
+ '<font style="background-color: #98FB98;">1</font></div>'
75
+ assert_equal 1, ExecutionResults.get_all_results([@results]).successes
76
+ end
77
+
78
+ def test_writer_example_with_multiple_successes_in_then
79
+ ex = FreeTextExample.new @fixture_name
80
+ ex.add_action "Action 1 and 2"
81
+
82
+ expectations= [Expectation.new('1'),
83
+ Expectation.new('2')]
84
+ expectations[0].received = '1'
85
+ expectations[1].received = '2'
86
+
87
+ @results.add_result ThenResults.new(/Action (1) and (2)/, expectations)
88
+ html = @writer.example_to_html ex, @results
89
+
90
+ assert_equal '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
91
+ '<div class="greenpepper-freetext-indent">Action ' +
92
+ '<font style="background-color: #98FB98;">1</font> and ' +
93
+ '<font style="background-color: #98FB98;">2</font></div>', html
94
+
95
+ assert_equal 2, ExecutionResults.get_all_results([@results]).successes
96
+ end
97
+
98
+ private
99
+ def assert_html(expected)
100
+ html = @writer.example_to_html @ex, @results
101
+ assert_equal expected, html
102
+ end
103
+ end
104
+
105
+ class FreeTextWriterErrorTest < Test::Unit::TestCase
106
+ def setup
107
+ @fixture_name = "Some Fixture"
108
+ @ex = FreeTextExample.new "Some Fixture"
109
+ @ex.add_action "Action 1"
110
+
111
+ @results = FreeTextExecutionResults.new
112
+ @results.add_result HeaderSuccess.new(@fixture_name)
113
+
114
+ @writer = FreeTextWriter.new
115
+
116
+ @error = Exception.new
117
+ @error.set_backtrace ["a", "b", "c"]
118
+ end
119
+
120
+ def test_header
121
+ ex = FreeTextExample.new @fixture_name
122
+ results = FreeTextExecutionResults.new
123
+ results.add_result HeaderError.new(@fixture_name, @error)
124
+
125
+ html = @writer.example_to_html ex, results
126
+ assert_equal '<div class="greenpepper-freetext">Scenario: '+
127
+ '<font style="background-color: #F0E68C;">' +
128
+ 'Some Fixture</font><div class="greenpepper-freetext-indent">' +
129
+ '<div class="greenpepper-freetext-indent">' +
130
+ '<font style="background-color: #F0E68C;">Exception: Exception</font>' +
131
+ '</div><hr/><div class="greenpepper-freetext-indent2">' +
132
+ '<font style="background-color: #F0E68C;">a</font></div>' +
133
+ '<div class="greenpepper-freetext-indent2">' +
134
+ '<font style="background-color: #F0E68C;">b</font></div>' +
135
+ '<div class="greenpepper-freetext-indent2">' +
136
+ '<font style="background-color: #F0E68C;">c</font></div></div></div>', html
137
+ assert_equal 1, ExecutionResults.get_all_results([results]).errors
138
+ end
139
+
140
+ def test_error
141
+ expected = '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
142
+ '<div class="greenpepper-freetext-indent"><div class="greenpepper-freetext">'+
143
+ '<font style="background-color: #F0E68C;">Action 1</font></div>' +
144
+ '<div class="greenpepper-freetext-indent">' +
145
+ '<font style="background-color: #F0E68C;">' +
146
+ 'Exception: Exception</font></div><hr/>' +
147
+ '<div class="greenpepper-freetext-indent2">' +
148
+ '<font style="background-color: #F0E68C;">a</font></div>' +
149
+ '<div class="greenpepper-freetext-indent2">' +
150
+ '<font style="background-color: #F0E68C;">b</font></div>' +
151
+ '<div class="greenpepper-freetext-indent2">' +
152
+ '<font style="background-color: #F0E68C;">c</font></div></div>'
153
+
154
+ @results.add_result ActionError.new(@error)
155
+ html = @writer.example_to_html @ex, @results
156
+ assert_equal expected, html
157
+ assert_equal 1, ExecutionResults.get_all_results([@results]).errors
158
+ end
159
+
160
+ def test_html_tags_get_escape_in_error
161
+ expected = '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
162
+ '<div class="greenpepper-freetext-indent">' +
163
+ '<div class="greenpepper-freetext">' +
164
+ '<font style="background-color: #F0E68C;">Action 1</font></div>' +
165
+ '<div class="greenpepper-freetext-indent">' +
166
+ '<font style="background-color: #F0E68C;">' +
167
+ 'Exception: undefined method `set\' for #&lt;Exception: Exception&gt;' +
168
+ '</font></div></div>'
169
+
170
+ error = Exception.new("undefined method `set' for #<Exception: Exception>")
171
+ @results.add_result ActionError.new(error)
172
+ html = @writer.example_to_html @ex, @results
173
+ assert_equal expected, html
174
+ assert_equal 1, ExecutionResults.get_all_results([@results]).errors
175
+ end
176
+ end
177
+
178
+ class FreeTextWriterFailureTest < Test::Unit::TestCase
179
+ def setup
180
+ @fixture_name = "Some Fixture"
181
+
182
+ @ex = FreeTextExample.new "Some Fixture"
183
+ @ex.add_action "Action 1 and 2"
184
+
185
+ @results = FreeTextExecutionResults.new
186
+ @results.add_result HeaderSuccess.new(@fixture_name)
187
+
188
+ @writer = FreeTextWriter.new
189
+ end
190
+
191
+ def test_check
192
+ @results.add_result CheckFailure.new
193
+ html = @writer.example_to_html @ex, @results
194
+ assert_equal '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
195
+ '<div class="greenpepper-freetext-indent">' +
196
+ '<font style="background-color: #F08080;">' +
197
+ 'Action 1 and 2</font></div>', html
198
+ assert_equal 1, ExecutionResults.get_all_results([@results]).failures
199
+ end
200
+
201
+ def test_then
202
+ expectations = [Expectation.new(1), Expectation.new(2)]
203
+ expectations[0].received = 7
204
+ expectations[1].received = 2
205
+
206
+ @results.add_result ThenResults.new(/Action (1) and (2)/, expectations)
207
+ html = @writer.example_to_html @ex, @results
208
+ assert_equal '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
209
+ '<div class="greenpepper-freetext-indent">Action ' +
210
+ '<font style="background-color: #F08080;">1</font> and ' +
211
+ '<font style="background-color: #98FB98;">2</font>' +
212
+ '<div class="greenpepper-freetext-indent">' +
213
+ '<font style="background-color: #F08080;">' +
214
+ 'Expected value was 1, but 7 was received</font></div></div>', html
215
+
216
+ assert_equal 1, ExecutionResults.get_all_results([@results]).successes
217
+ assert_equal 1, ExecutionResults.get_all_results([@results]).failures
218
+ end
219
+
220
+ def test_then_expected_line
221
+ expectations = [Expectation.new(1), Expectation.new(2)]
222
+ expectations[0].received = 7
223
+ expectations[1].received = 3
224
+
225
+ @results.add_result ThenResults.new(/Action (1) and (2)/, expectations)
226
+
227
+ html = @writer.example_to_html @ex, @results
228
+ assert_equal '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
229
+ '<div class="greenpepper-freetext-indent">Action ' +
230
+ '<font style="background-color: #F08080;">1</font> and ' +
231
+ '<font style="background-color: #F08080;">2</font>' +
232
+ '<div class="greenpepper-freetext-indent">' +
233
+ '<font style="background-color: #F08080;">' +
234
+ 'Expected value was 1, but 7 was received</font></div>' +
235
+ '<div class="greenpepper-freetext-indent">' +
236
+ '<font style="background-color: #F08080;">' +
237
+ 'Expected value was 2, but 3 was received</font></div></div>', html
238
+
239
+ assert_equal 2, ExecutionResults.get_all_results([@results]).failures
240
+ end
241
+
242
+ def test_writer_type_conversion_in_then
243
+ ex = FreeTextExample.new @fixture_name
244
+ ex.add_action "Action [1,2,3]"
245
+
246
+ expectation = Expectation.new([1,2,3])
247
+ expectation.received = [1,2,4]
248
+ @results.add_result ThenResults.new(/Action (\[.*\])/, [expectation])
249
+ html = @writer.example_to_html ex, @results
250
+
251
+ assert_equal '<div class="greenpepper-freetext">Scenario: Some Fixture</div>' +
252
+ '<div class="greenpepper-freetext-indent">Action ' +
253
+ '<font style="background-color: #F08080;">[1,2,3]</font>' +
254
+ '<div class="greenpepper-freetext-indent">' +
255
+ '<font style="background-color: #F08080;">Expected value was [1,2,3],' +
256
+ ' but [1,2,4] was received</font></div></div>', html
257
+ assert_equal 1, ExecutionResults.get_all_results([@results]).failures
258
+ end
259
+ end
260
+
261
+ class FreeTextWriterTest < Test::Unit::TestCase
262
+ def test_write
263
+ base_html = load_file 'test/seeds/freetextsimpleseed.html'
264
+
265
+ error = Exception.new
266
+ error.set_backtrace ['a', 'b', 'c']
267
+
268
+ fixture_name = 'free text writer test'
269
+ results = FreeTextExecutionResults.new
270
+ results.add_result HeaderSuccess.new(fixture_name)
271
+ results.add_result GivenSuccess.new
272
+ results.add_result WhenSuccess.new
273
+ results.add_result CheckFailure.new
274
+ results.add_result ActionError.new(error)
275
+
276
+ example = FreeTextExample.new fixture_name
277
+
278
+ example.add_action "This is the first line."
279
+ example.add_action "This is the second line."
280
+ example.add_action "This is the third line."
281
+ example.add_action "This is the fourth line."
282
+
283
+ ex_unit = ExecutionUnit.new nil, nil, example, results
284
+
285
+ writer = FreeTextWriter.new
286
+ document = writer.write base_html, [ex_unit]
287
+
288
+ File.open('test/results/freetextsimpleseed.html', 'w'){ |f|
289
+ f.write document
290
+ }
291
+
292
+ assert_file_equal 'test/expected/freetextsimpleseed.html',
293
+ 'test/results/freetextsimpleseed.html'
294
+ end
295
+
296
+ private
297
+ def load_file path
298
+ File.open(path) {|f| f.read }
299
+ end
300
+ end
301
+
@@ -0,0 +1,145 @@
1
+ =begin
2
+ author: Sebastien Boisclair (sebboiclair@gmail.com)
3
+ date: March 31, 2009
4
+ =end
5
+
6
+ require 'rubygems'
7
+ require 'libxml'
8
+ require 'test/unit'
9
+ require 'greenpepper/writer/htmlwriter'
10
+ require 'greenpepper/example/collectionexample'
11
+
12
+ require 'test/fixtures/fixture'
13
+ require 'test/fixtures/collectionfixture'
14
+ require 'test/helper/assertion'
15
+ require 'test/helper/html'
16
+
17
+ include GreenPepper
18
+
19
+ class HtmlCollectionWriterTest < Test::Unit::TestCase
20
+ def test_collection_writer_simple_case_rewrote_on_html
21
+ base_html = load_file 'test/seeds/collection_simple.html'
22
+ expected = load_file(
23
+ 'test/expected/collection_output_no_missing_surplus.html')
24
+
25
+ expected = HtmlHelper.create_expected expected
26
+
27
+ example = ListOfExample.new "CollectionFixture"
28
+ example.add_headers ['first_name', 'id']
29
+ example.add_row ['Pascal', 1]
30
+ example.add_row ['Steven', 3]
31
+ result = HtmlHelper.test_x_html_table(1, example, base_html)
32
+ assert_equal HtmlHelper.remove_indent(expected), result
33
+ end
34
+
35
+ def test_collection_writer_too_many_input
36
+ base_html = load_file 'test/seeds/collection_one_entry.html'
37
+ expected = load_file 'test/expected/collection_output_surplus.html'
38
+ expected = HtmlHelper.create_expected expected
39
+
40
+ ex = ListOfExample.new "CollectionFixture"
41
+ ex.add_headers ['first_name', 'id']
42
+ ex.add_row ['Pascal', 1]
43
+
44
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
45
+ assert_equal HtmlHelper.remove_indent(expected), result
46
+ end
47
+
48
+ def test_collection_writer_simple_missing_elements
49
+ base_html = load_file 'test/seeds/collection_three_entry.html'
50
+ expected = load_file 'test/expected/collection_output_missing.html'
51
+
52
+ expected = HtmlHelper.create_expected expected
53
+
54
+ ex = ListOfExample.new "CollectionFixture"
55
+ ex.add_headers ['first_name', 'id']
56
+ ex.add_row ['Pascal', 1]
57
+ ex.add_row ['Steven', 2]
58
+ ex.add_row ['Bob', 3]
59
+
60
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
61
+ assert_equal HtmlHelper.remove_indent(expected), result
62
+ end
63
+
64
+ def test_collection_non_existing_fixture
65
+ base_html = load_file 'test/seeds/collection_non_existing_fixture.html'
66
+ expected = load_file 'test/expected/collection_missing_fixture.html'
67
+
68
+ expected = HtmlHelper.create_expected expected
69
+
70
+ ex = ListOfExample.new "NonExistingFixture"
71
+ ex.add_headers ['first_name', 'id']
72
+ ex.add_row ['Pascal', 1]
73
+
74
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
75
+ assert_equal HtmlHelper.remove_indent(expected), result
76
+ end
77
+
78
+ def test_collection_ignore_cell
79
+ base_html = load_file 'test/seeds/collection_three_entry.html'
80
+ expected = load_file 'test/expected/collection_surplus_output_ignored.html'
81
+
82
+ expected = HtmlHelper.create_expected expected
83
+
84
+ ex = SupersetOfExample.new "CollectionFixture"
85
+ ex.add_headers ['first_name', 'id']
86
+ ex.add_row ['Pascal', 1]
87
+ ex.add_row ['Steven', 2]
88
+ ex.add_row ['Bob', 3]
89
+
90
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
91
+ assert_equal HtmlHelper.remove_indent(expected), result
92
+ end
93
+
94
+ def test_collection_error_in_header
95
+ base_html = load_file 'test/seeds/collection_simple.html'
96
+ expected = load_file 'test/expected/collection_output_header_error.html'
97
+
98
+ expected = HtmlHelper.create_expected expected
99
+
100
+ ex = ListOfExample.new "CollectionFixture"
101
+ ex.add_headers ['next_name', 'id']
102
+ ex.add_row ['Pascal', 1]
103
+ ex.add_row ['Steven', 3]
104
+
105
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
106
+ assert_equal HtmlHelper.remove_indent(expected), result
107
+ end
108
+
109
+ def test_collection_error_in_listof_element
110
+ base_html = load_file 'test/seeds/collection_element_error.html'
111
+ expected = load_file 'test/expected/collection_listof_output_element_error.html'
112
+
113
+ expected = HtmlHelper.create_expected expected
114
+ ex = ListOfExample.new "CollectionFixtureWithExceptionInElement"
115
+ ex.add_headers ['first_name', 'last_name']
116
+ ex.add_row ['Pascal','Ouellet']
117
+
118
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
119
+ assert_equal HtmlHelper.remove_indent(expected), result
120
+ end
121
+
122
+ def test_collection_error_in_setof_element
123
+ base_html = load_file 'test/seeds/collection_element_error.html'
124
+ expected = load_file 'test/expected/collection_setof_output_element_error.html'
125
+
126
+ expected = HtmlHelper.create_expected expected
127
+
128
+ ex = SetOfExample.new "CollectionFixtureWithExceptionInElement"
129
+ ex.add_headers ['first_name', 'last_name']
130
+ ex.add_row ['Pascal','Ouellet']
131
+
132
+ parse_and_assert base_html, expected, ex
133
+ end
134
+
135
+ private
136
+ def load_file path
137
+ File.open(path) {|f| f.read }
138
+ end
139
+
140
+ def parse_and_assert base_html, expected, example
141
+ expected[-1] = "" if expected.size > 0 && /\n/ === expected[-1].chr
142
+ result = HtmlHelper.test_x_html_table(1, example, base_html)
143
+ assert_equal HtmlHelper.remove_indent(expected), result
144
+ end
145
+ end
@@ -0,0 +1,87 @@
1
+ =begin
2
+ author: Simon Mathieu (simon.math@gmail.com)
3
+ date: March 25, 2009
4
+ =end
5
+
6
+ require 'rubygems'
7
+ require 'libxml'
8
+ require 'test/unit'
9
+ require 'greenpepper/writer/htmlwriter'
10
+ require 'greenpepper/example/dowithexample'
11
+
12
+ require 'test/fixtures/dowithfixture'
13
+ require 'test/helper/assertion'
14
+ require 'test/helper/html'
15
+
16
+ include GreenPepper
17
+
18
+ class HtmlDoWithWriterTest < Test::Unit::TestCase
19
+ def test_multiple_line_writer
20
+ base_html = ""
21
+ html_ex = "<table border=\"1\"><tr><td>Do With</td><td>Bank2</td></tr><tr><td>open account</td><td>123</td></tr><tr><td>check</td><td>that amount for account</td><td>123</td><td>is</td><td style=\"background-color: #98FB98\">0</td></tr><tr><td style=\"background-color: #98FB98\">accept</td><td>deposit in account</td><td>100</td><td>123</td></tr><tr><td style=\"background-color: #98FB98\">reject</td><td>withdraw from account</td><td>200</td><td>123</td></tr><tr><td>end</td></tr></table>"
22
+ expected = HtmlHelper.create_expected html_ex
23
+
24
+ File.open('test/seeds/dowith_single_table2.html'){|f|
25
+ base_html = f.read }
26
+
27
+ ex = DoWithExample.new 'Bank2'
28
+ ex.add_function_call 'open account', 0, '123'
29
+ ex.add_check 'that_amount_for_account_is', 4, 0, '123'
30
+ ex.add_accept 'deposit in account', 0, '100', '123'
31
+ ex.add_reject 'withdraw from account', 0, '200', '123'
32
+
33
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
34
+ assert_equal expected, result
35
+ end
36
+
37
+ def test_single_table_missing_fixture
38
+ base_html = ""
39
+ html_ex = "<table border=\"1\"><tr><td>Do With</td><td style=\"background-color: #F0E68C\">Bank2</td></tr><tr><td>open account</td><td>123</td></tr><tr><td>check</td><td>that amount for account</td><td>123</td><td>is</td><td>0</td></tr><tr><td>accept</td><td>deposit in account</td><td>100</td><td>123</td></tr><tr><td>reject</td><td>withdraw from account</td><td>200</td><td>123</td></tr><tr><td>end</td></tr></table>"
40
+ expected = HtmlHelper.create_expected html_ex
41
+
42
+ File.open('test/seeds/dowith_single_table2.html'){|f|
43
+ base_html = f.read }
44
+
45
+ ex = DoWithExample.new 'Bankfdasl2'
46
+ ex.add_function_call 'open account', 0, '123'
47
+ ex.add_check 'that_amount_for_account_is', 4, 0, '123'
48
+ ex.add_accept 'deposit in account', 0, '100', '123'
49
+ ex.add_reject 'withdraw from account', 0, '200', '123'
50
+
51
+ result = HtmlHelper.test_x_html_table(1, ex, base_html)
52
+ assert_equal expected, result
53
+ end
54
+
55
+ def test_multiple_table_do_with
56
+ base_html = ""
57
+ html_ex = "Some freetex 1<table border=\"1\"><tr><td>Do With</td><td>Bank2</td></tr></table>Some freetex 2<table border=\"1\"><tr><td>open account</td><td>123</td></tr></table>Some freetex 3<table border=\"1\"><tr><td>check</td><td>that ammount for account</td><td>123</td><td>is</td><td style=\"background-color: #98FB98\">0</td></tr><tr><td style=\"background-color: #98FB98\">accept</td><td>deposit</td><td>100</td><td>in account</td><td>123</td></tr></table>Some freetex 4<table border=\"1\"><tr><td style=\"background-color: #98FB98\">reject</td><td>withdraw </td><td>200</td><td>from account</td><td>123</td></tr></table>Some freetex 5<table border=\"1\"><tr><td>end</td></tr></table>"
58
+ expected = HtmlHelper.create_expected html_ex
59
+
60
+ File.open('test/seeds/dowith_multiple_tables2.html'){|f|
61
+ base_html = f.read }
62
+
63
+ ex = DoWithExample.new 'Bank2'
64
+ ex.add_function_call 'open account', 0, '123'
65
+ ex.add_check 'that_amount_for_account_is', 4, 0, '123'
66
+ ex.add_accept 'deposit in account', 0, '100', '123'
67
+ ex.add_reject 'withdraw from account', 0, '200', '123'
68
+
69
+ result = HtmlHelper.test_x_html_table(5, ex, base_html)
70
+ assert_equal expected, result
71
+ end
72
+
73
+ def test_do_with_writer_with_error
74
+ base_html = "<table border=\"1\">
75
+ <tr><td>do with</td><td>Bank3</td></tr>
76
+ <tr><td>open account</td><td>123</td></tr></table>"
77
+ expected = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\"><html><body><table border=\"1\"><tr><td>do with</td><td>Bank3</td></tr><tr><td style=\"background-color: #F0E68C\">RuntimeError: test</td><td>123</td></tr></table></body></html>"
78
+
79
+ ex = DoWithExample.new 'Bank3'
80
+ ex.add_function_call 'open account', 0, '123'
81
+
82
+ result = HtmlHelper.test_x_html_table 1, ex, base_html,
83
+ {:no_exception_stack => true}
84
+
85
+ assert_equal expected, result
86
+ end
87
+ end