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.
- 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,192 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: March 9, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
require 'greenpepper/example/examplewithfixture'
|
|
7
|
+
require 'greenpepper/example/nameresolver'
|
|
8
|
+
require 'greenpepper/converter'
|
|
9
|
+
require 'greenpepper/example/executionresults'
|
|
10
|
+
|
|
11
|
+
module GreenPepper
|
|
12
|
+
|
|
13
|
+
class DoWithExample < ExampleWithFixture
|
|
14
|
+
attr_reader :lines
|
|
15
|
+
|
|
16
|
+
def initialize(fixture_name, line_factory = DoWithLineFactory.new)
|
|
17
|
+
super fixture_name
|
|
18
|
+
@lines = []
|
|
19
|
+
@line_factory = line_factory
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
def do_execute(results, fixture_class)
|
|
23
|
+
fixture = instantiate_fixture fixture_class
|
|
24
|
+
|
|
25
|
+
if fixture.is_a? Class
|
|
26
|
+
e = GreenPepperSecurityError.new(
|
|
27
|
+
"Can't instantiate a subclass of Class.")
|
|
28
|
+
results.add FIXTURE_NAME_ROW, FIXTURE_NAME_COLUMN, WriteExceptionExampleResult.new(e)
|
|
29
|
+
return results
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
@lines.each_with_index{ |line, line_index|
|
|
33
|
+
begin
|
|
34
|
+
res = line.execute(fixture)
|
|
35
|
+
rescue => error
|
|
36
|
+
res = WriteExceptionExampleResult.new(error)
|
|
37
|
+
end
|
|
38
|
+
unless res.nil?
|
|
39
|
+
results.add line_index + FIRST_DATA_ROW, line.result_column, res
|
|
40
|
+
end
|
|
41
|
+
}
|
|
42
|
+
results
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def add_function_call(function, result_column, *params)
|
|
46
|
+
@lines << @line_factory.create_function_call(function,
|
|
47
|
+
result_column, params)
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
def add_check(function, result_column, expected_val, *params)
|
|
51
|
+
@lines << @line_factory.create_check(function,
|
|
52
|
+
result_column, expected_val, params)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def add_accept(function, result_column, *params)
|
|
56
|
+
@lines << @line_factory.create_accept(function, result_column, params)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def add_reject(function, result_column, *params)
|
|
60
|
+
@lines << @line_factory.create_reject(function, result_column, params)
|
|
61
|
+
end
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
class DoWithLineFactory
|
|
65
|
+
def create_function_call(function, result_column, params)
|
|
66
|
+
DoWithLineNoKeyword.new(function, result_column, params)
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
def create_check(function, result_column, expected_val, params)
|
|
70
|
+
DoWithLineCheck.new(function, result_column, expected_val, params)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def create_accept(function, result_column, params)
|
|
74
|
+
DoWithLineAccept.new(function, result_column, params)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def create_reject(function, result_column, params)
|
|
78
|
+
DoWithLineReject.new(function, result_column, params)
|
|
79
|
+
end
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
class DoWithLine
|
|
83
|
+
attr_reader :function, :parameters, :result_column
|
|
84
|
+
|
|
85
|
+
def initialize(func, column, params)
|
|
86
|
+
@parameters = params
|
|
87
|
+
@function = NameResolver.format_column_name func
|
|
88
|
+
@result_column = column
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
def function?
|
|
92
|
+
false
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
def check?
|
|
96
|
+
false
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def accept?
|
|
100
|
+
false
|
|
101
|
+
end
|
|
102
|
+
|
|
103
|
+
def reject?
|
|
104
|
+
false
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
protected
|
|
108
|
+
def call_func(fixture)
|
|
109
|
+
if !fixture.respond_to? @function
|
|
110
|
+
ErrorHelper.raise_greenpepper_missing_method @function, fixture
|
|
111
|
+
end
|
|
112
|
+
@parameters = convert_values(@parameters, fixture)
|
|
113
|
+
fixture.send @function, *@parameters
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
private
|
|
117
|
+
def convert_values(string_values, fixture)
|
|
118
|
+
TypeConverter.instance.auto_convert_string(
|
|
119
|
+
fixture, @function, string_values)
|
|
120
|
+
end
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
class DoWithLineNoKeyword < DoWithLine
|
|
124
|
+
def execute(fixture)
|
|
125
|
+
call_func fixture
|
|
126
|
+
nil #Do not add a result
|
|
127
|
+
end
|
|
128
|
+
|
|
129
|
+
def function?
|
|
130
|
+
true
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
class DoWithLineCheck < DoWithLine
|
|
135
|
+
def initialize(func, column, expected_value, params)
|
|
136
|
+
super func, column, params
|
|
137
|
+
@expected_value = expected_value
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
def execute(fixture)
|
|
141
|
+
res = call_func fixture
|
|
142
|
+
#For Check functions, we need to have a way in the fixture to
|
|
143
|
+
#convert the string in the fixture. The function called by the
|
|
144
|
+
#converter will be parse_check_#{@function}
|
|
145
|
+
expected = TypeConverter.instance.auto_convert_string(
|
|
146
|
+
fixture, 'check_' + @function, @expected_value)
|
|
147
|
+
return SuccessExampleResult.new if res == expected
|
|
148
|
+
|
|
149
|
+
formated_result = TypeConverter.instance.auto_convert_object(
|
|
150
|
+
fixture,
|
|
151
|
+
'check_' + @function,
|
|
152
|
+
@expected_value,
|
|
153
|
+
res)
|
|
154
|
+
|
|
155
|
+
WriteExpectedExampleResult.new formated_result, @expected_value
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
def check?
|
|
159
|
+
true
|
|
160
|
+
end
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
class DoWithLineAccept < DoWithLine
|
|
164
|
+
def execute(fixture)
|
|
165
|
+
res = call_func fixture
|
|
166
|
+
return SuccessExampleResult.new if res == true
|
|
167
|
+
FailureExampleResult.new
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
def accept?
|
|
171
|
+
true
|
|
172
|
+
end
|
|
173
|
+
end
|
|
174
|
+
|
|
175
|
+
class DoWithLineReject < DoWithLine
|
|
176
|
+
def execute(fixture)
|
|
177
|
+
begin
|
|
178
|
+
res = call_func fixture
|
|
179
|
+
rescue Exception => e
|
|
180
|
+
res = false
|
|
181
|
+
end
|
|
182
|
+
|
|
183
|
+
return SuccessExampleResult.new if res == false
|
|
184
|
+
FailureExampleResult.new
|
|
185
|
+
end
|
|
186
|
+
|
|
187
|
+
def reject?
|
|
188
|
+
true
|
|
189
|
+
end
|
|
190
|
+
end
|
|
191
|
+
|
|
192
|
+
end
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: S�bastien Boisclair (Sebastien.Boisclair2@usherbrooke.ca)
|
|
3
|
+
date: September 15, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
module GreenPepper
|
|
7
|
+
class ExampleBaseHeader
|
|
8
|
+
attr_accessor :name
|
|
9
|
+
|
|
10
|
+
def initialize(name="", name_resolver = NameResolver)
|
|
11
|
+
@name = name
|
|
12
|
+
@name_resolver= name_resolver
|
|
13
|
+
@formated_name = name_resolver.format_column_name name
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def to_s
|
|
17
|
+
@name
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def verify_accessor(fixture_class)
|
|
21
|
+
return NoExampleResult.new(true) if @name == ''
|
|
22
|
+
if fixture_class.method_defined? "#{@formated_name}"
|
|
23
|
+
return NoExampleResult.new(true)
|
|
24
|
+
else
|
|
25
|
+
error = GreenPepperMissingHeaderError.new(
|
|
26
|
+
"Cannot find method \"#{@formated_name}\".")
|
|
27
|
+
return WriteExceptionExampleResult.new(error)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
class ExampleInputHeader < ExampleBaseHeader
|
|
33
|
+
def execute(value, fixture, value_format = nil)
|
|
34
|
+
if @formated_name.strip != ''
|
|
35
|
+
return NoExampleResult.new if !fixture.respond_to? @formated_name
|
|
36
|
+
@name_resolver.set_instance_field fixture, @formated_name, value
|
|
37
|
+
end
|
|
38
|
+
nil
|
|
39
|
+
end
|
|
40
|
+
end
|
|
41
|
+
end
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: March 19, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
require 'greenpepper/example/executionresults'
|
|
7
|
+
require 'greenpepper/example/nameresolver'
|
|
8
|
+
|
|
9
|
+
module GreenPepper
|
|
10
|
+
class ExampleWithFixture
|
|
11
|
+
attr_accessor :fixture_name, :fixture_arguments, :headers
|
|
12
|
+
|
|
13
|
+
EXAMPLE_NAME_ROW = 0
|
|
14
|
+
EXAMPLE_NAME_COLUMN = 0
|
|
15
|
+
FIXTURE_NAME_ROW = 0
|
|
16
|
+
FIXTURE_NAME_COLUMN = 1
|
|
17
|
+
HEADER_ROW = 1
|
|
18
|
+
FIRST_DATA_ROW = 1
|
|
19
|
+
|
|
20
|
+
def initialize(fixture_name)
|
|
21
|
+
if fixture_name == nil
|
|
22
|
+
raise GreenPepperMalformedTableError.new(
|
|
23
|
+
'No fixture name provided')
|
|
24
|
+
end
|
|
25
|
+
@fixture_name = fixture_name
|
|
26
|
+
@fixture_arguments = []
|
|
27
|
+
@headers = []
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def add_fixture_argument(value)
|
|
31
|
+
@fixture_arguments <<
|
|
32
|
+
TypeConverter.instance.convert_string(value)
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def execute
|
|
36
|
+
fixture_class = NameResolver.solve_fixture_name(@fixture_name)
|
|
37
|
+
results = HtmlTableExecutionResults.new
|
|
38
|
+
|
|
39
|
+
if fixture_class.nil?
|
|
40
|
+
results.add FIXTURE_NAME_ROW, FIXTURE_NAME_COLUMN,
|
|
41
|
+
ErrorExampleResult.new
|
|
42
|
+
return results
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
begin
|
|
46
|
+
check_headers fixture_class, results, HEADER_ROW
|
|
47
|
+
do_execute results, fixture_class
|
|
48
|
+
rescue GreenPepperError => e
|
|
49
|
+
raise e
|
|
50
|
+
rescue Exception => e
|
|
51
|
+
results.add FIXTURE_NAME_ROW, FIXTURE_NAME_COLUMN,
|
|
52
|
+
WriteExceptionExampleResult.new(e)
|
|
53
|
+
end
|
|
54
|
+
results
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
protected
|
|
58
|
+
def check_headers(fixture, results, row_number)
|
|
59
|
+
@headers.each_with_index do |header,header_index|
|
|
60
|
+
result = header.verify_accessor(fixture)
|
|
61
|
+
results.add(row_number, header_index, result)
|
|
62
|
+
end
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def instantiate_fixture(fixture_class)
|
|
66
|
+
if fixture_class.instance_method(:initialize).arity > 0
|
|
67
|
+
fixture_class.new *@fixture_arguments
|
|
68
|
+
else
|
|
69
|
+
fixture_class.new
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
end
|
|
@@ -0,0 +1,160 @@
|
|
|
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/htmlresult'
|
|
8
|
+
|
|
9
|
+
class ExecutionResults
|
|
10
|
+
attr_accessor :successes, :failures, :errors, :ignored
|
|
11
|
+
|
|
12
|
+
def initialize
|
|
13
|
+
@successes = 0
|
|
14
|
+
@failures = 0
|
|
15
|
+
@errors = 0
|
|
16
|
+
@ignored = 0
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def add_success
|
|
20
|
+
@successes += 1
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def add_failure
|
|
24
|
+
@failures += 1
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def add_error
|
|
28
|
+
@errors += 1
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def add_ignore
|
|
32
|
+
@ignored += 1
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.get_all_results(results_array)
|
|
36
|
+
results = HtmlTableExecutionResults.new
|
|
37
|
+
|
|
38
|
+
results_array.each{ |result|
|
|
39
|
+
results.successes += result.successes
|
|
40
|
+
results.failures += result.failures
|
|
41
|
+
results.errors += result.errors
|
|
42
|
+
results.ignored += result.ignored
|
|
43
|
+
}
|
|
44
|
+
results
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
protected
|
|
48
|
+
def update_stats(result)
|
|
49
|
+
unless result.silent
|
|
50
|
+
@successes += 1 if result.success?
|
|
51
|
+
@failures += 1 if result.failure?
|
|
52
|
+
@errors += 1 if result.error?
|
|
53
|
+
@ignored += 1 if result.ignored?
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
end
|
|
57
|
+
|
|
58
|
+
class FreeTextExecutionResults < ExecutionResults
|
|
59
|
+
attr_reader :results
|
|
60
|
+
def initialize
|
|
61
|
+
super
|
|
62
|
+
@results = []
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
def add_result(result)
|
|
66
|
+
@results << result
|
|
67
|
+
result.update_stats(self)
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def [](value)
|
|
71
|
+
results[value]
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
def to_s
|
|
75
|
+
@results.join("\n")
|
|
76
|
+
end
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class HtmlTableExecutionResults < ExecutionResults
|
|
80
|
+
attr_accessor :context
|
|
81
|
+
attr_reader :size
|
|
82
|
+
|
|
83
|
+
def initialize
|
|
84
|
+
super
|
|
85
|
+
@results = Array.new
|
|
86
|
+
@size = 0
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
def add(row, column, result)
|
|
90
|
+
(row - (@results.size - 1)).times{ @results << []}
|
|
91
|
+
(column - (@results[row].size - 1)).times{ @results[row] << nil}
|
|
92
|
+
|
|
93
|
+
result.row = row
|
|
94
|
+
result.column = column
|
|
95
|
+
@results[row][column] = result
|
|
96
|
+
@size += 1
|
|
97
|
+
|
|
98
|
+
update_stats result
|
|
99
|
+
result
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def delete_at(row, column)
|
|
103
|
+
result = @results[row][column] unless check_index(row, column) == false
|
|
104
|
+
return nil if result == nil
|
|
105
|
+
|
|
106
|
+
unless result.silent
|
|
107
|
+
@successes -= 1 if result.success?
|
|
108
|
+
@failures -= 1 if result.failure?
|
|
109
|
+
@errors -= 1 if result.error?
|
|
110
|
+
@ignored -= 1 if result.ignored?
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
@results[row][column] = nil
|
|
114
|
+
@size -= 1
|
|
115
|
+
result
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
def each
|
|
119
|
+
@results.each{ |row|
|
|
120
|
+
row.each{ |result|
|
|
121
|
+
yield result unless result == nil
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
def each_with_index_and_nil
|
|
127
|
+
@results.each_with_index{ |row, row_idx|
|
|
128
|
+
row.each_with_index{ |cell, cell_idx|
|
|
129
|
+
yield cell, row_idx, cell_idx
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
end
|
|
133
|
+
|
|
134
|
+
def at(row, column)
|
|
135
|
+
return @results[row][column] unless check_index(row, column) == false
|
|
136
|
+
nil
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def to_s
|
|
140
|
+
s = ""
|
|
141
|
+
@results.each{|row|
|
|
142
|
+
s << "|"
|
|
143
|
+
row.each{|result|
|
|
144
|
+
s << sprintf("%25s |", result.class.to_s)
|
|
145
|
+
}
|
|
146
|
+
s << "\n"
|
|
147
|
+
}
|
|
148
|
+
s[-1] = ""
|
|
149
|
+
s
|
|
150
|
+
end
|
|
151
|
+
|
|
152
|
+
private
|
|
153
|
+
def check_index(row, column)
|
|
154
|
+
return false if row >= @results.size or column >= @results[row].size
|
|
155
|
+
true
|
|
156
|
+
end
|
|
157
|
+
|
|
158
|
+
end
|
|
159
|
+
|
|
160
|
+
end #module GreenPepper
|