greenpepper-ruby 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/greenpepperize +71 -0
- data/bin/greenpepperrails +33 -0
- data/bin/greenpepperruby +15 -0
- data/data/greenpepper.rake +37 -0
- data/data/helper.rb +32 -0
- data/data/tags +6 -0
- data/lib/greenpepper/argumentparser.rb +161 -0
- data/lib/greenpepper/common/loadpath.rb +7 -0
- data/lib/greenpepper/context/htmlcontext.rb +26 -0
- data/lib/greenpepper/converter.rb +347 -0
- data/lib/greenpepper/core.rb +152 -0
- data/lib/greenpepper/example/collectionexample.rb +305 -0
- data/lib/greenpepper/example/dowithexample.rb +192 -0
- data/lib/greenpepper/example/exampleheader.rb +41 -0
- data/lib/greenpepper/example/examplewithfixture.rb +73 -0
- data/lib/greenpepper/example/executionresults.rb +160 -0
- data/lib/greenpepper/example/fieldaccessor.rb +36 -0
- data/lib/greenpepper/example/freetextexample.rb +51 -0
- data/lib/greenpepper/example/importexample.rb +39 -0
- data/lib/greenpepper/example/nameresolver.rb +69 -0
- data/lib/greenpepper/example/ruleforexample.rb +117 -0
- data/lib/greenpepper/example/setupexample.rb +79 -0
- data/lib/greenpepper/example/silentexample.rb +14 -0
- data/lib/greenpepper/example/unknownexample.rb +17 -0
- data/lib/greenpepper/exception/greenpepperexception.rb +57 -0
- data/lib/greenpepper/executionunit.rb +39 -0
- data/lib/greenpepper/factory/collectionexamplefactory.rb +59 -0
- data/lib/greenpepper/factory/dowithexamplefactory.rb +71 -0
- data/lib/greenpepper/factory/examplefactory.rb +14 -0
- data/lib/greenpepper/factory/freetextexamplefactory.rb +29 -0
- data/lib/greenpepper/factory/htmlexamplefactory.rb +49 -0
- data/lib/greenpepper/factory/importexamplefactory.rb +27 -0
- data/lib/greenpepper/factory/ruleforexamplefactory.rb +46 -0
- data/lib/greenpepper/factory/setupexamplefactory.rb +31 -0
- data/lib/greenpepper/factory/silentexamplefactory.rb +21 -0
- data/lib/greenpepper/factory/unknownexamplefactory.rb +16 -0
- data/lib/greenpepper/freetext.rb +164 -0
- data/lib/greenpepper/grammar/array.treetop +51 -0
- data/lib/greenpepper/grammar/arrayparser.rb +14 -0
- data/lib/greenpepper/greenpepperconfig.rb +19 -0
- data/lib/greenpepper/greenpeppertask.rb +60 -0
- data/lib/greenpepper/logger.rb +45 -0
- data/lib/greenpepper/parser/freetextparser.rb +96 -0
- data/lib/greenpepper/parser/htmlparser.rb +70 -0
- data/lib/greenpepper/parser/scenario.rb +25 -0
- data/lib/greenpepper/parser/table.rb +37 -0
- data/lib/greenpepper/parser/wikiparser.rb +26 -0
- data/lib/greenpepper/pass/freetextpass.rb +24 -0
- data/lib/greenpepper/pass/greenpepperpass.rb +92 -0
- data/lib/greenpepper/pass/tablepass.rb +38 -0
- data/lib/greenpepper/railsargumentparser.rb +46 -0
- data/lib/greenpepper/redpeppertask.rb +89 -0
- data/lib/greenpepper/repository/atlassianrepository.rb +100 -0
- data/lib/greenpepper/writer/consolewriter.rb +21 -0
- data/lib/greenpepper/writer/freetextresult.rb +233 -0
- data/lib/greenpepper/writer/freetextwriter.rb +44 -0
- data/lib/greenpepper/writer/html.rb +14 -0
- data/lib/greenpepper/writer/htmldocwriter.rb +82 -0
- data/lib/greenpepper/writer/htmlresult.rb +192 -0
- data/lib/greenpepper/writer/htmlwriter.rb +112 -0
- data/lib/greenpepper/writer/output.rb +26 -0
- data/lib/greenpepper/writer/result.rb +35 -0
- data/lib/greenpepper/writer/xmlwriter.rb +32 -0
- data/test/coreseedstest.rb +39 -0
- data/test/greenpepper/argumentparsertest.rb +162 -0
- data/test/greenpepper/common/loadpathtest.rb +24 -0
- data/test/greenpepper/common/stattest.rb +186 -0
- data/test/greenpepper/convertertest.rb +371 -0
- data/test/greenpepper/coretest.rb +159 -0
- data/test/greenpepper/example/collectionexampletest.rb +484 -0
- data/test/greenpepper/example/dowithexampletest.rb +148 -0
- data/test/greenpepper/example/exampletest.rb +28 -0
- data/test/greenpepper/example/freetextexampletest.rb +151 -0
- data/test/greenpepper/example/importexampletest.rb +79 -0
- data/test/greenpepper/example/nameresolvertest.rb +56 -0
- data/test/greenpepper/example/ruleforexampletest.rb +225 -0
- data/test/greenpepper/example/setupexampletest.rb +140 -0
- data/test/greenpepper/example/silentexampletest.rb +17 -0
- data/test/greenpepper/example/unknownexampletest.rb +17 -0
- data/test/greenpepper/factory/collectionexamplefactorytest.rb +51 -0
- data/test/greenpepper/factory/dowithexamplefactorytest.rb +48 -0
- data/test/greenpepper/factory/examplefactorytest.rb +88 -0
- data/test/greenpepper/factory/freetextexamplefactorytest.rb +54 -0
- data/test/greenpepper/factory/importexamplefactorytest.rb +40 -0
- data/test/greenpepper/factory/ruleforexamplefactorytest.rb +55 -0
- data/test/greenpepper/factory/setupexamplefactorytest.rb +29 -0
- data/test/greenpepper/factory/silentexamplefactorytest.rb +38 -0
- data/test/greenpepper/freetexttest.rb +222 -0
- data/test/greenpepper/grammar/arrayparsertest.rb +45 -0
- data/test/greenpepper/loggertest.rb +26 -0
- data/test/greenpepper/parser/freetextparsertest.rb +124 -0
- data/test/greenpepper/parser/htmlparsertest.rb +77 -0
- data/test/greenpepper/parser/wikiparsertest.rb +21 -0
- data/test/greenpepper/pass/freetextpasstest.rb +54 -0
- data/test/greenpepper/pass/greenpepperpasstest.rb +47 -0
- data/test/greenpepper/pass/tablepasstest.rb +23 -0
- data/test/greenpepper/repository/atlassionrepositorytest.rb +85 -0
- data/test/greenpepper/writer/freetextwritertest.rb +301 -0
- data/test/greenpepper/writer/htmlcollectionwritertest.rb +145 -0
- data/test/greenpepper/writer/htmldowithwritertest.rb +87 -0
- data/test/greenpepper/writer/htmlruleforwritertest.rb +147 -0
- data/test/greenpepper/writer/htmlsetupwritertest.rb +107 -0
- data/test/greenpepper/writer/htmlstatresulttest.rb +118 -0
- data/test/greenpepper/writer/htmlwriterpositiontest.rb +53 -0
- data/test/greenpepper/writer/writertest.rb +33 -0
- data/test/greenpepper/writer/xmlwritertest.rb +34 -0
- data/test/integration/collectionexampleintegrationtest.rb +64 -0
- data/test/integration/errorhandlingintegrationtest.rb +68 -0
- data/test/integration/freetextexampleintegrationtest.rb +75 -0
- data/test/integration/greenpepperexecutableintegrationtest.rb +22 -0
- data/test/integration/importexampleintegrationtest.rb +41 -0
- data/test/integration/interpretationordertest.rb +48 -0
- data/test/integration/ruleforexampleintegrationtest.rb +102 -0
- data/test/integration/securityintegrationtest.rb +30 -0
- data/test/integration/setupexampleintegrationtest.rb +31 -0
- data/test/integration/silentexampleintegrationtest.rb +29 -0
- data/test/task/greenpeppertasktest.rb +96 -0
- data/test/task/redpeppertasktest.rb +120 -0
- data/vendor/accents.rb +85 -0
- metadata +234 -0
@@ -0,0 +1,44 @@
|
|
1
|
+
=begin
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
3
|
+
date: October 3, 2009
|
4
|
+
=end
|
5
|
+
|
6
|
+
module GreenPepper
|
7
|
+
|
8
|
+
require 'rubygems'
|
9
|
+
require 'libxml'
|
10
|
+
|
11
|
+
require 'greenpepper/writer/freetextresult'
|
12
|
+
require 'greenpepper/parser/freetextparser'
|
13
|
+
require 'greenpepper/parser/scenario'
|
14
|
+
|
15
|
+
class FreeTextWriter
|
16
|
+
include KeywordFormat
|
17
|
+
|
18
|
+
def support? execution_unit
|
19
|
+
execution_unit.result.is_a? FreeTextExecutionResults
|
20
|
+
end
|
21
|
+
# Write the results
|
22
|
+
# Returns a string of the document
|
23
|
+
def write(html_doc, execution_units, write_options ={})
|
24
|
+
|
25
|
+
html_results = []
|
26
|
+
execution_units.each{ |unit|
|
27
|
+
html_results << example_to_html(unit.example, unit.result)
|
28
|
+
}
|
29
|
+
|
30
|
+
# Use the parser to replace the old scenario with the new one
|
31
|
+
parser = FreeTextParser.new
|
32
|
+
parser.replace_scenarios html_doc, html_results
|
33
|
+
end
|
34
|
+
|
35
|
+
# Visible for testing
|
36
|
+
def example_to_html(ex, results)
|
37
|
+
res = newline(results[0].write(nil))
|
38
|
+
results[1..-1].each_with_index{ |result, index|
|
39
|
+
res += indent(result.write(ex.actions[index]))
|
40
|
+
}
|
41
|
+
res
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
=begin
|
2
|
+
author: Pascal Ouellet (pas.ouellet@gmail.com)
|
3
|
+
date: March 17, 2009
|
4
|
+
=end
|
5
|
+
module GreenPepper
|
6
|
+
|
7
|
+
module Html
|
8
|
+
# HTML Hex colors
|
9
|
+
RED = "#F08080"
|
10
|
+
YELLOW = "#F0E68C"
|
11
|
+
GREEN = "#98FB98"
|
12
|
+
GREY ="#D3D3D3"
|
13
|
+
end
|
14
|
+
end #module GreenPepper
|
@@ -0,0 +1,82 @@
|
|
1
|
+
=begin
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
3
|
+
date: March 13, 2009
|
4
|
+
=end
|
5
|
+
module GreenPepper
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'libxml'
|
9
|
+
require 'greenpepper/writer/htmlruleforwriter'
|
10
|
+
require 'greenpepper/writer/htmlimportwriter'
|
11
|
+
require 'greenpepper/writer/htmlsetupwriter'
|
12
|
+
require 'greenpepper/writer/htmldowithwriter'
|
13
|
+
require 'greenpepper/writer/htmlcollectionwriter'
|
14
|
+
require 'greenpepper/writer/nullwriter'
|
15
|
+
|
16
|
+
class HtmlDocumentWriter
|
17
|
+
attr_reader :modified_doc
|
18
|
+
def initialize(base_html)
|
19
|
+
@html_doc = (LibXML::XML::HTMLParser.string base_html,
|
20
|
+
:encoding => LibXML::XML::Encoding::UTF_8,
|
21
|
+
:options => LibXML::XML::HTMLParser::Options::NOBLANKS).parse
|
22
|
+
@table_index = 0
|
23
|
+
@modified_doc = ""
|
24
|
+
@tables = @html_doc.find '//table'
|
25
|
+
end
|
26
|
+
|
27
|
+
def write(results)
|
28
|
+
table = @tables[@table_index]
|
29
|
+
w = create_writer results, table
|
30
|
+
@modified_doc = (w.write results)
|
31
|
+
@modified_doc = @modified_doc.doc.root.to_s unless @modified_doc == nil
|
32
|
+
|
33
|
+
@table_index += w.table_count
|
34
|
+
@modified_doc
|
35
|
+
end
|
36
|
+
|
37
|
+
def write_results(all_results)
|
38
|
+
stats_doc = ""
|
39
|
+
|
40
|
+
# We define another XML tree, since <table> is already the node of
|
41
|
+
# html_doc. We can't add another table to the actual one
|
42
|
+
stats = LibXML::XML::Parser.string(
|
43
|
+
"<table><tr><td>Successes: #{all_results.successes}</td>" +
|
44
|
+
"<td>Failures: #{all_results.failures}</td>" +
|
45
|
+
"<td>Errors: #{all_results.errors}</td></tr></table>").
|
46
|
+
parse.root.copy(true)
|
47
|
+
|
48
|
+
|
49
|
+
node = @html_doc.find_first 'body'
|
50
|
+
node = @html_doc.root if node == nil
|
51
|
+
if node.first?
|
52
|
+
node.first.prev = stats
|
53
|
+
else
|
54
|
+
node << stats
|
55
|
+
end
|
56
|
+
@modified_doc = @html_doc.to_s
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
def create_writer(results, table)
|
61
|
+
# TODO: Why is doesn't this create an exception? None of those class exist
|
62
|
+
# anymore.
|
63
|
+
if results.class == RuleForExampleExecutionStats
|
64
|
+
row_modifier = HtmlRuleForWriter.create_row_modifier
|
65
|
+
w = HtmlRuleForWriter.new table, row_modifier
|
66
|
+
elsif results.class == ImportExampleExecutionStats
|
67
|
+
row_modifier = HtmlImportWriter.create_row_modifier
|
68
|
+
w = HtmlImportWriter.new table, row_modifier
|
69
|
+
elsif results.class == SetupExampleExecutionStats
|
70
|
+
row_modifier = HtmlSetupWriter.create_row_modifier
|
71
|
+
w = HtmlSetupWriter.new table, row_modifier
|
72
|
+
elsif results.class == DoWithExampleExecutionStats
|
73
|
+
w = HtmlDoWithWriter.new table
|
74
|
+
elsif results.class == CollectionExampleExecutionStats
|
75
|
+
row_modifier = HtmlCollectionWriter.create_row_modifier
|
76
|
+
w = HtmlCollectionWriter.new table, row_modifier
|
77
|
+
else
|
78
|
+
w = NullWriter.new table
|
79
|
+
end
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end #module GreenPepper
|
@@ -0,0 +1,192 @@
|
|
1
|
+
=begin
|
2
|
+
author: Martin Provencher (martin.provencher@usherbrooke.ca)
|
3
|
+
date: April 25, 2009
|
4
|
+
=end
|
5
|
+
module GreenPepper
|
6
|
+
|
7
|
+
require 'greenpepper/writer/html'
|
8
|
+
require 'greenpepper/exception/greenpepperexception'
|
9
|
+
require 'greenpepper/writer/result'
|
10
|
+
|
11
|
+
class HtmlExampleResult < ExampleResult
|
12
|
+
attr_accessor :row, :column
|
13
|
+
|
14
|
+
def write(cell, options = {})
|
15
|
+
unless cell.instance_of? LibXML::XML::Node
|
16
|
+
raise GreenPepperArgumentError.new
|
17
|
+
end
|
18
|
+
cell
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
class NoExampleResult < HtmlExampleResult
|
23
|
+
end
|
24
|
+
|
25
|
+
class WriteTextExampleResult < HtmlExampleResult
|
26
|
+
def initialize(result, silent=false)
|
27
|
+
super(silent)
|
28
|
+
@result = result
|
29
|
+
end
|
30
|
+
|
31
|
+
def write(cell, options = {})
|
32
|
+
cell.content = "" if cell.content == " "
|
33
|
+
cell = super(cell, options)
|
34
|
+
cell << @result
|
35
|
+
cell
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
class SuccessExampleResult < HtmlExampleResult
|
40
|
+
def success?
|
41
|
+
true
|
42
|
+
end
|
43
|
+
|
44
|
+
def write(cell, options = {})
|
45
|
+
cell = super(cell, options)
|
46
|
+
cell["style"] = "background-color: #{Html::GREEN}"
|
47
|
+
cell
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class FailureExampleResult < HtmlExampleResult
|
52
|
+
def failure?
|
53
|
+
true
|
54
|
+
end
|
55
|
+
|
56
|
+
def write(cell, options = {})
|
57
|
+
cell = super(cell, options)
|
58
|
+
cell["style"] = "background-color: #{Html::RED}"
|
59
|
+
cell
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
class ErrorExampleResult < HtmlExampleResult
|
64
|
+
def error?
|
65
|
+
true
|
66
|
+
end
|
67
|
+
|
68
|
+
def write(cell, options = {})
|
69
|
+
cell = super(cell, options)
|
70
|
+
cell["style"] = "background-color: #{Html::YELLOW}"
|
71
|
+
cell
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
class IgnoredExampleResult < HtmlExampleResult
|
76
|
+
def ignored?
|
77
|
+
true
|
78
|
+
end
|
79
|
+
|
80
|
+
def write(cell, options = {})
|
81
|
+
cell["style"] = "background-color: #{Html::GREY}"
|
82
|
+
cell
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
class WriteIgnoredExampleResult < WriteTextExampleResult
|
87
|
+
def ignored?
|
88
|
+
true
|
89
|
+
end
|
90
|
+
|
91
|
+
def write(cell, options = {})
|
92
|
+
cell = super(cell, options)
|
93
|
+
cell["style"] = "background-color: #{Html::GREY}"
|
94
|
+
cell
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
class WriteSucessExampleResult < SuccessExampleResult
|
99
|
+
def write(cell, options = {})
|
100
|
+
cell = super(cell, options)
|
101
|
+
cell << "Success"
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
class WriteFailExampleResult < FailureExampleResult
|
106
|
+
def write(cell, options = {})
|
107
|
+
cell = super(cell, options)
|
108
|
+
cell << "Fail"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
112
|
+
class WriteExpectedExampleResult < FailureExampleResult
|
113
|
+
attr_reader :expected, :received
|
114
|
+
def initialize(expected, received, silent=false)
|
115
|
+
super(silent)
|
116
|
+
@expected = expected
|
117
|
+
@received = received
|
118
|
+
end
|
119
|
+
|
120
|
+
def write(cell, options = {})
|
121
|
+
cell = super(cell, options)
|
122
|
+
|
123
|
+
cell.children.each{|current_node|current_node.remove!}
|
124
|
+
cell << LibXML::XML::Node.new_text("")
|
125
|
+
|
126
|
+
expected_node = LibXML::XML::Node.new "b", "Expected: "
|
127
|
+
cell << expected_node
|
128
|
+
cell << @expected
|
129
|
+
|
130
|
+
received_node = LibXML::XML::Node.new "b", " Received: "
|
131
|
+
cell << received_node
|
132
|
+
cell << @received
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
class WriteExceptionExampleResult < ErrorExampleResult
|
137
|
+
attr :exception
|
138
|
+
|
139
|
+
def initialize(exception, silent=false)
|
140
|
+
super(silent)
|
141
|
+
@exception = exception
|
142
|
+
end
|
143
|
+
|
144
|
+
def write(cell, options = {})
|
145
|
+
cell = super(cell, options)
|
146
|
+
|
147
|
+
cell.content = "#{@exception.class}: #{@exception.to_s}"
|
148
|
+
if @exception.backtrace && !options[:no_exception_stack]
|
149
|
+
cell << LibXML::XML::Node.new('hr')
|
150
|
+
@exception.backtrace.each { |step|
|
151
|
+
cell << step
|
152
|
+
cell << LibXML::XML::Node.new('br')
|
153
|
+
}
|
154
|
+
end
|
155
|
+
cell
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
class WriteMissingExampleResult < FailureExampleResult
|
160
|
+
def write(cell, options = {})
|
161
|
+
super(cell, options)
|
162
|
+
|
163
|
+
missing = LibXML::XML::Node.new('i')
|
164
|
+
missing << "Missing "
|
165
|
+
|
166
|
+
content = cell.content
|
167
|
+
|
168
|
+
cell.content = ""
|
169
|
+
cell << missing
|
170
|
+
cell << content
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
class WriteSurplusExampleResult < FailureExampleResult
|
175
|
+
attr_reader :value
|
176
|
+
def initialize(value, silent=false)
|
177
|
+
super(silent)
|
178
|
+
@value = value
|
179
|
+
end
|
180
|
+
|
181
|
+
def write(cell, options = {})
|
182
|
+
super(cell, options)
|
183
|
+
surplus = LibXML::XML::Node.new('i')
|
184
|
+
surplus << "Surplus "
|
185
|
+
|
186
|
+
cell.content = ""
|
187
|
+
cell << surplus
|
188
|
+
cell << @value
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
end #module GreenPepper
|
@@ -0,0 +1,112 @@
|
|
1
|
+
=begin
|
2
|
+
author: Martin Provencher (martin.provencher@usherbrooke.ca)
|
3
|
+
date: April 25, 2009
|
4
|
+
=end
|
5
|
+
module GreenPepper
|
6
|
+
|
7
|
+
require 'rubygems'
|
8
|
+
require 'libxml'
|
9
|
+
require 'greenpepper/example/executionresults'
|
10
|
+
require 'greenpepper/context/htmlcontext'
|
11
|
+
require 'greenpepper/parser/table'
|
12
|
+
|
13
|
+
class HtmlWriter
|
14
|
+
attr_reader :execution_units
|
15
|
+
|
16
|
+
def initialize
|
17
|
+
end
|
18
|
+
|
19
|
+
def output
|
20
|
+
@html_doc.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
def support? execution_unit
|
24
|
+
execution_unit.result.is_a? HtmlTableExecutionResults
|
25
|
+
end
|
26
|
+
|
27
|
+
def load_document(base_html, execution_units, write_options = {})
|
28
|
+
@html_doc = (LibXML::XML::HTMLParser.string base_html,
|
29
|
+
:encoding => LibXML::XML::Encoding::UTF_8,
|
30
|
+
:options => LibXML::XML::HTMLParser::Options::NOBLANKS).parse
|
31
|
+
@execution_units = execution_units
|
32
|
+
@tables = @html_doc.find('//table').to_a
|
33
|
+
@write_options = write_options
|
34
|
+
|
35
|
+
nb_results_table = 0
|
36
|
+
@execution_units.each{ |unit|
|
37
|
+
nb_results_table += unit.context.nb_table
|
38
|
+
}
|
39
|
+
|
40
|
+
if @tables.size != nb_results_table
|
41
|
+
raise "Execution results doesn't have the same number of html " +
|
42
|
+
"table than the file"
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
def write(base_html, execution_units, write_options = {})
|
47
|
+
|
48
|
+
load_document(base_html, execution_units, write_options)
|
49
|
+
|
50
|
+
@execution_units.each{ |unit|
|
51
|
+
all_example_table = []
|
52
|
+
|
53
|
+
@tables[unit.context.first_table_index, unit.context.nb_table].each{
|
54
|
+
|table|
|
55
|
+
all_example_table << table
|
56
|
+
}
|
57
|
+
write_results_to_html all_example_table, unit.result
|
58
|
+
}
|
59
|
+
|
60
|
+
@html_doc.to_s
|
61
|
+
end
|
62
|
+
|
63
|
+
private
|
64
|
+
def write_results_to_html(tables, result)
|
65
|
+
rows = []
|
66
|
+
tables.each{ |table|
|
67
|
+
rows += table.find('.//tr').to_a
|
68
|
+
}
|
69
|
+
|
70
|
+
result.each{ |result|
|
71
|
+
missing_row = result.row - (rows.size-1)
|
72
|
+
if missing_row > 0
|
73
|
+
unless rows.size > 0
|
74
|
+
raise GreenPepperMalformedTableError.new(
|
75
|
+
"Error : Example without row")
|
76
|
+
end
|
77
|
+
copy_row = rows[-1].copy true
|
78
|
+
|
79
|
+
missing_row.times {
|
80
|
+
new_row = LibXML::XML::Node.new rows[-1].name
|
81
|
+
copy_row.each_element{ |cell|
|
82
|
+
new_row << LibXML::XML::Node.new(cell.name)
|
83
|
+
}
|
84
|
+
|
85
|
+
rows[-1].parent << new_row
|
86
|
+
rows << new_row
|
87
|
+
}
|
88
|
+
end
|
89
|
+
|
90
|
+
cells = rows[result.row].find('.//td|.//th').to_a
|
91
|
+
|
92
|
+
missing_cell = result.column - (cells.size-1)
|
93
|
+
if missing_cell > 0
|
94
|
+
unless cells.size > 0
|
95
|
+
raise GreenPepperMalformedTableError.new(
|
96
|
+
"Error : Example without cell")
|
97
|
+
end
|
98
|
+
copy_cell = cells[-1].copy true
|
99
|
+
|
100
|
+
missing_cell.times{
|
101
|
+
new_cell = LibXML::XML::Node.new cells[-1].name
|
102
|
+
|
103
|
+
cells[-1].parent << new_cell
|
104
|
+
cells << new_cell
|
105
|
+
}
|
106
|
+
end
|
107
|
+
|
108
|
+
result.write cells[result.column], @write_options
|
109
|
+
}
|
110
|
+
end
|
111
|
+
end
|
112
|
+
end #module GreenPepper
|
@@ -0,0 +1,26 @@
|
|
1
|
+
=begin
|
2
|
+
author: Martin Provencher(martin.provencher@usherbrooke.ca)
|
3
|
+
date: Mars 4, 2009
|
4
|
+
=end
|
5
|
+
module GreenPepper
|
6
|
+
|
7
|
+
class FileOutput
|
8
|
+
def initialize(output_document)
|
9
|
+
@output_document = output_document
|
10
|
+
end
|
11
|
+
|
12
|
+
def print_output(result)
|
13
|
+
dir = File.dirname @output_document
|
14
|
+
Dir.mkdir(dir) unless File.exists? dir
|
15
|
+
File.open(@output_document, "w") { |f| f.write result }
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class ConsoleOutput
|
20
|
+
def print_output(result)
|
21
|
+
puts result
|
22
|
+
result
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end #module GreenPepper
|