micronaut 0.2.9
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +15 -0
- data/LICENSE +45 -0
- data/README.markdown +66 -0
- data/RSPEC-LICENSE +23 -0
- data/Rakefile +78 -0
- data/VERSION.yml +4 -0
- data/bin/micronaut +4 -0
- data/examples/example_helper.rb +54 -0
- data/examples/lib/micronaut/behaviour_example.rb +351 -0
- data/examples/lib/micronaut/configuration_example.rb +133 -0
- data/examples/lib/micronaut/example_example.rb +67 -0
- data/examples/lib/micronaut/expectations/extensions/object_example.rb +146 -0
- data/examples/lib/micronaut/expectations/fail_with_example.rb +17 -0
- data/examples/lib/micronaut/expectations/wrap_expectation_example.rb +27 -0
- data/examples/lib/micronaut/formatters/base_formatter_example.rb +117 -0
- data/examples/lib/micronaut/formatters/documentation_formatter_example.rb +5 -0
- data/examples/lib/micronaut/formatters/progress_formatter_example.rb +29 -0
- data/examples/lib/micronaut/kernel_extensions_example.rb +13 -0
- data/examples/lib/micronaut/matchers/be_close_example.rb +52 -0
- data/examples/lib/micronaut/matchers/be_example.rb +298 -0
- data/examples/lib/micronaut/matchers/change_example.rb +360 -0
- data/examples/lib/micronaut/matchers/description_generation_example.rb +175 -0
- data/examples/lib/micronaut/matchers/eql_example.rb +35 -0
- data/examples/lib/micronaut/matchers/equal_example.rb +35 -0
- data/examples/lib/micronaut/matchers/has_example.rb +69 -0
- data/examples/lib/micronaut/matchers/have_example.rb +392 -0
- data/examples/lib/micronaut/matchers/include_example.rb +103 -0
- data/examples/lib/micronaut/matchers/match_example.rb +43 -0
- data/examples/lib/micronaut/matchers/matcher_methods_example.rb +78 -0
- data/examples/lib/micronaut/matchers/operator_matcher_example.rb +193 -0
- data/examples/lib/micronaut/matchers/raise_error_example.rb +348 -0
- data/examples/lib/micronaut/matchers/respond_to_example.rb +54 -0
- data/examples/lib/micronaut/matchers/satisfy_example.rb +36 -0
- data/examples/lib/micronaut/matchers/simple_matcher_example.rb +93 -0
- data/examples/lib/micronaut/matchers/throw_symbol_example.rb +125 -0
- data/examples/lib/micronaut/mocha_example.rb +29 -0
- data/examples/lib/micronaut/runner_example.rb +41 -0
- data/examples/lib/micronaut/world_example.rb +98 -0
- data/examples/lib/micronaut_example.rb +43 -0
- data/examples/resources/example_classes.rb +67 -0
- data/lib/micronaut.rb +40 -0
- data/lib/micronaut/behaviour.rb +217 -0
- data/lib/micronaut/configuration.rb +162 -0
- data/lib/micronaut/example.rb +112 -0
- data/lib/micronaut/expectations.rb +45 -0
- data/lib/micronaut/expectations/extensions/object.rb +92 -0
- data/lib/micronaut/expectations/handler.rb +51 -0
- data/lib/micronaut/expectations/wrap_expectation.rb +52 -0
- data/lib/micronaut/formatters.rb +12 -0
- data/lib/micronaut/formatters/base_formatter.rb +127 -0
- data/lib/micronaut/formatters/base_text_formatter.rb +139 -0
- data/lib/micronaut/formatters/documentation_formatter.rb +78 -0
- data/lib/micronaut/formatters/progress_formatter.rb +30 -0
- data/lib/micronaut/kernel_extensions.rb +11 -0
- data/lib/micronaut/matchers.rb +141 -0
- data/lib/micronaut/matchers/be.rb +204 -0
- data/lib/micronaut/matchers/be_close.rb +37 -0
- data/lib/micronaut/matchers/change.rb +148 -0
- data/lib/micronaut/matchers/eql.rb +26 -0
- data/lib/micronaut/matchers/equal.rb +26 -0
- data/lib/micronaut/matchers/generated_descriptions.rb +36 -0
- data/lib/micronaut/matchers/has.rb +19 -0
- data/lib/micronaut/matchers/have.rb +153 -0
- data/lib/micronaut/matchers/include.rb +80 -0
- data/lib/micronaut/matchers/match.rb +22 -0
- data/lib/micronaut/matchers/method_missing.rb +9 -0
- data/lib/micronaut/matchers/operator_matcher.rb +50 -0
- data/lib/micronaut/matchers/raise_error.rb +128 -0
- data/lib/micronaut/matchers/respond_to.rb +50 -0
- data/lib/micronaut/matchers/satisfy.rb +50 -0
- data/lib/micronaut/matchers/simple_matcher.rb +135 -0
- data/lib/micronaut/matchers/throw_symbol.rb +108 -0
- data/lib/micronaut/mocking/with_absolutely_nothing.rb +11 -0
- data/lib/micronaut/mocking/with_mocha.rb +15 -0
- data/lib/micronaut/mocking/with_rr.rb +24 -0
- data/lib/micronaut/rake_task.rb +84 -0
- data/lib/micronaut/runner.rb +60 -0
- data/lib/micronaut/world.rb +75 -0
- metadata +165 -0
@@ -0,0 +1,43 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + "/../example_helper")
|
2
|
+
|
3
|
+
describe Micronaut do
|
4
|
+
|
5
|
+
describe "#configuration" do
|
6
|
+
|
7
|
+
it "should return an instance of Micronaut::Configuration" do
|
8
|
+
Micronaut.configuration.should be_an_instance_of(Micronaut::Configuration)
|
9
|
+
end
|
10
|
+
|
11
|
+
end
|
12
|
+
|
13
|
+
describe "#configure" do
|
14
|
+
|
15
|
+
it "should yield the current configuration" do
|
16
|
+
Micronaut.configure do |config|
|
17
|
+
config.should == Micronaut.configuration
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should be callable without a block" do
|
22
|
+
Micronaut.configure
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#world" do
|
28
|
+
|
29
|
+
it "should return the Micronaut::World instance the current run is using" do
|
30
|
+
Micronaut.world.should be_instance_of(Micronaut::World)
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "InstallDirectory" do
|
36
|
+
|
37
|
+
it "should be the expanded version of the install directory" do
|
38
|
+
Micronaut::InstallDirectory.should == File.expand_path(File.dirname(__FILE__) + "/../../lib")
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# This file contains various classes used by the specs.
|
2
|
+
module Micronaut
|
3
|
+
module Expectations
|
4
|
+
class Person
|
5
|
+
attr_reader :name
|
6
|
+
def initialize name
|
7
|
+
@name = name
|
8
|
+
end
|
9
|
+
def == other
|
10
|
+
return @name == other.name
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
class ClassWithMultiWordPredicate
|
15
|
+
def multi_word_predicate?
|
16
|
+
true
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
module Helper
|
21
|
+
class CollectionWithSizeMethod
|
22
|
+
def initialize; @list = []; end
|
23
|
+
def size; @list.size; end
|
24
|
+
def push(item); @list.push(item); end
|
25
|
+
end
|
26
|
+
|
27
|
+
class CollectionWithLengthMethod
|
28
|
+
def initialize; @list = []; end
|
29
|
+
def length; @list.size; end
|
30
|
+
def push(item); @list.push(item); end
|
31
|
+
end
|
32
|
+
|
33
|
+
class CollectionOwner
|
34
|
+
attr_reader :items_in_collection_with_size_method, :items_in_collection_with_length_method
|
35
|
+
|
36
|
+
def initialize
|
37
|
+
@items_in_collection_with_size_method = CollectionWithSizeMethod.new
|
38
|
+
@items_in_collection_with_length_method = CollectionWithLengthMethod.new
|
39
|
+
end
|
40
|
+
|
41
|
+
def add_to_collection_with_size_method(item)
|
42
|
+
@items_in_collection_with_size_method.push(item)
|
43
|
+
end
|
44
|
+
|
45
|
+
def add_to_collection_with_length_method(item)
|
46
|
+
@items_in_collection_with_length_method.push(item)
|
47
|
+
end
|
48
|
+
|
49
|
+
def items_for(arg)
|
50
|
+
return [1, 2, 3] if arg == 'a'
|
51
|
+
[1]
|
52
|
+
end
|
53
|
+
|
54
|
+
def items
|
55
|
+
@items_in_collection_with_size_method
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
class ClassWithUnqueriedPredicate
|
60
|
+
attr_accessor :foo
|
61
|
+
def initialize(foo)
|
62
|
+
@foo = foo
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
data/lib/micronaut.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'micronaut/mocking/with_absolutely_nothing'
|
2
|
+
require 'micronaut/matchers'
|
3
|
+
require 'micronaut/expectations'
|
4
|
+
require 'micronaut/world'
|
5
|
+
require 'micronaut/configuration'
|
6
|
+
require 'micronaut/runner'
|
7
|
+
require 'micronaut/example'
|
8
|
+
require 'micronaut/behaviour'
|
9
|
+
require 'micronaut/kernel_extensions'
|
10
|
+
require 'micronaut/formatters'
|
11
|
+
|
12
|
+
module Micronaut
|
13
|
+
file = if RUBY_VERSION =~ /^1\.9/ then # bt's expanded, but __FILE__ isn't :(
|
14
|
+
File.expand_path __FILE__
|
15
|
+
elsif __FILE__ =~ /^[^\.]/ then # assume both relative
|
16
|
+
require 'pathname'
|
17
|
+
pwd = Pathname.new(Dir.pwd)
|
18
|
+
path_name = Pathname.new(File.expand_path(__FILE__))
|
19
|
+
path_name = File.join(".", path_name.relative_path_from(pwd)) unless path_name.relative?
|
20
|
+
path_name.to_s
|
21
|
+
else # assume both are expanded
|
22
|
+
__FILE__
|
23
|
+
end
|
24
|
+
|
25
|
+
# './lib' in project dir, or '/usr/local/blahblah' if installed
|
26
|
+
InstallDirectory = File.expand_path(File.dirname(File.dirname(file)) + "/lib")
|
27
|
+
|
28
|
+
def self.configuration
|
29
|
+
@configuration ||= Micronaut::Configuration.new
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.configure
|
33
|
+
yield configuration if block_given?
|
34
|
+
end
|
35
|
+
|
36
|
+
def self.world
|
37
|
+
@world ||= Micronaut::World.new
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
@@ -0,0 +1,217 @@
|
|
1
|
+
module Micronaut
|
2
|
+
class Behaviour
|
3
|
+
include Micronaut::Matchers
|
4
|
+
|
5
|
+
attr_accessor :running_example, :reporter
|
6
|
+
|
7
|
+
def self.inherited(klass)
|
8
|
+
super
|
9
|
+
Micronaut.configuration.autorun!
|
10
|
+
Micronaut.world.behaviours << klass
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.extended_modules #:nodoc:
|
14
|
+
ancestors = class << self; ancestors end
|
15
|
+
ancestors.select { |mod| mod.class == Module } - [ Object, Kernel ]
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.befores
|
19
|
+
@_befores ||= { :all => [], :each => [] }
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.before_eachs
|
23
|
+
befores[:each]
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.before_alls
|
27
|
+
befores[:all]
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.before(type=:each, &block)
|
31
|
+
befores[type] << block
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.afters
|
35
|
+
@_afters ||= { :all => [], :each => [] }
|
36
|
+
end
|
37
|
+
|
38
|
+
def self.after_eachs
|
39
|
+
afters[:each]
|
40
|
+
end
|
41
|
+
|
42
|
+
def self.after_alls
|
43
|
+
afters[:all]
|
44
|
+
end
|
45
|
+
|
46
|
+
def self.after(type=:each, &block)
|
47
|
+
afters[type] << block
|
48
|
+
end
|
49
|
+
|
50
|
+
def self.example(desc=nil, options={}, &block)
|
51
|
+
examples << Micronaut::Example.new(self, desc, options.update(:caller => caller[0]), block)
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.alias_example_to(new_alias, extra_options={})
|
55
|
+
new_alias = <<-END_RUBY
|
56
|
+
def self.#{new_alias}(desc=nil, options={}, &block)
|
57
|
+
updated_options = options.update(:caller => caller[0])
|
58
|
+
updated_options.update(#{extra_options.inspect})
|
59
|
+
block = nil if updated_options[:pending] == true || updated_options[:disabled] == true
|
60
|
+
examples << Micronaut::Example.new(self, desc, updated_options, block)
|
61
|
+
end
|
62
|
+
END_RUBY
|
63
|
+
module_eval(new_alias, __FILE__, __LINE__)
|
64
|
+
end
|
65
|
+
|
66
|
+
alias_example_to :it
|
67
|
+
alias_example_to :focused, :focused => true
|
68
|
+
alias_example_to :disabled, :disabled => true
|
69
|
+
alias_example_to :pending, :pending => true
|
70
|
+
|
71
|
+
def self.examples
|
72
|
+
@_examples ||= []
|
73
|
+
end
|
74
|
+
|
75
|
+
def self.examples_to_run
|
76
|
+
@_examples_to_run ||= []
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.set_it_up(*args)
|
80
|
+
@metadata = { }
|
81
|
+
extra_metadata = args.last.is_a?(Hash) ? args.pop : {}
|
82
|
+
extra_metadata.delete(:behaviour) # Remove it when present to prevent it clobbering the one we setup
|
83
|
+
@metadata.update(self.superclass.metadata)
|
84
|
+
@metadata[:behaviour] = {}
|
85
|
+
@metadata[:behaviour][:describes] = args.shift unless args.first.is_a?(String)
|
86
|
+
@metadata[:behaviour][:describes] ||= self.superclass.metadata && self.superclass.metadata[:behaviour][:describes]
|
87
|
+
@metadata[:behaviour][:description] = args.shift || ''
|
88
|
+
@metadata[:behaviour][:name] = "#{describes} #{description}".strip
|
89
|
+
@metadata[:behaviour][:block] = extra_metadata.delete(:behaviour_block)
|
90
|
+
@metadata[:behaviour][:caller] = extra_metadata.delete(:caller) || caller(1)
|
91
|
+
@metadata[:behaviour][:file_path] = extra_metadata.delete(:file_path) || @metadata[:behaviour][:caller][4].split(":")[0].strip
|
92
|
+
@metadata[:behaviour][:line_number] = extra_metadata.delete(:line_number) || @metadata[:behaviour][:caller][4].split(":")[1].to_i
|
93
|
+
|
94
|
+
@metadata.update(extra_metadata)
|
95
|
+
|
96
|
+
Micronaut.configuration.find_modules(self).each do |include_or_extend, mod, opts|
|
97
|
+
if include_or_extend == :extend
|
98
|
+
Micronaut.configuration.trace { "Extending module #{mod} on #{self}" }
|
99
|
+
send(:extend, mod) unless extended_modules.include?(mod)
|
100
|
+
else
|
101
|
+
Micronaut.configuration.trace { "Including module #{mod} on #{self}" }
|
102
|
+
send(:include, mod) unless included_modules.include?(mod)
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
|
107
|
+
def self.metadata
|
108
|
+
@metadata ||= { :behaviour => {} }
|
109
|
+
end
|
110
|
+
|
111
|
+
def self.name(friendly=true)
|
112
|
+
friendly ? metadata[:behaviour][:name] : super()
|
113
|
+
end
|
114
|
+
|
115
|
+
def self.describes
|
116
|
+
metadata[:behaviour][:describes]
|
117
|
+
end
|
118
|
+
|
119
|
+
def self.description
|
120
|
+
metadata[:behaviour][:description]
|
121
|
+
end
|
122
|
+
|
123
|
+
def self.file_path
|
124
|
+
metadata[:behaviour][:file_path]
|
125
|
+
end
|
126
|
+
|
127
|
+
def self.describe(*args, &behaviour_block)
|
128
|
+
raise(ArgumentError, "No arguments given. You must a least supply a type or description") if args.empty?
|
129
|
+
raise(ArgumentError, "You must supply a block when calling describe") if behaviour_block.nil?
|
130
|
+
|
131
|
+
subclass('NestedLevel') do
|
132
|
+
args << {} unless args.last.is_a?(Hash)
|
133
|
+
args.last.update(:behaviour_block => behaviour_block)
|
134
|
+
set_it_up(*args)
|
135
|
+
module_eval(&behaviour_block)
|
136
|
+
end
|
137
|
+
end
|
138
|
+
|
139
|
+
def self.ancestors(superclass_last=false)
|
140
|
+
classes = []
|
141
|
+
current_class = self
|
142
|
+
|
143
|
+
while current_class < Micronaut::Behaviour
|
144
|
+
superclass_last ? classes << current_class : classes.unshift(current_class)
|
145
|
+
current_class = current_class.superclass
|
146
|
+
end
|
147
|
+
|
148
|
+
classes
|
149
|
+
end
|
150
|
+
|
151
|
+
def self.before_ancestors
|
152
|
+
@_before_ancestors ||= ancestors
|
153
|
+
end
|
154
|
+
|
155
|
+
def self.after_ancestors
|
156
|
+
@_after_ancestors ||= ancestors(true)
|
157
|
+
end
|
158
|
+
|
159
|
+
def self.before_all_ivars
|
160
|
+
@before_all_ivars ||= {}
|
161
|
+
end
|
162
|
+
|
163
|
+
def self.eval_before_alls(running_behaviour)
|
164
|
+
superclass.before_all_ivars.each { |ivar, val| running_behaviour.instance_variable_set(ivar, val) }
|
165
|
+
Micronaut.configuration.find_before_or_after(:before, :all, self).each { |blk| running_behaviour.instance_eval(&blk) }
|
166
|
+
|
167
|
+
before_alls.each { |blk| running_behaviour.instance_eval(&blk) }
|
168
|
+
running_behaviour.instance_variables.each { |ivar| before_all_ivars[ivar] = running_behaviour.instance_variable_get(ivar) }
|
169
|
+
end
|
170
|
+
|
171
|
+
def self.eval_before_eachs(running_behaviour)
|
172
|
+
Micronaut.configuration.find_before_or_after(:before, :each, self).each { |blk| running_behaviour.instance_eval(&blk) }
|
173
|
+
before_ancestors.each { |ancestor| ancestor.before_eachs.each { |blk| running_behaviour.instance_eval(&blk) } }
|
174
|
+
end
|
175
|
+
|
176
|
+
def self.eval_after_alls(running_behaviour)
|
177
|
+
after_alls.each { |blk| running_behaviour.instance_eval(&blk) }
|
178
|
+
Micronaut.configuration.find_before_or_after(:after, :all, self).each { |blk| running_behaviour.instance_eval(&blk) }
|
179
|
+
before_all_ivars.keys.each { |ivar| before_all_ivars[ivar] = running_behaviour.instance_variable_get(ivar) }
|
180
|
+
end
|
181
|
+
|
182
|
+
def self.eval_after_eachs(running_behaviour)
|
183
|
+
after_ancestors.each { |ancestor| ancestor.after_eachs.each { |blk| running_behaviour.instance_eval(&blk) } }
|
184
|
+
Micronaut.configuration.find_before_or_after(:after, :each, self).each { |blk| running_behaviour.instance_eval(&blk) }
|
185
|
+
end
|
186
|
+
|
187
|
+
def self.run(reporter)
|
188
|
+
behaviour_instance = new
|
189
|
+
reporter.add_behaviour(self)
|
190
|
+
eval_before_alls(behaviour_instance)
|
191
|
+
success = run_examples(behaviour_instance, reporter)
|
192
|
+
eval_after_alls(behaviour_instance)
|
193
|
+
|
194
|
+
success
|
195
|
+
end
|
196
|
+
|
197
|
+
# Runs all examples, returning true only if all of them pass
|
198
|
+
def self.run_examples(behaviour_instance, reporter)
|
199
|
+
examples_to_run.map { |ex| ex.run(behaviour_instance) }.all?
|
200
|
+
end
|
201
|
+
|
202
|
+
def self.subclass(base_name, &body) # :nodoc:
|
203
|
+
@_sub_class_count ||= 0
|
204
|
+
@_sub_class_count += 1
|
205
|
+
klass = Class.new(self)
|
206
|
+
class_name = "#{base_name}_#{@_sub_class_count}"
|
207
|
+
const_set(class_name, klass)
|
208
|
+
klass.instance_eval(&body)
|
209
|
+
klass
|
210
|
+
end
|
211
|
+
|
212
|
+
def self.to_s
|
213
|
+
self == Micronaut::Behaviour ? 'Micronaut::Behaviour' : name
|
214
|
+
end
|
215
|
+
|
216
|
+
end
|
217
|
+
end
|
@@ -0,0 +1,162 @@
|
|
1
|
+
module Micronaut
|
2
|
+
|
3
|
+
class Configuration
|
4
|
+
# Regex patterns to scrub backtrace with
|
5
|
+
attr_reader :backtrace_clean_patterns
|
6
|
+
|
7
|
+
# All of the defined before/after blocks setup in the configuration
|
8
|
+
attr_reader :before_and_afters
|
9
|
+
|
10
|
+
# Allows you to control what examples are ran by filtering
|
11
|
+
attr_reader :filter
|
12
|
+
|
13
|
+
# Modules that will be included or extended based on given filters
|
14
|
+
attr_reader :include_or_extend_modules
|
15
|
+
|
16
|
+
# Run all examples if the run is filtered, and no examples were found. Normally this is what you want -
|
17
|
+
# when using focused examples for instance. Defaults to true
|
18
|
+
attr_accessor :run_all_when_everything_filtered
|
19
|
+
|
20
|
+
# Enable profiling of example run - defaults to false
|
21
|
+
attr_accessor :profile_examples
|
22
|
+
|
23
|
+
# Enable verbose interal logging of the framework - defaults to false
|
24
|
+
attr_accessor :trace
|
25
|
+
|
26
|
+
attr_reader :mock_framework
|
27
|
+
|
28
|
+
def initialize
|
29
|
+
@backtrace_clean_patterns = [/\/lib\/ruby\//, /bin\/rcov:/, /vendor\/rails/, /bin\/micronaut/, /#{::Micronaut::InstallDirectory}/]
|
30
|
+
@run_all_when_everything_filtered = true
|
31
|
+
@trace = false
|
32
|
+
@profile_examples = false
|
33
|
+
@color_enabled = false
|
34
|
+
@before_and_afters = { :before => { :each => [], :all => [] }, :after => { :each => [], :all => [] } }
|
35
|
+
@include_or_extend_modules = []
|
36
|
+
@formatter_to_use = Micronaut::Formatters::ProgressFormatter
|
37
|
+
@filter = nil
|
38
|
+
mock_with nil unless @mock_framework_established
|
39
|
+
end
|
40
|
+
|
41
|
+
# E.g. alias_example_to :crazy_slow, :speed => 'crazy_slow' defines
|
42
|
+
# crazy_slow as an example variant that has the crazy_slow speed option
|
43
|
+
def alias_example_to(new_name, extra_options={})
|
44
|
+
Micronaut::Behaviour.alias_example_to(new_name, extra_options)
|
45
|
+
end
|
46
|
+
|
47
|
+
def cleaned_from_backtrace?(line)
|
48
|
+
@backtrace_clean_patterns.any? { |regex| line =~ regex }
|
49
|
+
end
|
50
|
+
|
51
|
+
def mock_with(make_a_mockery_with=nil)
|
52
|
+
@mock_framework_established = true
|
53
|
+
@mock_framework = make_a_mockery_with
|
54
|
+
mock_framework_class = case make_a_mockery_with.to_s
|
55
|
+
when /mocha/i
|
56
|
+
require 'micronaut/mocking/with_mocha'
|
57
|
+
Micronaut::Mocking::WithMocha
|
58
|
+
when /rr/i
|
59
|
+
require 'micronaut/mocking/with_rr'
|
60
|
+
Micronaut::Mocking::WithRR
|
61
|
+
else
|
62
|
+
require 'micronaut/mocking/with_absolutely_nothing'
|
63
|
+
Micronaut::Mocking::WithAbsolutelyNothing
|
64
|
+
end
|
65
|
+
|
66
|
+
Micronaut::Behaviour.send(:include, mock_framework_class)
|
67
|
+
end
|
68
|
+
|
69
|
+
def autorun!
|
70
|
+
Micronaut::Runner.autorun
|
71
|
+
end
|
72
|
+
|
73
|
+
# Turn ANSI on with 'true', or off with 'false'
|
74
|
+
def color_enabled=(on_or_off)
|
75
|
+
@color_enabled = on_or_off
|
76
|
+
end
|
77
|
+
|
78
|
+
# Output with ANSI color enabled? Defaults to false
|
79
|
+
def color_enabled?
|
80
|
+
@color_enabled
|
81
|
+
end
|
82
|
+
|
83
|
+
def filter_run(options={})
|
84
|
+
@filter = options
|
85
|
+
end
|
86
|
+
|
87
|
+
def run_all_when_everything_filtered?
|
88
|
+
@run_all_when_everything_filtered
|
89
|
+
end
|
90
|
+
|
91
|
+
def formatter=(formatter_to_use)
|
92
|
+
@formatter_to_use = case formatter_to_use.to_s
|
93
|
+
when 'documentation' then Micronaut::Formatters::DocumentationFormatter
|
94
|
+
when 'progress' then Micronaut::Formatters::ProgressFormatter
|
95
|
+
else raise(ArgumentError, "Formatter '#{formatter_to_use}' unknown - maybe you meant 'documentation' or 'progress'?.")
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
# The formatter all output should use. Defaults to the progress formatter
|
100
|
+
def formatter
|
101
|
+
@formatter ||= @formatter_to_use.new
|
102
|
+
end
|
103
|
+
|
104
|
+
# Where does output go? For now $stdout
|
105
|
+
def output
|
106
|
+
$stdout
|
107
|
+
end
|
108
|
+
|
109
|
+
# Output some string for debugging/tracing assistance if trace is enabled
|
110
|
+
# The trace string should be sent as a block, which means it will only be interpolated if trace is actually enabled
|
111
|
+
# We allow an override here so that trace can be set at lower levels (such as the describe or example level)
|
112
|
+
def trace(override = false)
|
113
|
+
raise(ArgumentError, "Must yield a block with your string to trace.") unless block_given?
|
114
|
+
return unless trace? || override
|
115
|
+
puts("[TRACE] #{yield}")
|
116
|
+
end
|
117
|
+
|
118
|
+
def puts(msg)
|
119
|
+
output.puts(msg)
|
120
|
+
end
|
121
|
+
|
122
|
+
# If true, Micronaut will provide detailed trace output of its self as it runs.
|
123
|
+
# Can be turned on at the global (configuration) level or at the individual behaviour (describe) level.
|
124
|
+
def trace?
|
125
|
+
@trace == true
|
126
|
+
end
|
127
|
+
|
128
|
+
def include(mod, options={})
|
129
|
+
include_or_extend_modules << [:include, mod, options]
|
130
|
+
end
|
131
|
+
|
132
|
+
def extend(mod, options={})
|
133
|
+
include_or_extend_modules << [:extend, mod, options]
|
134
|
+
end
|
135
|
+
|
136
|
+
def find_modules(group)
|
137
|
+
include_or_extend_modules.select do |include_or_extend, mod, options|
|
138
|
+
options.all? do |filter_on, filter|
|
139
|
+
Micronaut.world.apply_condition(filter_on, filter, group.metadata)
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
def before(each_or_all=:each, options={}, &block)
|
145
|
+
before_and_afters[:before][each_or_all] << [options, block]
|
146
|
+
end
|
147
|
+
|
148
|
+
def after(each_or_all=:each, options={}, &block)
|
149
|
+
before_and_afters[:after][each_or_all] << [options, block]
|
150
|
+
end
|
151
|
+
|
152
|
+
def find_before_or_after(desired_before_or_after, desired_each_or_all, group)
|
153
|
+
before_and_afters[desired_before_or_after][desired_each_or_all].select do |options, block|
|
154
|
+
options.all? do |filter_on, filter|
|
155
|
+
Micronaut.world.apply_condition(filter_on, filter, group.metadata)
|
156
|
+
end
|
157
|
+
end.map { |options, block| block }
|
158
|
+
end
|
159
|
+
|
160
|
+
end
|
161
|
+
|
162
|
+
end
|