spicycode-micronaut 0.1.8.2 → 0.1.8.3
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/README.markdown +16 -0
- data/Rakefile +14 -25
- data/examples/example_helper.rb +12 -3
- data/examples/lib/micronaut/behaviour_example.rb +3 -3
- data/examples/lib/micronaut/kernel_extensions_example.rb +2 -2
- data/examples/lib/micronaut/matchers/have_example.rb +41 -43
- data/lib/autotest/micronaut.rb +2 -3
- data/lib/micronaut.rb +1 -1
- data/lib/micronaut/behaviour.rb +4 -4
- data/lib/micronaut/expectations/extensions/object.rb +1 -1
- data/lib/micronaut/expectations/wrap_expectation.rb +0 -5
- data/lib/micronaut/formatters/base_formatter.rb +2 -2
- data/lib/micronaut/rake_task.rb +84 -0
- data/lib/micronaut/runner.rb +3 -1
- metadata +3 -2
data/README.markdown
CHANGED
@@ -39,6 +39,22 @@ Micronaut is a light-weight BDD test framework.
|
|
39
39
|
|
40
40
|
* Designed to be formatter compatible with RSpec (though this needs some real-world testing)
|
41
41
|
|
42
|
+
* Rake task for simple setup
|
43
|
+
|
44
|
+
require 'rubygems'
|
45
|
+
require 'micronaut/rake_task'
|
46
|
+
|
47
|
+
desc "Run all micronaut examples"
|
48
|
+
Micronaut::RakeTask.new :examples do |t|
|
49
|
+
t.pattern = "examples/**/*_example.rb"
|
50
|
+
end
|
51
|
+
|
52
|
+
desc "Run all micronaut examples using rcov"
|
53
|
+
Micronaut::RakeTask.new :coverage do |t|
|
54
|
+
t.pattern = "examples/**/*_example.rb"
|
55
|
+
t.rcov = true
|
56
|
+
t.rcov_opts = "--exclude \"examples/*,gems/*,db/*,/Library/Ruby/*,config/*\" --text-summary --sort coverage --no-validator-links"
|
57
|
+
end
|
42
58
|
## REQUIREMENTS:
|
43
59
|
|
44
60
|
+ Ruby 1.8.6+
|
data/Rakefile
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'rake/gempackagetask'
|
3
3
|
require 'rubygems/specification'
|
4
|
+
require 'lib/micronaut/rake_task'
|
4
5
|
|
5
6
|
GEM = "micronaut"
|
6
|
-
GEM_VERSION = "0.1.8.
|
7
|
+
GEM_VERSION = "0.1.8.3"
|
7
8
|
AUTHOR = "Chad Humphries"
|
8
9
|
EMAIL = "chad@spicycode.com"
|
9
10
|
HOMEPAGE = "http://github.com/spicycode/micronaut"
|
@@ -44,12 +45,6 @@ task :make_gemspec do
|
|
44
45
|
end
|
45
46
|
end
|
46
47
|
|
47
|
-
desc 'Run all examples'
|
48
|
-
task :examples do
|
49
|
-
examples = Dir["examples/**/*_example.rb"].map { |g| Dir.glob(g) }.flatten
|
50
|
-
ruby examples.join(" ")
|
51
|
-
end
|
52
|
-
|
53
48
|
desc "List files that don't have examples"
|
54
49
|
task :untested do
|
55
50
|
code = Dir["lib/**/*.rb"].map { |g| Dir.glob(g) }.flatten
|
@@ -61,26 +56,20 @@ task :untested do
|
|
61
56
|
end
|
62
57
|
end
|
63
58
|
|
64
|
-
desc "Run all examples
|
65
|
-
|
66
|
-
|
67
|
-
result = system "rcov --exclude \"examples/*,gems/*,db/*,/Library/Ruby/*,config/*\" --text-summary --sort coverage --no-validator-links #{examples.join(' ')}"
|
68
|
-
fail_build unless result
|
59
|
+
desc "Run all micronaut examples"
|
60
|
+
Micronaut::RakeTask.new :examples do |t|
|
61
|
+
t.pattern = "examples/**/*_example.rb"
|
69
62
|
end
|
70
63
|
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
64
|
+
namespace :examples do
|
65
|
+
|
66
|
+
desc "Run all micronaut examples using rcov"
|
67
|
+
Micronaut::RakeTask.new :coverage do |t|
|
68
|
+
t.pattern = "examples/**/*_example.rb"
|
69
|
+
t.rcov = true
|
70
|
+
t.rcov_opts = "--exclude \"examples/*,gems/*,db/*,/Library/Ruby/*,config/*\" --text-summary --sort coverage --no-validator-links"
|
71
|
+
end
|
78
72
|
|
79
|
-
desc "Delete coverage artifacts"
|
80
|
-
task :clean_coverage do
|
81
|
-
rm_rf Dir["coverage/**/*"]
|
82
73
|
end
|
83
74
|
|
84
|
-
|
85
|
-
task :default => 'coverage'
|
86
|
-
task :clobber_package => 'clean_coverage'
|
75
|
+
task :default => 'examples:coverage'
|
data/examples/example_helper.rb
CHANGED
@@ -7,7 +7,7 @@ gem :mocha
|
|
7
7
|
|
8
8
|
require File.expand_path(File.dirname(__FILE__) + "/resources/example_classes")
|
9
9
|
|
10
|
-
module Micronaut
|
10
|
+
module Micronaut
|
11
11
|
module Matchers
|
12
12
|
def fail
|
13
13
|
raise_error(::Micronaut::Expectations::ExpectationNotMetError)
|
@@ -19,12 +19,21 @@ module Micronaut
|
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
def with_ruby(version)
|
23
|
+
yield if RUBY_PLATFORM =~ Regexp.compile("^#{version}")
|
24
|
+
end
|
25
|
+
|
22
26
|
def remove_last_describe_from_world
|
23
27
|
Micronaut.world.behaviours.pop
|
24
28
|
end
|
25
29
|
|
30
|
+
def not_in_editor?
|
31
|
+
['TM_MODE', 'EMACS', 'VIM'].all? { |k| !ENV.has_key?(k) }
|
32
|
+
end
|
33
|
+
|
26
34
|
Micronaut.configure do |c|
|
35
|
+
#c.formatter = :documentation
|
27
36
|
c.mock_with :mocha
|
28
|
-
c.color_enabled =
|
37
|
+
c.color_enabled = not_in_editor?
|
29
38
|
c.filter_run :focused => true
|
30
|
-
end
|
39
|
+
end
|
@@ -60,7 +60,7 @@ describe Micronaut::Behaviour do
|
|
60
60
|
end
|
61
61
|
|
62
62
|
it "should add the caller to metadata" do
|
63
|
-
Micronaut::Behaviour.describe(Object) { }.metadata[:behaviour][:caller].should
|
63
|
+
Micronaut::Behaviour.describe(Object) { }.metadata[:behaviour][:caller].should include("#{__FILE__}:#{__LINE__}")
|
64
64
|
end
|
65
65
|
|
66
66
|
it "should add the the file_path to metadata" do
|
@@ -78,7 +78,7 @@ describe Micronaut::Behaviour do
|
|
78
78
|
it "should add file path and line number metadata for arbitrarily nested describes" do
|
79
79
|
Micronaut::Behaviour.describe(Object) do
|
80
80
|
Micronaut::Behaviour.describe("foo") do
|
81
|
-
Micronaut::Behaviour.describe(Object) { }.metadata[:behaviour][:
|
81
|
+
Micronaut::Behaviour.describe(Object) { }.metadata[:behaviour][:file_path].should == __FILE__
|
82
82
|
Micronaut::Behaviour.describe(Object) { }.metadata[:behaviour][:line_number].should == __LINE__
|
83
83
|
end
|
84
84
|
end
|
@@ -216,4 +216,4 @@ describe Micronaut::Behaviour do
|
|
216
216
|
|
217
217
|
end
|
218
218
|
|
219
|
-
end
|
219
|
+
end
|
@@ -345,50 +345,48 @@ EOF
|
|
345
345
|
end
|
346
346
|
end
|
347
347
|
|
348
|
-
|
349
|
-
|
350
|
-
|
351
|
-
|
352
|
-
|
353
|
-
|
354
|
-
|
355
|
-
# with_ruby '1.9' do
|
356
|
-
# Have.private_instance_methods.should include(:method_missing)
|
357
|
-
# end
|
358
|
-
end
|
359
|
-
|
360
|
-
describe "respond_to?" do
|
361
|
-
before :each do
|
362
|
-
@have = Have.new(:foo)
|
363
|
-
@a_method_which_have_defines = Have.instance_methods.first
|
364
|
-
@a_method_which_object_defines = Object.instance_methods.first
|
365
|
-
end
|
366
|
-
|
367
|
-
it "should be true for a method which Have defines" do
|
368
|
-
@have.should respond_to(@a_method_which_have_defines)
|
369
|
-
end
|
370
|
-
|
371
|
-
it "should be true for a method that it's superclass (Object) defines" do
|
372
|
-
@have.should respond_to(@a_method_which_object_defines)
|
373
|
-
end
|
374
|
-
|
375
|
-
it "should be false for a method which neither Object nor nor Have defines" do
|
376
|
-
@have.should_not respond_to(:foo_bar_baz)
|
377
|
-
end
|
378
|
-
|
379
|
-
it "should be false if the owner doesn't respond to the method" do
|
380
|
-
have = Have.new(99)
|
381
|
-
have.should_not respond_to(:problems)
|
382
|
-
end
|
383
|
-
|
384
|
-
it "should be true if the owner responds to the method" do
|
385
|
-
have = Have.new(:a_symbol)
|
386
|
-
have.should respond_to(:to_sym)
|
387
|
-
end
|
388
|
-
end
|
348
|
+
describe Micronaut::Matchers::Have do
|
349
|
+
it "should have method_missing as private" do
|
350
|
+
with_ruby '1.8' do
|
351
|
+
Micronaut::Matchers::Have.private_instance_methods.should include("method_missing")
|
352
|
+
end
|
353
|
+
with_ruby '1.9' do
|
354
|
+
Have.private_instance_methods.should include(:method_missing)
|
389
355
|
end
|
390
356
|
end
|
391
357
|
|
392
|
-
|
358
|
+
describe "respond_to?" do
|
359
|
+
|
360
|
+
before do
|
361
|
+
@have = Micronaut::Matchers::Have.new(:foo)
|
362
|
+
@a_method_which_have_defines = Micronaut::Matchers::Have.instance_methods.first
|
363
|
+
@a_method_which_object_defines = Object.instance_methods.first
|
364
|
+
end
|
365
|
+
|
366
|
+
it "should be true for a method which Have defines" do
|
367
|
+
@have.should respond_to(@a_method_which_have_defines)
|
368
|
+
end
|
369
|
+
|
370
|
+
it "should be true for a method that it's superclass (Object) defines" do
|
371
|
+
@have.should respond_to(@a_method_which_object_defines)
|
372
|
+
end
|
373
|
+
|
374
|
+
it "should be false for a method which neither Object nor nor Have defines" do
|
375
|
+
@have.should_not respond_to(:foo_bar_baz)
|
376
|
+
end
|
377
|
+
|
378
|
+
it "should be false if the owner doesn't respond to the method" do
|
379
|
+
have = Micronaut::Matchers::Have.new(99)
|
380
|
+
have.should_not respond_to(:problems)
|
381
|
+
end
|
382
|
+
|
383
|
+
it "should be true if the owner responds to the method" do
|
384
|
+
have = Micronaut::Matchers::Have.new(:a_symbol)
|
385
|
+
have.should respond_to(:to_sym)
|
386
|
+
end
|
387
|
+
|
388
|
+
end
|
393
389
|
|
394
|
-
end
|
390
|
+
end
|
391
|
+
|
392
|
+
end
|
data/lib/autotest/micronaut.rb
CHANGED
@@ -2,8 +2,7 @@ require 'autotest'
|
|
2
2
|
|
3
3
|
Autotest.add_hook :initialize do |at|
|
4
4
|
at.clear_mappings
|
5
|
-
|
6
|
-
# %r(/) != /\//
|
5
|
+
|
7
6
|
at.add_mapping(%r%^examples/.*_example.rb$%) { |filename, _|
|
8
7
|
filename
|
9
8
|
}
|
@@ -39,7 +38,7 @@ class Autotest::Micronaut < Autotest
|
|
39
38
|
|
40
39
|
def make_test_cmd(files_to_test)
|
41
40
|
return '' if files_to_test.size == 0
|
42
|
-
"bin/micronaut #{files_to_test.keys.join(' ')}"
|
41
|
+
"bin/micronaut #{files_to_test.keys.sort.join(' ')}"
|
43
42
|
end
|
44
43
|
|
45
44
|
end
|
data/lib/micronaut.rb
CHANGED
data/lib/micronaut/behaviour.rb
CHANGED
@@ -85,9 +85,9 @@ module Micronaut
|
|
85
85
|
@metadata[:behaviour][:description] = args.shift || ''
|
86
86
|
@metadata[:behaviour][:name] = "#{describes} #{description}".strip
|
87
87
|
@metadata[:behaviour][:block] = extra_metadata.delete(:behaviour_block)
|
88
|
-
@metadata[:behaviour][:caller] =
|
89
|
-
@metadata[:behaviour][:file_path] = @metadata[:behaviour][:caller].split(":")[0].strip
|
90
|
-
@metadata[:behaviour][:line_number] = @metadata[:behaviour][:caller].split(":")[1].to_i
|
88
|
+
@metadata[:behaviour][:caller] = caller(1)
|
89
|
+
@metadata[:behaviour][:file_path] = @metadata[:behaviour][:caller][4].split(":")[0].strip
|
90
|
+
@metadata[:behaviour][:line_number] = @metadata[:behaviour][:caller][4].split(":")[1].to_i
|
91
91
|
|
92
92
|
@metadata.update(extra_metadata)
|
93
93
|
|
@@ -243,4 +243,4 @@ module Micronaut
|
|
243
243
|
end
|
244
244
|
|
245
245
|
end
|
246
|
-
end
|
246
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module Micronaut
|
2
2
|
module Expectations
|
3
|
-
#
|
3
|
+
# We add #should and #should_not to every Object (and, implicitly, every Class).
|
4
4
|
module ObjectExpectations
|
5
5
|
# :call-seq:
|
6
6
|
# should(matcher)
|
@@ -27,11 +27,6 @@ module Micronaut
|
|
27
27
|
# end
|
28
28
|
# end
|
29
29
|
#
|
30
|
-
# You might be wondering "why would I do this if I could just say"
|
31
|
-
# assert_eats_cheese?", a fair question, indeed. You might prefer
|
32
|
-
# to replace the word assert with something more aligned with the
|
33
|
-
# rest of your code examples. You are using rspec, after all.
|
34
|
-
#
|
35
30
|
# The other benefit you get is that you can use the negative version
|
36
31
|
# of the matcher:
|
37
32
|
#
|
@@ -118,7 +118,7 @@ module Micronaut
|
|
118
118
|
|
119
119
|
cleansed = backtrace.select { |line| backtrace_line(line) }
|
120
120
|
# Kick the describe stack info off the list, just keep the line the problem happened on from that file
|
121
|
-
cleansed = cleansed.detect { |line| line.split(':').first == example.metadata[:caller].split(':').first } if cleansed.size > 1
|
121
|
+
cleansed = [cleansed.detect { |line| line.split(':').first == example.metadata[:caller].split(':').first }] if cleansed.size > 1
|
122
122
|
cleansed.empty? ? backtrace : cleansed
|
123
123
|
end
|
124
124
|
|
@@ -148,4 +148,4 @@ module Micronaut
|
|
148
148
|
end
|
149
149
|
|
150
150
|
end
|
151
|
-
end
|
151
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rake'
|
4
|
+
require 'rake/tasklib'
|
5
|
+
|
6
|
+
module Micronaut
|
7
|
+
|
8
|
+
class RakeTask < ::Rake::TaskLib
|
9
|
+
|
10
|
+
# Name of task. (default is :examples)
|
11
|
+
attr_accessor :name
|
12
|
+
|
13
|
+
# If true, requests that the specs be run with the warning flag set.
|
14
|
+
# E.g. warning=true implies "ruby -w" used to run the specs. Defaults to false.
|
15
|
+
attr_accessor :warning
|
16
|
+
|
17
|
+
# Glob pattern to match example files. (default is 'examples/**/*_example.rb')
|
18
|
+
attr_accessor :pattern
|
19
|
+
|
20
|
+
# Array of commandline options to pass to ruby. Defaults to [].
|
21
|
+
attr_accessor :ruby_opts
|
22
|
+
|
23
|
+
# Whether or not to fail Rake when an error occurs (typically when examples fail).
|
24
|
+
# Defaults to true.
|
25
|
+
attr_accessor :fail_on_error
|
26
|
+
|
27
|
+
# A message to print to stderr when there are failures.
|
28
|
+
attr_accessor :failure_message
|
29
|
+
|
30
|
+
# Use verbose output. If this is set to true, the task will print
|
31
|
+
# the executed spec command to stdout. Defaults to false.
|
32
|
+
attr_accessor :verbose
|
33
|
+
|
34
|
+
# Use rcov for code coverage? defaults to false
|
35
|
+
attr_accessor :rcov
|
36
|
+
|
37
|
+
# The options to pass to rcov. Defaults to blank
|
38
|
+
attr_accessor :rcov_opts
|
39
|
+
|
40
|
+
def initialize(*args)
|
41
|
+
@name = args.shift || :examples
|
42
|
+
@pattern, @rcov_opts = nil, nil
|
43
|
+
@warning, @rcov = false, false
|
44
|
+
@ruby_opts = []
|
45
|
+
@fail_on_error = true
|
46
|
+
|
47
|
+
yield self if block_given?
|
48
|
+
@pattern ||= 'examples/**/*_example.rb'
|
49
|
+
define
|
50
|
+
end
|
51
|
+
|
52
|
+
def define # :nodoc:
|
53
|
+
actual_name = Hash === name ? name.keys.first : name
|
54
|
+
desc("Run all examples") unless ::Rake.application.last_comment
|
55
|
+
|
56
|
+
task name do
|
57
|
+
RakeFileUtils.verbose(verbose) do
|
58
|
+
if examples_to_run.empty?
|
59
|
+
puts "No examples matching #{pattern} could be found"
|
60
|
+
else
|
61
|
+
cmd_parts = [rcov ? 'rcov' : RUBY]
|
62
|
+
cmd_parts += rcov ? [rcov_opts] : ruby_opts
|
63
|
+
cmd_parts << "-w" if warning
|
64
|
+
cmd_parts += examples_to_run.collect { |fn| %["#{fn}"] }
|
65
|
+
cmd = cmd_parts.join(" ")
|
66
|
+
puts cmd if verbose
|
67
|
+
unless system(cmd)
|
68
|
+
STDERR.puts failure_message if failure_message
|
69
|
+
raise("Command #{cmd} failed") if fail_on_error
|
70
|
+
end
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
78
|
+
def examples_to_run # :nodoc:
|
79
|
+
FileList[ pattern ].to_a
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
|
84
|
+
end
|
data/lib/micronaut/runner.rb
CHANGED
@@ -38,9 +38,11 @@ module Micronaut
|
|
38
38
|
|
39
39
|
formatter.start(total_examples_to_run) # start the clock
|
40
40
|
start = Time.now
|
41
|
+
|
41
42
|
Micronaut.world.behaviours_to_run.each do |behaviour|
|
42
43
|
suite_success &= behaviour.run(formatter)
|
43
44
|
end
|
45
|
+
|
44
46
|
formatter.start_dump(Time.now - start)
|
45
47
|
|
46
48
|
formatter.dump_failures
|
@@ -55,4 +57,4 @@ module Micronaut
|
|
55
57
|
|
56
58
|
end
|
57
59
|
|
58
|
-
end
|
60
|
+
end
|
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.8.
|
4
|
+
version: 0.1.8.3
|
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:
|
12
|
+
date: 2009-01-03 00:00:00 -08:00
|
13
13
|
default_executable: micronaut
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -72,6 +72,7 @@ files:
|
|
72
72
|
- lib/micronaut/mocking/with_absolutely_nothing.rb
|
73
73
|
- lib/micronaut/mocking/with_mocha.rb
|
74
74
|
- lib/micronaut/mocking/with_rr.rb
|
75
|
+
- lib/micronaut/rake_task.rb
|
75
76
|
- lib/micronaut/runner.rb
|
76
77
|
- lib/micronaut/world.rb
|
77
78
|
- lib/micronaut.rb
|