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,36 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Murat Edouard
|
|
3
|
+
date: September 5, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
module GreenPepper
|
|
7
|
+
|
|
8
|
+
require 'greenpepper/exception/greenpepperexception'
|
|
9
|
+
|
|
10
|
+
class InstanceFieldAccessor
|
|
11
|
+
def access_instance_field(fixture, field_name, value=nil)
|
|
12
|
+
method = fixture.public_methods.find{
|
|
13
|
+
|method| method.to_s == field_name
|
|
14
|
+
}
|
|
15
|
+
if method.nil?
|
|
16
|
+
raise ErrorHelper.raise_greenpepper_missing_method(
|
|
17
|
+
field_name, fixture)
|
|
18
|
+
else
|
|
19
|
+
call_accessor fixture.method(field_name), value
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
class ReaderFieldAccessor < InstanceFieldAccessor
|
|
25
|
+
def call_accessor(method, value)
|
|
26
|
+
return method.call
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
class WriterFieldAccessor < InstanceFieldAccessor
|
|
31
|
+
def call_accessor(method, value)
|
|
32
|
+
method.call value
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: September 13, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
module GreenPepper
|
|
7
|
+
|
|
8
|
+
require 'greenpepper/example/executionresults'
|
|
9
|
+
require 'greenpepper/example/nameresolver'
|
|
10
|
+
require 'greenpepper/example/examplewithfixture'
|
|
11
|
+
require 'greenpepper/writer/freetextresult'
|
|
12
|
+
|
|
13
|
+
class FreeTextExample
|
|
14
|
+
attr_reader :actions, :fixture_name
|
|
15
|
+
|
|
16
|
+
def initialize(fixture_name)
|
|
17
|
+
@fixture_name = fixture_name
|
|
18
|
+
@actions = []
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def add_action(action)
|
|
22
|
+
@actions << action
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def execute
|
|
26
|
+
results = FreeTextExecutionResults.new
|
|
27
|
+
fixture_class = NameResolver.solve_fixture_name(@fixture_name)
|
|
28
|
+
|
|
29
|
+
if fixture_class.nil?
|
|
30
|
+
results.add_result HeaderError.new(@fixture_name,
|
|
31
|
+
GreenPepperMissingHeaderError.new)
|
|
32
|
+
return results
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
results.add_result HeaderSuccess.new(@fixture_name)
|
|
36
|
+
|
|
37
|
+
fixture = fixture_class.new
|
|
38
|
+
|
|
39
|
+
@actions.each_with_index{ |action, index|
|
|
40
|
+
begin
|
|
41
|
+
keyword = fixture.greenpepper_map_action action
|
|
42
|
+
results.add_result keyword.get_result
|
|
43
|
+
rescue Exception => e
|
|
44
|
+
results.add_result ActionError.new(e)
|
|
45
|
+
end
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
results
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
authors: Pascal Ouellet (pas.ouellet@gmail.com)
|
|
3
|
+
date: March 6, 2009
|
|
4
|
+
=end
|
|
5
|
+
module GreenPepper
|
|
6
|
+
|
|
7
|
+
require 'greenpepper/example/executionresults'
|
|
8
|
+
require 'greenpepper/writer/htmlresult'
|
|
9
|
+
|
|
10
|
+
class ImportExample
|
|
11
|
+
attr_reader :imports
|
|
12
|
+
|
|
13
|
+
FIRST_DATA_ROW = 1
|
|
14
|
+
DATA_COLUMN = 0
|
|
15
|
+
|
|
16
|
+
def initialize
|
|
17
|
+
@imports = Array.new
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def add(*imports)
|
|
21
|
+
@imports.concat imports
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def execute
|
|
25
|
+
results = HtmlTableExecutionResults.new
|
|
26
|
+
@imports.each_with_index do |import, index|
|
|
27
|
+
begin
|
|
28
|
+
require import
|
|
29
|
+
results.add index + FIRST_DATA_ROW, DATA_COLUMN, NoExampleResult.new
|
|
30
|
+
rescue Exception => e
|
|
31
|
+
e = e.exception "Failed to import #{import}: #{e.exception}"
|
|
32
|
+
results.add index + FIRST_DATA_ROW, DATA_COLUMN, WriteExceptionExampleResult.new(e, true)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
results
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end #module GreenPepper
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Sebastien Boisclair (SebBoisclair@gmail.com)
|
|
3
|
+
date: March 8, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
require 'greenpepper/example/fieldaccessor'
|
|
7
|
+
require 'accents'
|
|
8
|
+
|
|
9
|
+
module GreenPepper
|
|
10
|
+
|
|
11
|
+
module NameResolver
|
|
12
|
+
def NameResolver.solve_fixture_name(fixture_name)
|
|
13
|
+
# Remove accents using third party library
|
|
14
|
+
# Ex. é => e
|
|
15
|
+
fixture_name = fixture_name.removeaccents
|
|
16
|
+
|
|
17
|
+
# Ignore illegal caracters
|
|
18
|
+
fixture_name = fixture_name.gsub /[^a-zA-Z0-9_\s]/, ""
|
|
19
|
+
regex = create_regex(fixture_name)
|
|
20
|
+
fixture_classes = []
|
|
21
|
+
|
|
22
|
+
Module.constants.each{|constant|
|
|
23
|
+
if(regex.match(constant))
|
|
24
|
+
fixture_classes.push(constant)
|
|
25
|
+
end
|
|
26
|
+
}
|
|
27
|
+
return nil if(fixture_classes.length == 0)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
fixture_name_class = fixture_classes.find{|fixture_string|
|
|
31
|
+
/.*(f|F)ixture$/ === fixture_string
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
if fixture_name_class == nil
|
|
35
|
+
fixture_name_class = fixture_classes[0]
|
|
36
|
+
end
|
|
37
|
+
Object.const_get fixture_name_class
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def NameResolver.format_column_name name
|
|
41
|
+
string = name.strip.downcase.split(' ').join('_')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
def NameResolver.set_instance_field fixture, field_name, value
|
|
45
|
+
writer = WriterFieldAccessor.new
|
|
46
|
+
writer.access_instance_field fixture, field_name + "=", value
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
def NameResolver.get_instance_field fixture, field_name
|
|
50
|
+
reader = ReaderFieldAccessor.new
|
|
51
|
+
reader.access_instance_field fixture, field_name
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
private
|
|
55
|
+
|
|
56
|
+
def NameResolver.create_regex(fixture_name)
|
|
57
|
+
fixture_regex = '^'
|
|
58
|
+
fixture_name = fixture_name.gsub( / |_/, "_?")
|
|
59
|
+
if lower_word = fixture_name.scan( /[^A-Z]*/)
|
|
60
|
+
fixture_regex += lower_word[0]
|
|
61
|
+
end
|
|
62
|
+
fixture_name.scan(/[A-Z][^A-Z]*/).each{|word|fixture_regex += "_?" + word}
|
|
63
|
+
|
|
64
|
+
fixture_regex +='_?(fixture)?\s*$'
|
|
65
|
+
Regexp.new fixture_regex, 'i'
|
|
66
|
+
end
|
|
67
|
+
end # Module NameResolver
|
|
68
|
+
|
|
69
|
+
end # Module GreenPepper
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: March 9, 2009
|
|
4
|
+
=end
|
|
5
|
+
module GreenPepper
|
|
6
|
+
|
|
7
|
+
require 'greenpepper/example/executionresults'
|
|
8
|
+
require 'greenpepper/example/nameresolver'
|
|
9
|
+
require 'greenpepper/example/examplewithfixture'
|
|
10
|
+
require 'greenpepper/example/exampleheader'
|
|
11
|
+
require 'greenpepper/converter'
|
|
12
|
+
require 'greenpepper/exception/greenpepperexception'
|
|
13
|
+
|
|
14
|
+
class RuleForExample < ExampleWithFixture
|
|
15
|
+
|
|
16
|
+
attr_reader :values
|
|
17
|
+
|
|
18
|
+
FIRST_DATA_ROW = 2
|
|
19
|
+
|
|
20
|
+
def initialize(fixture_name, name_resolver = NameResolver)
|
|
21
|
+
super fixture_name
|
|
22
|
+
@values = Array.new
|
|
23
|
+
@name_resolver = name_resolver
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def add_header(name)
|
|
27
|
+
output_header_regex = /\s*(.*)\?\s*\Z/
|
|
28
|
+
if output_header_regex === name
|
|
29
|
+
add_output_header($1)
|
|
30
|
+
else
|
|
31
|
+
add_input_header(name)
|
|
32
|
+
end
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def add_input_header(name)
|
|
36
|
+
header = ExampleInputHeader.new(name, @name_resolver)
|
|
37
|
+
@headers.push header
|
|
38
|
+
header
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def add_output_header(name)
|
|
42
|
+
header = RuleForOutputHeader.new(name, @name_resolver)
|
|
43
|
+
@headers.push header
|
|
44
|
+
header
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def add_row(values_array)
|
|
48
|
+
@values.push values_array
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def do_execute(results, fixture_class)
|
|
52
|
+
@values.each_index{ |row_index|
|
|
53
|
+
# We instantiate a fixture every row to reset the object
|
|
54
|
+
fixture = instantiate_fixture fixture_class
|
|
55
|
+
|
|
56
|
+
headers.each_index{ |column_index|
|
|
57
|
+
header = headers[column_index]
|
|
58
|
+
string_value = @values[row_index][column_index]
|
|
59
|
+
value = TypeConverter.instance.auto_convert_string(
|
|
60
|
+
fixture, header.name, string_value)
|
|
61
|
+
|
|
62
|
+
#The output header needs to keep the value of an empty string
|
|
63
|
+
#instead of nil because it needs to differentiate the nil value
|
|
64
|
+
#and an ignored cell.
|
|
65
|
+
if header.class == RuleForOutputHeader &&
|
|
66
|
+
(string_value == '')
|
|
67
|
+
value = ''
|
|
68
|
+
end
|
|
69
|
+
result = header.execute( value, fixture, string_value)
|
|
70
|
+
results.add row_index + FIRST_DATA_ROW, column_index,
|
|
71
|
+
result unless result == nil
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
results
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
class RuleForOutputHeader < ExampleBaseHeader
|
|
80
|
+
|
|
81
|
+
def execute(value, fixture, value_format)
|
|
82
|
+
return NoExampleResult.new if !fixture.respond_to? @formated_name
|
|
83
|
+
|
|
84
|
+
begin
|
|
85
|
+
result = get_result fixture
|
|
86
|
+
rescue Exception => e
|
|
87
|
+
if value.is_a? Exception
|
|
88
|
+
return SuccessExampleResult.new
|
|
89
|
+
end
|
|
90
|
+
return WriteExceptionExampleResult.new(e)
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
return SuccessExampleResult.new if value == result
|
|
94
|
+
|
|
95
|
+
formated_result = TypeConverter.instance.auto_convert_object(
|
|
96
|
+
fixture,
|
|
97
|
+
@name,
|
|
98
|
+
value_format,
|
|
99
|
+
result)
|
|
100
|
+
|
|
101
|
+
formated_value = TypeConverter.instance.auto_convert_object(
|
|
102
|
+
fixture,
|
|
103
|
+
@name,
|
|
104
|
+
value_format,
|
|
105
|
+
value)
|
|
106
|
+
|
|
107
|
+
return WriteIgnoredExampleResult.new(formated_result) if value == ''
|
|
108
|
+
return WriteExpectedExampleResult.new(formated_value, formated_result)
|
|
109
|
+
end
|
|
110
|
+
|
|
111
|
+
private
|
|
112
|
+
def get_result(fixture)
|
|
113
|
+
fixture.send @formated_name
|
|
114
|
+
end
|
|
115
|
+
end
|
|
116
|
+
|
|
117
|
+
end #module GreenPepper
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Martin Provencher (martin.provencher@usherbrooke.ca)
|
|
3
|
+
date: March 23, 2009
|
|
4
|
+
=end
|
|
5
|
+
module GreenPepper
|
|
6
|
+
|
|
7
|
+
require 'greenpepper/example/nameresolver'
|
|
8
|
+
require 'greenpepper/example/examplewithfixture'
|
|
9
|
+
require 'greenpepper/example/exampleheader'
|
|
10
|
+
require 'greenpepper/converter'
|
|
11
|
+
require 'greenpepper/exception/greenpepperexception'
|
|
12
|
+
|
|
13
|
+
class SetupExample < ExampleWithFixture
|
|
14
|
+
|
|
15
|
+
attr_reader :values
|
|
16
|
+
FIXTURE_NAME_ROW = 0
|
|
17
|
+
FIXTURE_NAME_COL = 1
|
|
18
|
+
FIRST_DATA_ROW = 2
|
|
19
|
+
HEADER_ROW = 1
|
|
20
|
+
|
|
21
|
+
def initialize(fixture_name, name_resolver = NameResolver)
|
|
22
|
+
super fixture_name
|
|
23
|
+
@values = Array.new
|
|
24
|
+
@name_resolver= name_resolver
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
def add_header(name)
|
|
28
|
+
header = ExampleInputHeader.new(@name_resolver.format_column_name(name),
|
|
29
|
+
@name_resolver)
|
|
30
|
+
@headers.push header
|
|
31
|
+
header
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def add_row(values_array)
|
|
35
|
+
@values.push values_array
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def do_execute(results, fixture_class)
|
|
39
|
+
fixture = instantiate_fixture fixture_class
|
|
40
|
+
|
|
41
|
+
if !(fixture.respond_to? "enter_row")
|
|
42
|
+
ex = ErrorHelper.create_greenpepper_missing_method 'enter_row',
|
|
43
|
+
fixture_class
|
|
44
|
+
results.add FIXTURE_NAME_ROW, FIXTURE_NAME_COL,
|
|
45
|
+
WriteExceptionExampleResult.new(ex)
|
|
46
|
+
return results
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
@values.each_index{ |row_index|
|
|
50
|
+
headers.each_index{ |column_index|
|
|
51
|
+
header = headers[column_index]
|
|
52
|
+
string_value = @values[row_index][column_index]
|
|
53
|
+
value = TypeConverter.instance.auto_convert_string(
|
|
54
|
+
fixture, header.name, string_value)
|
|
55
|
+
|
|
56
|
+
begin
|
|
57
|
+
header.execute value, fixture
|
|
58
|
+
rescue => error
|
|
59
|
+
result = WriteExceptionExampleResult.new(error)
|
|
60
|
+
results.add row_index + FIRST_DATA_ROW, column_index, result
|
|
61
|
+
end
|
|
62
|
+
}
|
|
63
|
+
begin
|
|
64
|
+
result = fixture.enter_row
|
|
65
|
+
if result
|
|
66
|
+
result = WriteSucessExampleResult.new true
|
|
67
|
+
else
|
|
68
|
+
result = WriteFailExampleResult.new
|
|
69
|
+
end
|
|
70
|
+
rescue => error
|
|
71
|
+
result = WriteExceptionExampleResult.new(error)
|
|
72
|
+
end
|
|
73
|
+
results.add row_index + FIRST_DATA_ROW, headers.size, result
|
|
74
|
+
}
|
|
75
|
+
results
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
79
|
+
end #module GreenPepper
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: September 27, 2009
|
|
4
|
+
=end
|
|
5
|
+
module GreenPepper
|
|
6
|
+
|
|
7
|
+
class SilentExample
|
|
8
|
+
def execute
|
|
9
|
+
results = HtmlTableExecutionResults.new
|
|
10
|
+
results.add(0, 0, IgnoredExampleResult.new)
|
|
11
|
+
results
|
|
12
|
+
end
|
|
13
|
+
end
|
|
14
|
+
end
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Simon Mathieu (simon.math@gmail.com)
|
|
3
|
+
date: March 30, 2009
|
|
4
|
+
=end
|
|
5
|
+
|
|
6
|
+
require 'greenpepper/example/executionresults'
|
|
7
|
+
|
|
8
|
+
module GreenPepper
|
|
9
|
+
|
|
10
|
+
class UnknownExample
|
|
11
|
+
def execute
|
|
12
|
+
results = HtmlTableExecutionResults.new
|
|
13
|
+
results.add 0, 0, ErrorExampleResult.new
|
|
14
|
+
results
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
end
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
=begin
|
|
2
|
+
author: Pascal Ouellet (pas.ouellet@gmail.com)
|
|
3
|
+
date: March 17, 2009
|
|
4
|
+
=end
|
|
5
|
+
module GreenPepper
|
|
6
|
+
|
|
7
|
+
class GreenPepperError < StandardError
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
class GreenPepperArgumentError < GreenPepperError
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
class GreenPepperMalformedTableError < GreenPepperError
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
class GreenPepperLibXmlError < GreenPepperError
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
class GreenPepperTypeError < GreenPepperError
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class GreenPepperSecurityError < GreenPepperError
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
class GreenPepperMissingMethodError < GreenPepperError
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
class GreenPepperMissingHeaderError < GreenPepperError
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
class GreenPepperElementError < GreenPepperError
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
class GreenPepperFileNotFoundError < GreenPepperError
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
class GreenPepperRepositoryError < GreenPepperError
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
class GreenPepperUnknownActionError < GreenPepperError
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
class GreenPepperNoScenarioInTag < GreenPepperError
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
module ErrorHelper
|
|
47
|
+
def ErrorHelper.raise_greenpepper_missing_method(func, fixture)
|
|
48
|
+
raise create_greenpepper_missing_method(func, fixture)
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
def ErrorHelper.create_greenpepper_missing_method(func, fixture)
|
|
52
|
+
GreenPepperMissingMethodError.new(
|
|
53
|
+
"Cannot find method #{func} on fixture #{fixture.class}.")
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
end #module GreenPepper
|