spicycode-micronaut 0.1.4.1 → 0.1.4.2

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -3,7 +3,7 @@ require 'rake/gempackagetask'
3
3
  require 'rubygems/specification'
4
4
 
5
5
  GEM = "micronaut"
6
- GEM_VERSION = "0.1.4.1"
6
+ GEM_VERSION = "0.1.4.2"
7
7
  AUTHOR = "Chad Humphries"
8
8
  EMAIL = "chad@spicycode.com"
9
9
  HOMEPAGE = "http://spicycode.com"
@@ -68,9 +68,18 @@ namespace :micronaut do
68
68
  desc "Run all examples using rcov"
69
69
  task :coverage do
70
70
  examples = Dir["examples/**/*_example.rb"].map { |g| Dir.glob(g) }.flatten
71
- system "rcov --exclude \"examples/*,gems/*,db/*,/Library/Ruby/*,config/*\" --text-report --sort coverage --no-validator-links #{examples.join(' ')}"
71
+ result = system "rcov --exclude \"examples/*,gems/*,db/*,/Library/Ruby/*,config/*\" --text-summary --sort coverage --no-validator-links #{examples.join(' ')}"
72
+ fail_build unless result
72
73
  end
73
74
 
75
+ def fail_build
76
+ puts
77
+ puts "-" * 79
78
+ puts "Build Failed"
79
+ puts "-" * 79
80
+ abort
81
+ end
82
+
74
83
  desc "Delete coverage artifacts"
75
84
  task :clean_coverage do
76
85
  rm_rf Dir["coverage/**/*"]
@@ -18,7 +18,7 @@ module Micronaut
18
18
  end
19
19
 
20
20
  def remove_last_describe_from_world
21
- Micronaut::World.behaviours.pop
21
+ Micronaut.world.behaviours.pop
22
22
  end
23
23
 
24
24
  class DummyFormatter < Micronaut::Formatters::BaseTextFormatter; end
@@ -29,8 +29,9 @@ end
29
29
 
30
30
  Micronaut.configure do |config|
31
31
  config.mock_with :mocha
32
- config.options = Micronaut::RunnerOptions.new(:color => true, :formatter => :progress)
33
- config.profile_examples = false
32
+ config.color_enabled = true
33
+ config.formatter = :progress
34
+ config.profile_examples = true
34
35
  config.add_filter :options => { :focused => true }
35
36
  config.autorun!
36
37
  end
@@ -172,8 +172,13 @@ describe Micronaut::Behaviour do
172
172
  end
173
173
 
174
174
  describe Foo, "describing nested behaviours" do
175
+
176
+ before { "before_each_1" }
177
+ before(:all) { "before_all_1" }
178
+ after { "after_each_1" }
179
+ after(:all) { "after_all_1" }
175
180
 
176
- describe "nested describes" do
181
+ describe "nested describes", :just_testing => 'yep' do
177
182
 
178
183
  it "should set the described type to the parent described type if no described type is given" do
179
184
  self.class.described_type.should == Foo
@@ -182,10 +187,14 @@ describe Micronaut::Behaviour do
182
187
  it "should set the description to the first parameter if no described type is given" do
183
188
  self.class.description.should == 'nested describes'
184
189
  end
185
-
186
- it "should have access to all of it's ancestors before blocks"
187
190
 
188
- it "should have access to all of it's ancestors after blocks"
191
+ it "should set the options to the last parameter if it is a hash" do
192
+ self.class.options.should include(:just_testing => 'yep')
193
+ end
194
+
195
+ it "should have the caller in the options hash" do
196
+ self.class.options.should include(:caller)
197
+ end
189
198
 
190
199
  end
191
200
 
@@ -46,9 +46,9 @@ describe Micronaut::Configuration do
46
46
  end
47
47
 
48
48
  it "should extend the given module into each behaviour group" do
49
- Micronaut.configuration.extend(FocusedSupport)
50
- group = Micronaut::Behaviour.describe(FocusedSupport, 'the focused support ') { }
51
- group.should respond_to(:fit)
49
+ Micronaut.configuration.extend(ThatThingISentYou)
50
+ group = Micronaut::Behaviour.describe(ThatThingISentYou, 'the focused support ') { }
51
+ group.should respond_to(:that_thing)
52
52
  remove_last_describe_from_world
53
53
  end
54
54
 
@@ -44,9 +44,11 @@ describe Micronaut::Example do
44
44
  end
45
45
 
46
46
  describe "accessing metadata within a running example" do
47
-
48
- it "should be able to get the current example object"
49
-
47
+
48
+ it "should have a reference to itself when running" do
49
+ running_example.description.should == "should have a reference to itself when running"
50
+ end
51
+
50
52
  end
51
53
 
52
54
  end
@@ -3,7 +3,7 @@ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
3
3
  describe Micronaut::Formatters::BaseFormatter do
4
4
 
5
5
  before(:all) do
6
- @formatter = Micronaut::Formatters::BaseFormatter.new(nil, nil)
6
+ @formatter = Micronaut::Formatters::BaseFormatter.new
7
7
  end
8
8
 
9
9
  class HaveInterfaceMatcher
@@ -3,21 +3,21 @@ require File.expand_path(File.dirname(__FILE__) + "/../../../example_helper")
3
3
  describe Micronaut::Formatters::ProgressFormatter do
4
4
 
5
5
  before do
6
- @io = StringIO.new
7
- @options = mock('options')
8
- @options.stubs(:enable_color_in_output?).returns(false)
9
- @formatter = Micronaut::Formatters::ProgressFormatter.new(@options, @io)
6
+ @output = StringIO.new
7
+ @formatter = Micronaut::Formatters::ProgressFormatter.new
8
+ @formatter.stubs(:color_enabled?).returns(false)
9
+ @formatter.stubs(:output).returns(@output)
10
10
  @original_profile_setting = Micronaut.configuration.profile_examples
11
11
  end
12
12
 
13
13
  it "should produce line break on start dump" do
14
14
  @formatter.start_dump
15
- @io.string.should eql("\n")
15
+ @output.string.should eql("\n")
16
16
  end
17
17
 
18
18
  it "should produce standard summary without pending when pending has a 0 count" do
19
19
  @formatter.dump_summary(3, 2, 1, 0)
20
- @io.string.should =~ /\nFinished in 3 seconds\n2 examples, 1 failure\n/
20
+ @output.string.should =~ /\nFinished in 3 seconds\n2 examples, 1 failures\n/i
21
21
  end
22
22
 
23
23
  it "should produce standard summary" do
@@ -27,32 +27,38 @@ describe Micronaut::Formatters::ProgressFormatter do
27
27
  remove_last_describe_from_world
28
28
  example = behaviour.examples.first
29
29
  @formatter.example_pending(example, "message")
30
- @io.rewind
30
+ @output.rewind
31
31
  @formatter.dump_summary(3, 2, 1, 1)
32
- @io.string.should =~ /\nFinished in 3 seconds\n2 examples, 1 failure, 1 pending\n/
32
+ @output.string.should =~ /\nFinished in 3 seconds\n2 examples, 1 failures, 1 pending\n/i
33
33
  end
34
+
35
+ describe "when color is enabled" do
36
+
37
+ before do
38
+ @formatter.stubs(:color_enabled?).returns(true)
39
+ end
34
40
 
35
- it "should push green dot for passing spec" do
36
- @options.expects(:enable_color_in_output?).returns(true)
37
- @formatter.example_passed("spec")
38
- @io.string.should == "\e[32m.\e[0m"
39
- end
41
+ it "should push green dot for passing spec" do
42
+ @formatter.color_enabled?.should == true
43
+ @formatter.example_passed("spec")
44
+ @output.string.should == "\e[32m.\e[0m"
45
+ end
40
46
 
41
- it "should push red F for failure spec" do
42
- @options.expects(:enable_color_in_output?).returns(true)
43
- @formatter.example_failed("spec", Micronaut::Expectations::ExpectationNotMetError.new)
44
- @io.string.should eql("\e[31mF\e[0m")
45
- end
47
+ it "should push red F for failure spec" do
48
+ @formatter.example_failed("spec", Micronaut::Expectations::ExpectationNotMetError.new)
49
+ @output.string.should eql("\e[31mF\e[0m")
50
+ end
46
51
 
47
- it "should push magenta F for error spec" do
48
- @options.expects(:enable_color_in_output?).returns(true)
49
- @formatter.example_failed("spec", RuntimeError.new)
50
- @io.string.should eql("\e[35mF\e[0m")
52
+ it "should push magenta F for error spec" do
53
+ @formatter.example_failed("spec", RuntimeError.new)
54
+ @output.string.should eql("\e[35mF\e[0m")
55
+ end
56
+
51
57
  end
52
-
58
+
53
59
  it "should push nothing on start" do
54
60
  @formatter.start(4)
55
- @io.string.should eql("")
61
+ @output.string.should eql("")
56
62
  end
57
63
 
58
64
  it "should ensure two ':' in the first backtrace" do
@@ -64,7 +70,7 @@ EOE
64
70
  backtrace = ["/tmp/x.rb:1: message", "/tmp/x.rb:2", "/tmp/x.rb:3"]
65
71
  @formatter.format_backtrace(backtrace).should eql(<<-EOE.rstrip)
66
72
  /tmp/x.rb:1: message
67
- EOE
73
+ EOE
68
74
  end
69
75
 
70
76
  end
@@ -4,13 +4,17 @@ class Bar; end
4
4
  class Foo; end
5
5
 
6
6
  describe Micronaut::World do
7
+
8
+ before do
9
+ @world = Micronaut::World.new
10
+ Micronaut.stubs(:world).returns(@world)
11
+ end
7
12
 
8
13
  describe "behaviour groups" do
9
14
 
10
15
  it "should contain all defined behaviour groups" do
11
16
  behaviour_group = Micronaut::Behaviour.describe(Bar, 'Empty Behaviour Group') { }
12
- Micronaut::World.behaviours.should include(behaviour_group)
13
- remove_last_describe_from_world
17
+ @world.behaviours.should include(behaviour_group)
14
18
  end
15
19
 
16
20
  end
@@ -34,82 +38,65 @@ describe Micronaut::World do
34
38
  @behaviours = [@bg1, @bg2, @bg3, @bg4]
35
39
  end
36
40
 
37
- after(:all) do
38
- Micronaut::World.behaviours.delete(@bg1)
39
- Micronaut::World.behaviours.delete(@bg2)
40
- Micronaut::World.behaviours.delete(@bg3)
41
- Micronaut::World.behaviours.delete(@bg4)
42
- end
43
-
44
41
  it "should find awesome examples" do
45
- Micronaut::World.find(@bg4.examples, :options => {:awesome => true}).should == [@bg4.examples[1], @bg4.examples[2]]
42
+ @world.find(@bg4.examples, :options => {:awesome => true}).should == [@bg4.examples[1], @bg4.examples[2]]
46
43
  end
47
44
 
48
45
  it "should find no groups when given no search parameters" do
49
- Micronaut::World.find([]).should == []
46
+ @world.find([]).should == []
50
47
  end
51
48
 
52
49
  it "should find three groups when searching for :described_type => Bar" do
53
- Micronaut::World.find(@behaviours, :described_type => Bar).should == [@bg1, @bg2, @bg3]
50
+ @world.find(@behaviours, :described_type => Bar).should == [@bg1, @bg2, @bg3]
54
51
  end
55
52
 
56
53
  it "should find one group when searching for :description => 'find group-1'" do
57
- Micronaut::World.find(@behaviours, :description => 'find group-1').should == [@bg1]
54
+ @world.find(@behaviours, :description => 'find group-1').should == [@bg1]
58
55
  end
59
56
 
60
57
  it "should find two groups when searching for :description => lambda { |v| v.include?('-1') || v.include?('-3') }" do
61
- Micronaut::World.find(@behaviours, :description => lambda { |v| v.include?('-1') || v.include?('-3') }).should == [@bg1, @bg3]
58
+ @world.find(@behaviours, :description => lambda { |v| v.include?('-1') || v.include?('-3') }).should == [@bg1, @bg3]
62
59
  end
63
60
 
64
61
  it "should find three groups when searching for :description => /find group/" do
65
- Micronaut::World.find(@behaviours, :description => /find group/).should == [@bg1, @bg2, @bg3]
62
+ @world.find(@behaviours, :description => /find group/).should == [@bg1, @bg2, @bg3]
66
63
  end
67
64
 
68
65
  it "should find one group when searching for :options => { :foo => 1 }" do
69
- Micronaut::World.find(@behaviours, :options => { :foo => 1 }).should == [@bg1]
66
+ @world.find(@behaviours, :options => { :foo => 1 }).should == [@bg1]
70
67
  end
71
68
 
72
69
  it "should find one group when searching for :options => { :pending => true }" do
73
- Micronaut::World.find(@behaviours, :options => { :pending => true }).should == [@bg2]
70
+ @world.find(@behaviours, :options => { :pending => true }).should == [@bg2]
74
71
  end
75
72
 
76
73
  it "should find one group when searching for :options => { :array => [1,2,3,4] }" do
77
- Micronaut::World.find(@behaviours, :options => { :array => [1,2,3,4] }).should == [@bg3]
74
+ @world.find(@behaviours, :options => { :array => [1,2,3,4] }).should == [@bg3]
78
75
  end
79
76
 
80
77
  it "should find no group when searching for :options => { :array => [4,3,2,1] }" do
81
- Micronaut::World.find(@behaviours, :options => { :array => [4,3,2,1] }).should be_empty
78
+ @world.find(@behaviours, :options => { :array => [4,3,2,1] }).should be_empty
82
79
  end
83
80
 
84
81
  it "should find two groups when searching for :options => { :color => 'blue' }" do
85
- Micronaut::World.find(@behaviours, :options => { :color => 'blue' }).should == [@bg1, @bg3]
82
+ @world.find(@behaviours, :options => { :color => 'blue' }).should == [@bg1, @bg3]
86
83
  end
87
84
 
88
85
  it "should find two groups when searching for :options => { :feature => 'reporting' }" do
89
- Micronaut::World.find(@behaviours, :options => { :feature => 'reporting' }).should == [@bg1, @bg2]
90
- end
91
-
92
- end
93
-
94
- describe "reset" do
95
-
96
- it "should clear the list of behaviour groups" do
97
- original_groups = Micronaut::World.behaviours
98
-
99
- Micronaut::World.behaviours.should_not be_empty
100
- Micronaut::World.reset
101
- Micronaut::World.behaviours.should be_empty
102
-
103
- Micronaut::World.behaviours.concat(original_groups)
86
+ @world.find(@behaviours, :options => { :feature => 'reporting' }).should == [@bg1, @bg2]
104
87
  end
105
88
 
106
89
  end
107
90
 
108
- describe "filter_behaviours_to_run" do
91
+ describe '#filter_behaviours' do
109
92
 
110
- it "does nothing if there are no filters"
111
- # how do you spec this kind of behavior? It feels like we need to be able to create new instances of Micronaut to properly spec
112
- # this kind of thing, so we can mock/stub or interrogate state without affecting the actual running instance.
93
+ it "should return immediately if there are no filters" do
94
+ filters = stub('filters', :any? => false)
95
+ filters.expects(:each).never
96
+ Micronaut.configuration.stubs(:filters).returns(filters)
97
+ Micronaut.world.filter_behaviours
98
+ end
99
+
113
100
  end
114
101
 
115
102
  end
@@ -20,4 +20,20 @@ describe Micronaut do
20
20
 
21
21
  end
22
22
 
23
+ describe "world" do
24
+
25
+ it "should return the Micronaut::World instance the current run is using" do
26
+ Micronaut.world.should be_instance_of(Micronaut::World)
27
+ end
28
+
29
+ end
30
+
31
+ describe "InstallDirectory" do
32
+
33
+ it "should be the expanded version of the install directory" do
34
+ Micronaut::InstallDirectory.should == File.expand_path(File.dirname(__FILE__) + "/../../lib")
35
+ end
36
+
37
+ end
38
+
23
39
  end
@@ -7,9 +7,11 @@ Autotest.add_hook :initialize do |at|
7
7
  at.add_mapping(%r%^examples/.*_example.rb$%) { |filename, _|
8
8
  filename
9
9
  }
10
+
10
11
  at.add_mapping(%r%^lib/(.*)\.rb$%) { |filename, m|
11
12
  ["examples/lib/#{m[1]}_example.rb"]
12
13
  }
14
+
13
15
  at.add_mapping(%r%^examples/(example_helper|shared/.*)\.rb$%) {
14
16
  at.files_matching %r%^examples/.*_example\.rb$%
15
17
  }
@@ -4,7 +4,6 @@ require 'micronaut/expectations'
4
4
  require 'micronaut/world'
5
5
  require 'micronaut/configuration'
6
6
  require 'micronaut/runner'
7
- require 'micronaut/runner_options'
8
7
  require 'micronaut/example'
9
8
  require 'micronaut/behaviour'
10
9
  require 'micronaut/kernel_extensions'
@@ -34,4 +33,8 @@ module Micronaut
34
33
  yield configuration
35
34
  end
36
35
 
36
+ def self.world
37
+ @world ||= Micronaut::World.new
38
+ end
39
+
37
40
  end
@@ -1,10 +1,12 @@
1
1
  module Micronaut
2
2
  class Behaviour
3
3
  include Micronaut::Matchers
4
-
4
+
5
+ attr_accessor :running_example
6
+
5
7
  def self.inherited(klass)
6
8
  super
7
- Micronaut::World.behaviours << klass
9
+ Micronaut.world.behaviours << klass
8
10
  end
9
11
 
10
12
  def self.extended_modules #:nodoc:
@@ -165,6 +167,7 @@ module Micronaut
165
167
  success = true
166
168
 
167
169
  examples_to_run.each do |ex|
170
+ group.running_example = ex
168
171
  reporter.example_started(ex)
169
172
 
170
173
  execution_error = nil
@@ -190,6 +193,7 @@ module Micronaut
190
193
  success &= execution_error.nil?
191
194
  end
192
195
  eval_after_alls(group)
196
+ group.running_example = nil
193
197
  success
194
198
  end
195
199
 
@@ -1,7 +1,7 @@
1
1
  module Micronaut
2
2
 
3
3
  class Configuration
4
- # Destired mocking framework - expects the symbol name of the framework
4
+ # Desired mocking framework - expects the symbol name of the framework
5
5
  # Currently supported: :mocha, :rr, or nothing (the default if this is not set at all)
6
6
  attr_reader :mock_framework
7
7
 
@@ -14,12 +14,14 @@ module Micronaut
14
14
  # Filters allow you to exclude or include certain examples from running based on options you pass in
15
15
  attr_reader :filters
16
16
 
17
- # When this is true, if you have filters enabled and no examples match, all examples are added and run - defaults to true
17
+ # When this is true, if you have filters enabled and no examples match,
18
+ # all examples are added and run - defaults to true
18
19
  attr_accessor :run_all_when_everything_filtered
19
20
 
20
21
  # Enable profiling of the top 10 slowest examples - defaults to false
21
22
  attr_accessor :profile_examples
22
23
 
24
+
23
25
  def initialize
24
26
  @backtrace_clean_patterns = [/\/lib\/ruby\//, /bin\/rcov:/, /vendor\/rails/]
25
27
  @profile_examples = false
@@ -55,16 +57,34 @@ module Micronaut
55
57
  Micronaut::Runner.autorun unless Micronaut::Runner.installed_at_exit?
56
58
  end
57
59
 
58
- def options=(new_options)
59
- raise ArguementError unless new_options.is_a?(Micronaut::RunnerOptions)
60
- @options = new_options
60
+ # Determines whether or not any output should include ANSI color codes,
61
+ # defaults to true
62
+ def color_enabled?
63
+ @color_enabled || true
64
+ end
65
+
66
+ def color_enabled=(on_or_off)
67
+ @color_enabled = on_or_off
61
68
  end
62
69
 
63
- def options
64
- # Do we need this?
65
- @options ||= Micronaut::RunnerOptions.new(:color => true, :formatter => :documentation)
70
+ # The formatter to use. Defaults to the documentation formatter
71
+ def formatter=(formatter_to_use)
72
+ @formatter_to_use = formatter_to_use.to_s
66
73
  end
67
74
 
75
+ def formatter
76
+ @formatter ||= case @formatter_to_use
77
+ when 'documentation'
78
+ Micronaut::Formatters::DocumentationFormatter.new
79
+ else
80
+ Micronaut::Formatters::ProgressFormatter.new
81
+ end
82
+ end
83
+
84
+ def output
85
+ $stdout
86
+ end
87
+
68
88
  def extra_modules
69
89
  @extra_modules ||= []
70
90
  end
@@ -1,17 +1,36 @@
1
1
  module Micronaut
2
2
  module Formatters
3
- # Baseclass for formatters that implements all required methods as no-ops.
3
+
4
4
  class BaseFormatter
5
- attr_accessor :behaviour, :options, :output, :total_example_failed, :total_example_pending
5
+ attr_accessor :behaviour
6
+
7
+ def initialize
8
+ @total_example_failed, @total_example_pending, @behaviour = 0, 0, nil
9
+ end
6
10
 
7
- def initialize(options, output_to)
8
- @options, @output = options, output_to
9
- @total_example_failed, @total_example_pending = 0, 0
11
+ def configuration
12
+ Micronaut.configuration
13
+ end
14
+
15
+ def output
16
+ Micronaut.configuration.output
10
17
  end
11
18
 
12
19
  def profile_examples?
13
20
  Micronaut.configuration.profile_examples
14
21
  end
22
+
23
+ def color_enabled?
24
+ configuration.color_enabled?
25
+ end
26
+
27
+ def total_example_failed
28
+ @total_example_failed
29
+ end
30
+
31
+ def total_example_pending
32
+ @total_example_pending
33
+ end
15
34
 
16
35
  # This method is invoked before any examples are run, right after
17
36
  # they have all been collected. This can be useful for special
@@ -3,20 +3,24 @@ module Micronaut
3
3
  module Formatters
4
4
 
5
5
  class BaseTextFormatter < BaseFormatter
6
- attr_reader :pending_examples, :failed_examples
7
-
8
- def initialize(options, output_to)
9
- super
10
- @pending_examples = []
11
- @failed_examples = []
12
- @example_profiling_info = []
6
+
7
+ def example_profiling_info
8
+ @example_profiling_info ||= []
9
+ end
10
+
11
+ def pending_examples
12
+ @pending_examples ||= []
13
+ end
14
+
15
+ def failed_examples
16
+ @failed_examples ||= []
13
17
  end
14
18
 
15
19
  def example_passed(example)
16
20
  super
17
21
  # Why && @start_time
18
22
  if profile_examples? && @start_time
19
- @example_profiling_info << [example, Time.now - @start_time]
23
+ example_profiling_info << [example, Time.now - @start_time]
20
24
  end
21
25
  end
22
26
 
@@ -25,25 +29,25 @@ module Micronaut
25
29
  end
26
30
 
27
31
  def example_pending(example, message)
28
- @pending_examples << [example, message]
32
+ pending_examples << [example, message]
29
33
  end
30
34
 
31
35
  def example_failed(example, exception)
32
36
  super
33
- @failed_examples << [example, exception]
37
+ failed_examples << [example, exception]
34
38
  end
35
39
 
36
40
  def dump_failures
37
- @output.puts
38
- @failed_examples.each_with_index do |examples_with_exception, index|
41
+ output.puts
42
+ failed_examples.each_with_index do |examples_with_exception, index|
39
43
  example, exception = examples_with_exception.first, examples_with_exception.last
40
44
  padding = ' '
41
- @output.puts "#{index.next}) #{example}"
42
- # @output.puts "#{padding}failing statement: #{read_failed_line(example.options[:caller])}\n"
43
- @output.puts "#{padding}#{colorise(exception.message, exception).strip}"
44
- @output.puts grey("#{padding}# #{format_backtrace(exception.backtrace)}")
45
- @output.puts
46
- @output.flush
45
+ output.puts "#{index.next}) #{example}"
46
+ # output.puts "#{padding}failing statement: #{read_failed_line(example.options[:caller])}\n"
47
+ output.puts "#{padding}#{colorise(exception.message, exception).strip}"
48
+ output.puts grey("#{padding}# #{format_backtrace(exception.backtrace)}")
49
+ output.puts
50
+ output.flush
47
51
  end
48
52
  end
49
53
 
@@ -61,48 +65,53 @@ module Micronaut
61
65
  end
62
66
 
63
67
  def dump_summary(duration, example_count, failure_count, pending_count)
64
- @output.puts "\nFinished in #{duration} seconds\n"
68
+ output.puts "\nFinished in #{duration} seconds\n"
65
69
 
66
- summary = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failure#{'s' unless failure_count == 1}"
70
+ summary = "#{example_count} example#{'s' unless example_count == 1}, #{failure_count} failures"
67
71
  summary << ", #{pending_count} pending" if pending_count > 0
68
72
 
69
73
  if failure_count == 0
70
74
  if pending_count > 0
71
- @output.puts yellow(summary)
75
+ output.puts yellow(summary)
72
76
  else
73
- @output.puts green(summary)
77
+ output.puts green(summary)
74
78
  end
75
79
  else
76
- @output.puts red(summary)
80
+ output.puts red(summary)
77
81
  end
78
82
 
79
83
  if profile_examples?
80
- sorted_examples = @example_profiling_info.sort_by { |desc, time| time }
81
- @output.puts "\nTop 10 slowest examples:\n"
82
- sorted_examples.last(10).reverse.each do |desc, time|
83
- @output.puts " (#{sprintf("%.7f", time)} seconds) #{desc}"
84
- @output.puts grey(" # #{desc.options[:caller]}")
84
+ sorted_examples = example_profiling_info.sort_by { |desc, time| time }.last(5)
85
+ output.puts "\nTop #{sorted_examples.size} slowest examples:\n"
86
+ sorted_examples.reverse.each do |desc, time|
87
+ output.puts " (#{sprintf("%.7f", time)} seconds) #{desc}"
88
+ output.puts grey(" # #{desc.options[:caller]}")
85
89
  end
86
90
  end
87
91
 
88
- @output.flush
92
+ output.flush
89
93
  end
94
+
95
+ # def textmate_link_backtrace(path)
96
+ # file, line = path.split(':')
97
+ # "txmt://open/?url=file://#{File.expand_path(file)}&line=#{line}"
98
+ # end
90
99
 
91
100
  def dump_pending
92
- unless @pending_examples.empty?
93
- @output.puts
94
- @output.puts "Pending:"
95
- @pending_examples.each do |pending_example, message|
96
- @output.puts "\n #{pending_example.behaviour}\n - #{pending_example.description}"
97
- @output.puts grey(" # #{pending_example.options[:caller]}")
101
+ unless pending_examples.empty?
102
+ output.puts
103
+ output.puts "Pending:"
104
+ pending_examples.each do |pending_example, message|
105
+ output.puts "\n #{pending_example.behaviour}\n - #{pending_example.description}"
106
+ output.puts grey(" # #{pending_example.options[:caller]}")
98
107
  end
99
108
  end
100
- @output.flush
109
+ output.flush
101
110
  end
102
111
 
103
112
  def close
104
- if IO === @output && @output != $stdout
105
- @output.close
113
+ if IO === output && output != $stdout
114
+ output.close
106
115
  end
107
116
  end
108
117
 
@@ -114,10 +123,6 @@ module Micronaut
114
123
 
115
124
  protected
116
125
 
117
- def enable_color_in_output?
118
- @options.enable_color_in_output?
119
- end
120
-
121
126
  def backtrace_line(line)
122
127
  return nil if Micronaut.configuration.cleaned_from_backtrace?(line)
123
128
  line.sub!(/\A([^:]+:\d+)$/, '\\1')
@@ -126,7 +131,7 @@ module Micronaut
126
131
  end
127
132
 
128
133
  def color(text, color_code)
129
- return text unless enable_color_in_output?
134
+ return text unless color_enabled?
130
135
  "#{color_code}#{text}\e[0m"
131
136
  end
132
137
 
@@ -5,25 +5,25 @@ module Micronaut
5
5
 
6
6
  def example_failed(example, exception)
7
7
  super
8
- @output.print colorise('F', exception)
9
- @output.flush
8
+ output.print colorise('F', exception)
9
+ output.flush
10
10
  end
11
11
 
12
12
  def example_passed(example)
13
13
  super
14
- @output.print green('.')
15
- @output.flush
14
+ output.print green('.')
15
+ output.flush
16
16
  end
17
17
 
18
18
  def example_pending(example, message)
19
19
  super
20
- @output.print yellow('*')
21
- @output.flush
20
+ output.print yellow('*')
21
+ output.flush
22
22
  end
23
23
 
24
24
  def start_dump
25
- @output.puts
26
- @output.flush
25
+ output.puts
26
+ output.flush
27
27
  end
28
28
 
29
29
  def method_missing(sym, *args)
@@ -10,12 +10,19 @@ module Micronaut
10
10
  at_exit { Micronaut::Runner.new.run(ARGV) ? exit(0) : exit(1) } unless installed_at_exit?
11
11
  @installed_at_exit = true
12
12
  end
13
-
14
- def options
15
- Micronaut.configuration.options
13
+
14
+ def configuration
15
+ Micronaut.configuration
16
16
  end
17
-
17
+
18
+ def formatter
19
+ Micronaut.configuration.formatter
20
+ end
21
+
22
+ # This method takes command line args like examples/**/*_example.rb and
23
+ # uses globbing to grab all the files specified and load them
18
24
  def load_all_behaviours(files_from_args=[])
25
+ # TODO: Make this horrid looking line more readable by at least some humans
19
26
  files_from_args.inject([]) { |files, arg| files.concat(Dir[arg].map { |g| Dir.glob(g) }.flatten) }.each do |file|
20
27
  load file
21
28
  end
@@ -24,29 +31,29 @@ module Micronaut
24
31
  def run(args = [])
25
32
  load_all_behaviours(args)
26
33
 
27
- behaviours_to_run = Micronaut::World.behaviours_to_run
34
+ behaviours_to_run = Micronaut.world.behaviours_to_run
28
35
 
29
36
  total_examples = behaviours_to_run.inject(0) { |sum, b| sum + b.examples_to_run.size }
30
37
 
31
- old_sync, options.formatter.output.sync = options.formatter.output.sync, true if options.formatter.output.respond_to?(:sync=)
38
+ old_sync, formatter.output.sync = formatter.output.sync, true if formatter.output.respond_to?(:sync=)
32
39
 
33
- options.formatter.start(total_examples)
40
+ formatter.start(total_examples)
34
41
 
35
42
  suite_success = true
36
43
 
37
44
  starts_at = Time.now
38
45
  behaviours_to_run.each do |behaviour|
39
- suite_success &= behaviour.run(options.formatter)
46
+ suite_success &= behaviour.run(formatter)
40
47
  end
41
48
  duration = Time.now - starts_at
42
49
 
43
- options.formatter.start_dump
44
- options.formatter.dump_failures
50
+ formatter.start_dump
51
+ formatter.dump_failures
45
52
  # TODO: Stop passing in the last two items, the formatter knows this info
46
- options.formatter.dump_summary(duration, total_examples, options.formatter.failed_examples.size, options.formatter.pending_examples.size)
47
- options.formatter.dump_pending
53
+ formatter.dump_summary(duration, total_examples, formatter.failed_examples.size, formatter.pending_examples.size)
54
+ formatter.dump_pending
48
55
 
49
- options.formatter.output.sync = old_sync if options.formatter.output.respond_to? :sync=
56
+ formatter.output.sync = old_sync if formatter.output.respond_to? :sync=
50
57
 
51
58
  suite_success
52
59
  end
@@ -1,18 +1,12 @@
1
1
  module Micronaut
2
2
 
3
3
  class World
4
-
5
- def self.reset
6
- @behaviours = []
7
- end
8
-
9
- reset
10
-
11
- def self.behaviours
12
- @behaviours
4
+
5
+ def behaviours
6
+ @behaviours ||= []
13
7
  end
14
8
 
15
- def self.behaviours_to_run
9
+ def behaviours_to_run
16
10
  filter_behaviours
17
11
  number_of_behaviours_left = sum_behaviours
18
12
 
@@ -20,30 +14,29 @@ module Micronaut
20
14
  if Micronaut.configuration.filters.empty?
21
15
  add_all_examples
22
16
  elsif Micronaut.configuration.run_all_when_everything_filtered?
23
- puts " Filter(s) produced no matches - running everything"
17
+ puts "Filters produced no matches - running everything"
24
18
  add_all_examples
25
19
  else
26
- puts " Filter(s) matched no specs - your world is empty, desolate, and alone."
20
+ puts "Filters matched no specs - your world is empty, desolate, and alone."
27
21
  end
28
22
  end
29
23
 
30
24
  behaviours
31
25
  end
32
26
 
33
- def self.sum_behaviours
27
+ def sum_behaviours
34
28
  behaviours.inject(0) { |sum, b| sum += b.examples_to_run.size }
35
29
  end
36
30
 
37
- def self.add_all_examples
31
+ def add_all_examples
38
32
  behaviours.each do |behaviour|
39
33
  behaviour.examples_to_run.concat(behaviour.examples)
40
34
  end
41
35
  end
42
36
 
43
- def self.filter_behaviours
37
+ def filter_behaviours
44
38
  return unless Micronaut.configuration.filters.any?
45
39
  Micronaut.configuration.filters.each do |filter|
46
- puts " Run filtered using: #{filter.inspect}"
47
40
  behaviours.each do |behaviour|
48
41
  behaviour.examples_to_run.concat find(behaviour.examples, filter)
49
42
  end
@@ -51,7 +44,7 @@ module Micronaut
51
44
  behaviours
52
45
  end
53
46
 
54
- def self.find(collection, conditions={})
47
+ def find(collection, conditions={})
55
48
  return [] if conditions.empty?
56
49
 
57
50
  collection.select do |item|
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spicycode-micronaut
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4.1
4
+ version: 0.1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chad Humphries
@@ -9,7 +9,7 @@ autorequire: micronaut
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2008-12-18 00:00:00 -08:00
12
+ date: 2008-12-19 00:00:00 -08:00
13
13
  default_executable: micronaut
14
14
  dependencies: []
15
15
 
@@ -74,7 +74,6 @@ files:
74
74
  - lib/micronaut/mocking/with_rr.rb
75
75
  - lib/micronaut/mocking.rb
76
76
  - lib/micronaut/runner.rb
77
- - lib/micronaut/runner_options.rb
78
77
  - lib/micronaut/world.rb
79
78
  - lib/micronaut.rb
80
79
  - examples/example_helper.rb
@@ -113,7 +112,6 @@ files:
113
112
  - examples/lib/micronaut/matchers/simple_matcher_example.rb
114
113
  - examples/lib/micronaut/matchers/throw_symbol_example.rb
115
114
  - examples/lib/micronaut/runner_example.rb
116
- - examples/lib/micronaut/runner_options_example.rb
117
115
  - examples/lib/micronaut/world_example.rb
118
116
  - examples/lib/micronaut_example.rb
119
117
  - examples/resources
@@ -1,5 +0,0 @@
1
- require File.expand_path(File.dirname(__FILE__) + "/../../example_helper")
2
-
3
- describe Micronaut::RunnerOptions do
4
-
5
- end
@@ -1,33 +0,0 @@
1
- module Micronaut
2
- class RunnerOptions
3
-
4
- attr_accessor :color, :formatter
5
-
6
- def initialize(options={})
7
- @color = options.delete(:color)
8
- @formatter = options.delete(:formatter)
9
- end
10
-
11
- def enable_color_in_output?
12
- !textmate? && @color
13
- end
14
-
15
- def textmate?
16
- ENV.has_key?('TM_RUBY')
17
- end
18
-
19
- def output
20
- $stdout
21
- end
22
-
23
- def formatter
24
- @formatter_instance ||= case @formatter.to_s
25
- when 'documentation'
26
- Micronaut::Formatters::DocumentationFormatter.new(self, output)
27
- else
28
- Micronaut::Formatters::ProgressFormatter.new(self, output)
29
- end
30
- end
31
-
32
- end
33
- end