rr 1.0.4 → 1.0.5.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +15 -0
- data/CHANGES.md +376 -0
- data/Gemfile +7 -10
- data/README.md +822 -0
- data/Rakefile +24 -78
- data/VERSION +1 -0
- data/lib/rr.rb +3 -0
- data/lib/rr/adapters/minitest.rb +6 -0
- data/lib/rr/adapters/rr_methods.rb +6 -10
- data/lib/rr/adapters/rspec.rb +3 -0
- data/lib/rr/adapters/rspec2.rb +30 -0
- data/lib/rr/adapters/test_unit.rb +2 -0
- data/lib/rr/double.rb +3 -2
- data/lib/rr/double_definitions/child_double_definition_create.rb +3 -2
- data/lib/rr/double_definitions/double_definition.rb +15 -13
- data/lib/rr/double_definitions/double_definition_create.rb +9 -5
- data/lib/rr/double_definitions/double_injections/any_instance_of.rb +3 -2
- data/lib/rr/double_definitions/strategies/strategy.rb +5 -4
- data/lib/rr/double_definitions/strategies/strategy_methods.rb +6 -8
- data/lib/rr/double_definitions/strategies/verification/mock.rb +3 -3
- data/lib/rr/double_matches.rb +2 -1
- data/lib/rr/expectations/argument_equality_expectation.rb +2 -2
- data/lib/rr/expectations/times_called_expectation.rb +2 -2
- data/lib/rr/injections/double_injection.rb +12 -11
- data/lib/rr/injections/injection.rb +2 -2
- data/lib/rr/injections/method_missing_injection.rb +21 -7
- data/lib/rr/injections/singleton_method_added_injection.rb +3 -1
- data/lib/rr/method_dispatches/base_method_dispatch.rb +1 -1
- data/lib/rr/method_dispatches/method_dispatch.rb +2 -1
- data/lib/rr/method_dispatches/method_missing_dispatch.rb +2 -1
- data/lib/rr/proc_from_block.rb +8 -4
- data/lib/rr/space.rb +3 -2
- data/lib/rr/times_called_matchers/times_called_matcher.rb +2 -2
- data/lib/rr/version.rb +5 -0
- data/lib/rr/wildcard_matchers/boolean.rb +2 -2
- data/spec/runner.rb +41 -0
- metadata +45 -133
- data/.gitignore +0 -10
- data/.runrc +0 -3
- data/.rvmrc +0 -2
- data/CHANGES +0 -266
- data/Gemfile.lock +0 -31
- data/README.rdoc +0 -392
- data/benchmarks/rr_benchmark.rb +0 -32
- data/benchmarks/rspec_benchmark.rb +0 -14
- data/doc/0.6.0.release.markdown +0 -81
- data/doc/todo.txt +0 -0
- data/introducting_rr.txt +0 -206
- data/rr.gemspec +0 -37
- data/spec/api/any_instance_of/all_instances_of_spec.rb +0 -12
- data/spec/api/any_instance_of/any_instance_of_spec.rb +0 -47
- data/spec/api/any_instance_of/instance_of_spec.rb +0 -12
- data/spec/api/dont_allow/dont_allow_after_stub_spec.rb +0 -14
- data/spec/api/mock/mock_spec.rb +0 -193
- data/spec/api/proxy/proxy_spec.rb +0 -86
- data/spec/api/spy/spy_spec.rb +0 -49
- data/spec/api/strong/strong_spec.rb +0 -87
- data/spec/api/stub/stub_spec.rb +0 -152
- data/spec/core_spec_suite.rb +0 -19
- data/spec/environment_fixture_setup.rb +0 -8
- data/spec/minitest_spec_suite.rb +0 -21
- data/spec/proc_from_block_spec.rb +0 -14
- data/spec/rr/adapters/rr_methods_argument_matcher_spec.rb +0 -67
- data/spec/rr/adapters/rr_methods_creator_spec.rb +0 -137
- data/spec/rr/adapters/rr_methods_space_spec.rb +0 -98
- data/spec/rr/adapters/rr_methods_spec_helper.rb +0 -11
- data/spec/rr/adapters/rr_methods_times_matcher_spec.rb +0 -13
- data/spec/rr/double_definitions/child_double_definition_creator_spec.rb +0 -112
- data/spec/rr/double_definitions/double_definition_create_blank_slate_spec.rb +0 -91
- data/spec/rr/double_definitions/double_definition_create_spec.rb +0 -443
- data/spec/rr/double_injection/double_injection_spec.rb +0 -546
- data/spec/rr/double_injection/double_injection_verify_spec.rb +0 -29
- data/spec/rr/errors/rr_error_spec.rb +0 -67
- data/spec/rr/expectations/any_argument_expectation_spec.rb +0 -47
- data/spec/rr/expectations/anything_argument_equality_expectation_spec.rb +0 -14
- data/spec/rr/expectations/argument_equality_expectation_spec.rb +0 -135
- data/spec/rr/expectations/boolean_argument_equality_expectation_spec.rb +0 -34
- data/spec/rr/expectations/hash_including_argument_equality_expectation_spec.rb +0 -82
- data/spec/rr/expectations/hash_including_spec.rb +0 -17
- data/spec/rr/expectations/satisfy_argument_equality_expectation_spec.rb +0 -59
- data/spec/rr/expectations/satisfy_spec.rb +0 -14
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_any_times_spec.rb +0 -22
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_least_spec.rb +0 -37
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_at_most_spec.rb +0 -43
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_helper.rb +0 -15
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_integer_spec.rb +0 -58
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_proc_spec.rb +0 -35
- data/spec/rr/expectations/times_called_expectation/times_called_expectation_range_spec.rb +0 -39
- data/spec/rr/minitest/minitest_integration_test.rb +0 -59
- data/spec/rr/minitest/test_helper.rb +0 -7
- data/spec/rr/rspec/invocation_matcher_spec.rb +0 -279
- data/spec/rr/rspec/rspec_adapter_spec.rb +0 -63
- data/spec/rr/rspec/rspec_backtrace_tweaking_spec.rb +0 -31
- data/spec/rr/rspec/rspec_backtrace_tweaking_spec_fixture.rb +0 -11
- data/spec/rr/rspec/rspec_usage_spec.rb +0 -86
- data/spec/rr/space/hash_with_object_id_key_spec.rb +0 -88
- data/spec/rr/space/space_spec.rb +0 -596
- data/spec/rr/test_unit/test_helper.rb +0 -7
- data/spec/rr/test_unit/test_unit_backtrace_test.rb +0 -36
- data/spec/rr/test_unit/test_unit_integration_test.rb +0 -59
- data/spec/rr/times_called_matchers/any_times_matcher_spec.rb +0 -47
- data/spec/rr/times_called_matchers/at_least_matcher_spec.rb +0 -55
- data/spec/rr/times_called_matchers/at_most_matcher_spec.rb +0 -70
- data/spec/rr/times_called_matchers/integer_matcher_spec.rb +0 -70
- data/spec/rr/times_called_matchers/proc_matcher_spec.rb +0 -55
- data/spec/rr/times_called_matchers/range_matcher_spec.rb +0 -76
- data/spec/rr/times_called_matchers/times_called_matcher_spec.rb +0 -118
- data/spec/rr/wildcard_matchers/anything_spec.rb +0 -24
- data/spec/rr/wildcard_matchers/boolean_spec.rb +0 -36
- data/spec/rr/wildcard_matchers/duck_type_spec.rb +0 -52
- data/spec/rr/wildcard_matchers/is_a_spec.rb +0 -32
- data/spec/rr/wildcard_matchers/numeric_spec.rb +0 -32
- data/spec/rr/wildcard_matchers/range_spec.rb +0 -35
- data/spec/rr/wildcard_matchers/regexp_spec.rb +0 -43
- data/spec/rr_spec.rb +0 -28
- data/spec/rspec_spec_suite.rb +0 -17
- data/spec/spec.opts +0 -10
- data/spec/spec_helper.rb +0 -41
- data/spec/spec_suite.rb +0 -54
- data/spec/spy_verification_spec.rb +0 -129
- data/spec/test_unit_spec_suite.rb +0 -21
@@ -6,9 +6,10 @@ module RR
|
|
6
6
|
include RR::Adapters::RRMethods
|
7
7
|
|
8
8
|
def call(subject_class, stubbed_methods=nil, &block)
|
9
|
-
|
9
|
+
strategy_lambda = lambda do |double_definition_create|
|
10
10
|
::RR::DoubleDefinitions::Strategies::DoubleInjection::AnyInstanceOf.new(double_definition_create)
|
11
|
-
end
|
11
|
+
end
|
12
|
+
::RR::DoubleDefinitions::DoubleDefinitionCreate.set_default_double_injection_strategy(strategy_lambda) do
|
12
13
|
if stubbed_methods
|
13
14
|
subject_class.class_eval do
|
14
15
|
stubbed_methods.each do |name, value|
|
@@ -3,21 +3,22 @@ module RR
|
|
3
3
|
module Strategies
|
4
4
|
class Strategy
|
5
5
|
attr_reader :double_definition_create, :definition, :method_name, :args, :handler
|
6
|
+
|
6
7
|
include Space::Reader
|
7
8
|
|
8
9
|
def initialize(double_definition_create)
|
9
10
|
@double_definition_create = double_definition_create
|
10
11
|
end
|
11
|
-
|
12
|
+
|
12
13
|
def call(definition, method_name, args, handler)
|
13
14
|
@definition, @method_name, @args, @handler = definition, method_name, args, handler
|
14
15
|
do_call
|
15
16
|
end
|
16
17
|
|
17
18
|
def verify_subject(subject)
|
18
|
-
end
|
19
|
+
end
|
19
20
|
|
20
|
-
|
21
|
+
protected
|
21
22
|
def do_call
|
22
23
|
raise NotImplementedError
|
23
24
|
end
|
@@ -40,4 +41,4 @@ module RR
|
|
40
41
|
end
|
41
42
|
end
|
42
43
|
end
|
43
|
-
end
|
44
|
+
end
|
@@ -4,10 +4,10 @@ module RR
|
|
4
4
|
module StrategyMethods
|
5
5
|
extend(Module.new do
|
6
6
|
def lately_bound_alias_method(target_method_name, source_method_name)
|
7
|
-
module_eval(
|
8
|
-
|
9
|
-
|
10
|
-
|
7
|
+
module_eval(<<-METHOD, __FILE__, __LINE__+1)
|
8
|
+
def #{target_method_name}(*args, &block)
|
9
|
+
#{source_method_name}(*args, &block)
|
10
|
+
end
|
11
11
|
METHOD
|
12
12
|
end
|
13
13
|
end)
|
@@ -39,14 +39,12 @@ module RR
|
|
39
39
|
def any_instance_of!(method_name=nil, &definition_eval_block)
|
40
40
|
any_instance_of(Object.new, method_name, &definition_eval_block)
|
41
41
|
end
|
42
|
-
lately_bound_alias_method :all_instances_of, :any_instance_of
|
43
|
-
lately_bound_alias_method :all_instances_of!, :any_instance_of!
|
44
42
|
|
45
43
|
def instance_of!(method_name=nil, &definition_eval_block)
|
46
44
|
instance_of(Object.new, method_name, &definition_eval_block)
|
47
45
|
end
|
48
|
-
lately_bound_alias_method :
|
49
|
-
lately_bound_alias_method :
|
46
|
+
lately_bound_alias_method :all_instances_of, :instance_of
|
47
|
+
lately_bound_alias_method :all_instances_of!, :instance_of!
|
50
48
|
end
|
51
49
|
end
|
52
50
|
end
|
@@ -14,7 +14,7 @@ module RR
|
|
14
14
|
#
|
15
15
|
# When passed the subject, a DoubleDefinitionCreateBlankSlate is returned. Passing
|
16
16
|
# a method with arguments to the proxy will set up expectations that
|
17
|
-
#
|
17
|
+
# a call to the subject's method with the arguments will happen,
|
18
18
|
# and return the prescribed value.
|
19
19
|
# mock(subject).method_name_1 {return_value_1}
|
20
20
|
# mock(subject).method_name_2(arg1, arg2) {return_value_2}
|
@@ -29,7 +29,7 @@ module RR
|
|
29
29
|
# mock(subject) do
|
30
30
|
# method_name_1 {return_value_1}
|
31
31
|
# method_name_2(arg_1, arg_2) {return_value_2}
|
32
|
-
# end
|
32
|
+
# end
|
33
33
|
class Mock < VerificationStrategy
|
34
34
|
protected
|
35
35
|
def do_call
|
@@ -39,4 +39,4 @@ module RR
|
|
39
39
|
end
|
40
40
|
end
|
41
41
|
end
|
42
|
-
end
|
42
|
+
end
|
data/lib/rr/double_matches.rb
CHANGED
@@ -5,6 +5,7 @@ module RR
|
|
5
5
|
:exact_non_terminal_doubles_to_attempt,
|
6
6
|
:wildcard_terminal_doubles_to_attempt,
|
7
7
|
:wildcard_non_terminal_doubles_to_attempt
|
8
|
+
|
8
9
|
def initialize(doubles) #:nodoc:
|
9
10
|
@doubles = doubles
|
10
11
|
@matching_doubles = []
|
@@ -39,4 +40,4 @@ module RR
|
|
39
40
|
self
|
40
41
|
end
|
41
42
|
end
|
42
|
-
end
|
43
|
+
end
|
@@ -32,10 +32,10 @@ module RR
|
|
32
32
|
expected_arguments == other.expected_arguments
|
33
33
|
end
|
34
34
|
|
35
|
-
|
35
|
+
protected
|
36
36
|
def equality_match(arg1, arg2)
|
37
37
|
arg1.respond_to?(:'__rr__original_==') ? arg1.__send__(:'__rr__original_==', arg2) : arg1 == arg2
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
41
|
-
end
|
41
|
+
end
|
@@ -86,6 +86,7 @@ module RR
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
end)
|
89
|
+
|
89
90
|
include ClassInstanceMethodDefined
|
90
91
|
|
91
92
|
attr_reader :subject_class, :method_name, :doubles
|
@@ -126,12 +127,12 @@ module RR
|
|
126
127
|
BoundObjects[id] = subject_class
|
127
128
|
|
128
129
|
subject_class.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
129
|
-
|
130
|
-
|
131
|
-
|
130
|
+
def #{method_name}(*args, &block)
|
131
|
+
::RR::Injections::DoubleInjection::BoundObjects[#{id}].class_eval do
|
132
|
+
remove_method(:#{method_name})
|
133
|
+
end
|
134
|
+
method_missing(:#{method_name}, *args, &block)
|
132
135
|
end
|
133
|
-
method_missing(:#{method_name}, *args, &block)
|
134
|
-
end
|
135
136
|
RUBY
|
136
137
|
self
|
137
138
|
end
|
@@ -141,11 +142,11 @@ module RR
|
|
141
142
|
BoundObjects[id] = subject_class
|
142
143
|
|
143
144
|
subject_class.class_eval(<<-RUBY, __FILE__, __LINE__ + 1)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
145
|
+
def #{method_name}(*args, &block)
|
146
|
+
arguments = MethodArguments.new(args, block)
|
147
|
+
obj = ::RR::Injections::DoubleInjection::BoundObjects[#{id}]
|
148
|
+
RR::Injections::DoubleInjection.dispatch_method(self, obj, :#{method_name}, arguments.arguments, arguments.block)
|
149
|
+
end
|
149
150
|
RUBY
|
150
151
|
self
|
151
152
|
end
|
@@ -203,7 +204,7 @@ module RR
|
|
203
204
|
@dispatch_method_delegates_to_dispatch_original_method = nil
|
204
205
|
end
|
205
206
|
|
206
|
-
|
207
|
+
protected
|
207
208
|
def deferred_bind_method
|
208
209
|
unless subject_has_method_defined?(original_method_alias_name)
|
209
210
|
bind_method_with_alias
|
@@ -22,7 +22,7 @@ module RR
|
|
22
22
|
subject_class.instance_method(original_method_alias_name)
|
23
23
|
end
|
24
24
|
|
25
|
-
|
25
|
+
protected
|
26
26
|
def subject_respond_to_method?(subject, method_name)
|
27
27
|
subject_has_method_defined?(method_name) ||
|
28
28
|
class_instance_method_defined(subject_class, :respond_to?) &&
|
@@ -30,4 +30,4 @@ module RR
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
33
|
-
end
|
33
|
+
end
|
@@ -12,9 +12,13 @@ module RR
|
|
12
12
|
instances.include?(subject)
|
13
13
|
end
|
14
14
|
end)
|
15
|
+
|
16
|
+
BoundObjects = {}
|
17
|
+
|
15
18
|
include ClassInstanceMethodDefined
|
16
19
|
|
17
20
|
attr_reader :subject_class
|
21
|
+
|
18
22
|
def initialize(subject_class)
|
19
23
|
@subject_class = subject_class
|
20
24
|
@placeholder_method_defined = false
|
@@ -30,6 +34,18 @@ module RR
|
|
30
34
|
end
|
31
35
|
end
|
32
36
|
end
|
37
|
+
# Ruby 1.9 will raise a NoMethodError when #method_missing is defined
|
38
|
+
# on the subject, but #to_ary isn't. #method_missing will always be
|
39
|
+
# defined thanks to BasicObject, but #to_ary may not, so in this case
|
40
|
+
# we need to supply our own. Furthermore, Ruby has special logic to
|
41
|
+
# handle the return value of #to_ary; if it is nil, then it tells Ruby
|
42
|
+
# to ignore #to_ary altogether and use a default rule to arrayify the
|
43
|
+
# object in question.
|
44
|
+
unless class_instance_method_defined(subject_class, :to_ary)
|
45
|
+
subject_class.class_eval do
|
46
|
+
def to_ary; nil; end
|
47
|
+
end
|
48
|
+
end
|
33
49
|
subject_class.__send__(:alias_method, original_method_alias_name, :method_missing)
|
34
50
|
bind_method
|
35
51
|
end
|
@@ -50,18 +66,16 @@ module RR
|
|
50
66
|
end
|
51
67
|
end
|
52
68
|
|
53
|
-
|
54
|
-
BoundObjects = {}
|
55
|
-
|
69
|
+
protected
|
56
70
|
def bind_method
|
57
71
|
id = BoundObjects.size
|
58
72
|
BoundObjects[id] = subject_class
|
59
73
|
|
60
74
|
subject_class.class_eval((<<-METHOD), __FILE__, __LINE__ + 1)
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
75
|
+
def method_missing(method_name, *args, &block)
|
76
|
+
obj = ::RR::Injections::MethodMissingInjection::BoundObjects[#{id}]
|
77
|
+
MethodDispatches::MethodMissingDispatch.new(self, obj, method_name, args, block).call
|
78
|
+
end
|
65
79
|
METHOD
|
66
80
|
end
|
67
81
|
|
@@ -16,9 +16,11 @@ module RR
|
|
16
16
|
instances.include?(subject)
|
17
17
|
end
|
18
18
|
end)
|
19
|
+
|
19
20
|
include ClassInstanceMethodDefined
|
20
21
|
|
21
22
|
attr_reader :subject_class
|
23
|
+
|
22
24
|
def initialize(subject_class)
|
23
25
|
@subject_class = subject_class
|
24
26
|
@placeholder_method_defined = false
|
@@ -63,7 +65,7 @@ module RR
|
|
63
65
|
end
|
64
66
|
end
|
65
67
|
|
66
|
-
|
68
|
+
protected
|
67
69
|
def original_method_alias_name
|
68
70
|
"__rr__original_singleton_method_added"
|
69
71
|
end
|
@@ -2,6 +2,7 @@ module RR
|
|
2
2
|
module MethodDispatches
|
3
3
|
class MethodDispatch < BaseMethodDispatch
|
4
4
|
attr_reader :double_injection, :subject
|
5
|
+
|
5
6
|
def initialize(double_injection, subject, args, block)
|
6
7
|
@double_injection, @subject, @args, @block = double_injection, subject, args, block
|
7
8
|
@double = find_double_to_attempt
|
@@ -34,7 +35,7 @@ module RR
|
|
34
35
|
end
|
35
36
|
end
|
36
37
|
|
37
|
-
|
38
|
+
protected
|
38
39
|
def call_implementation
|
39
40
|
if implementation_is_original_method?
|
40
41
|
call_original_method
|
@@ -8,6 +8,7 @@ module RR
|
|
8
8
|
end)
|
9
9
|
|
10
10
|
attr_reader :subject, :subject_class, :method_name
|
11
|
+
|
11
12
|
def initialize(subject, subject_class, method_name, args, block)
|
12
13
|
@subject, @subject_class, @method_name, @args, @block = subject, subject_class, method_name, args, block
|
13
14
|
end
|
@@ -36,7 +37,7 @@ module RR
|
|
36
37
|
end
|
37
38
|
end
|
38
39
|
|
39
|
-
|
40
|
+
protected
|
40
41
|
def call_implementation
|
41
42
|
if implementation_is_original_method?
|
42
43
|
space.record_call(subject, method_name, args, block)
|
data/lib/rr/proc_from_block.rb
CHANGED
data/lib/rr/space.rb
CHANGED
@@ -13,7 +13,7 @@ module RR
|
|
13
13
|
end
|
14
14
|
attr_writer :instance
|
15
15
|
|
16
|
-
|
16
|
+
protected
|
17
17
|
def method_missing(method_name, *args, &block)
|
18
18
|
instance.__send__(method_name, *args, &block)
|
19
19
|
end
|
@@ -21,6 +21,7 @@ module RR
|
|
21
21
|
|
22
22
|
attr_reader :ordered_doubles, :recorded_calls
|
23
23
|
attr_accessor :trim_backtrace
|
24
|
+
|
24
25
|
def initialize
|
25
26
|
@ordered_doubles = []
|
26
27
|
@trim_backtrace = false
|
@@ -86,7 +87,7 @@ module RR
|
|
86
87
|
]
|
87
88
|
end
|
88
89
|
|
89
|
-
|
90
|
+
protected
|
90
91
|
# Removes the ordered Doubles from the list
|
91
92
|
def reset_ordered_doubles
|
92
93
|
@ordered_doubles.clear
|
data/lib/rr/version.rb
ADDED
data/spec/runner.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'session'
|
2
|
+
|
3
|
+
class SuitesRunner
|
4
|
+
TEST_SUITES = [
|
5
|
+
[:rspec, 'RSpec', 'RSpec'],
|
6
|
+
[:test_unit, 'TestUnit', 'Test::Unit'],
|
7
|
+
[:minitest, 'Minitest', 'MiniTest']
|
8
|
+
]
|
9
|
+
|
10
|
+
attr_reader :bash
|
11
|
+
|
12
|
+
def initialize
|
13
|
+
@bash = Session::Bash.new
|
14
|
+
end
|
15
|
+
|
16
|
+
def run
|
17
|
+
TEST_SUITES.each_with_index do |(path, class_fragment, desc), i|
|
18
|
+
puts "----------------" unless i == 0
|
19
|
+
run_examples(path, class_fragment, desc)
|
20
|
+
puts
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def run_examples(path, class_fragment, desc)
|
25
|
+
path = File.expand_path("../suites/#{path}/runner.rb", __FILE__)
|
26
|
+
# From http://www.eglug.org/node/946
|
27
|
+
bash.execute "exec 3>&1", :out => STDOUT, :err => STDERR
|
28
|
+
# XXX: why are we checking for this warning here...
|
29
|
+
bash.execute "ruby -W #{path} 2>&1 >&3 3>&- | grep -v 'warning: useless use of' 3>&-; STATUS=${PIPESTATUS[0]}", :out => STDOUT, :err => STDERR
|
30
|
+
status = bash.execute("echo $STATUS")[0].to_s.strip.to_i
|
31
|
+
bash.execute "exec 3>&-", :out => STDOUT, :err => STDERR
|
32
|
+
unless status == 0
|
33
|
+
raise "#{desc} Suite Failed"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
if $0 == __FILE__
|
39
|
+
SuitesRunner.new.run
|
40
|
+
end
|
41
|
+
|