minitest_owrapper 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +75 -0
- data/lib/macruby_test_result.rb +93 -0
- data/lib/minitest_owrapper.rb +32 -0
- data/lib/minitest_owrapper/version.rb +3 -0
- data/test/test_minitest_owrapper.rb +43 -0
- metadata +85 -0
data/README.rdoc
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
== Overview
|
2
|
+
|
3
|
+
With ruby or macruby testunit or minitest, results are damnly tied to output and you can't get result of a test as an object after
|
4
|
+
its execution and global tests result as an object too.
|
5
|
+
|
6
|
+
This gem permit to do so, and, have result of a unit test as an TestResult object on which you can call methods
|
7
|
+
#success? #failures #errors #skips #current ...
|
8
|
+
You can be yielded this TestResult object after each test and the global TestResult after all tests.
|
9
|
+
|
10
|
+
|
11
|
+
Note : For now it just work with macruby interpreter and minitest or testunit tests.
|
12
|
+
It is really easy to evolve it for ruby interpreter.
|
13
|
+
It will be done soon.
|
14
|
+
|
15
|
+
== Installation
|
16
|
+
|
17
|
+
gem install minitest_owrapper
|
18
|
+
|
19
|
+
|
20
|
+
== Usage
|
21
|
+
|
22
|
+
Suppose :
|
23
|
+
- @test_file is the absolute path to your test file.
|
24
|
+
- load_path is the load path needed for your path (-I option)
|
25
|
+
|
26
|
+
Just do :
|
27
|
+
|
28
|
+
result = MinitestOwrapper.run(@test_file, load_path) do |test_result|
|
29
|
+
puts test_result.current
|
30
|
+
end
|
31
|
+
|
32
|
+
And, you will get a test_result after each test, ie an object of class Failure, Error, Skip or Success.
|
33
|
+
These objects respond to methods :klass, :method, :line, :message.
|
34
|
+
|
35
|
+
The final result will respond to
|
36
|
+
:errors => array of errors
|
37
|
+
:failures => array of failures
|
38
|
+
:skips => array of skips
|
39
|
+
:successes => array of success
|
40
|
+
:tests => number of tests
|
41
|
+
:duration => duration of the tests
|
42
|
+
:assertions => number of assertions
|
43
|
+
|
44
|
+
Example of usage in the test file test/test_minitest_owrapper.rb
|
45
|
+
|
46
|
+
it 'should run FakeTest and get TestResult object whith 2 failure, 1 error, 1 success, 1 skip ' do
|
47
|
+
load_path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures'))
|
48
|
+
|
49
|
+
result = MinitestOwrapper.run(@test_file, load_path) do |test_result|
|
50
|
+
puts test_result.current
|
51
|
+
end
|
52
|
+
|
53
|
+
assert_equal 1, result.errors.count
|
54
|
+
assert_equal 2, result.failures.count
|
55
|
+
assert_equal 1, result.skips.count
|
56
|
+
assert_equal 1, result.successes.count
|
57
|
+
|
58
|
+
assert_equal 5, result.tests
|
59
|
+
assert_in_delta result.duration, 1, 1
|
60
|
+
assert_equal 4, result.assertions
|
61
|
+
end
|
62
|
+
|
63
|
+
|
64
|
+
== Dependencies
|
65
|
+
|
66
|
+
minitest
|
67
|
+
|
68
|
+
== TO-DOs
|
69
|
+
|
70
|
+
Adapt to work with ruby interpreter.
|
71
|
+
|
72
|
+
|
73
|
+
== Licence
|
74
|
+
|
75
|
+
MIT Licence
|
@@ -0,0 +1,93 @@
|
|
1
|
+
module MinitestOwrapper
|
2
|
+
|
3
|
+
class AssertionStatus
|
4
|
+
attr_accessor :klass, :method, :line, :message
|
5
|
+
|
6
|
+
def initialize args={}
|
7
|
+
@klass = args[:klass]
|
8
|
+
@method = args[:method]
|
9
|
+
@line = args[:line]
|
10
|
+
@message = args[:message]
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
|
15
|
+
class Failure < AssertionStatus
|
16
|
+
end
|
17
|
+
|
18
|
+
class Error < AssertionStatus
|
19
|
+
end
|
20
|
+
|
21
|
+
class Skip < AssertionStatus
|
22
|
+
end
|
23
|
+
|
24
|
+
class Success < AssertionStatus
|
25
|
+
end
|
26
|
+
|
27
|
+
class TestResult
|
28
|
+
|
29
|
+
attr_reader :skips, :failures, :errors, :successes
|
30
|
+
attr_accessor :assertions
|
31
|
+
|
32
|
+
def initialize
|
33
|
+
@skips = []
|
34
|
+
@failures = []
|
35
|
+
@errors = []
|
36
|
+
@successes = []
|
37
|
+
@time = 0
|
38
|
+
@assertions = 0
|
39
|
+
end
|
40
|
+
|
41
|
+
def current
|
42
|
+
case
|
43
|
+
when @skip then @skips.last
|
44
|
+
when @fail then @failures.last
|
45
|
+
when @error then @errors.last
|
46
|
+
else Success.new
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def start
|
51
|
+
@start = Time.now
|
52
|
+
end
|
53
|
+
|
54
|
+
def stop
|
55
|
+
@time = Time.now - @start
|
56
|
+
end
|
57
|
+
|
58
|
+
def success?
|
59
|
+
not (@skip || @fail || @error)
|
60
|
+
end
|
61
|
+
|
62
|
+
def reset
|
63
|
+
@successes << Success.new if success?
|
64
|
+
@skip = @fail = @error = false
|
65
|
+
end
|
66
|
+
|
67
|
+
def tests
|
68
|
+
[skips, failures, errors, successes].inject(0){|total, assertions| total += assertions.count }
|
69
|
+
end
|
70
|
+
|
71
|
+
def duration
|
72
|
+
@time
|
73
|
+
end
|
74
|
+
|
75
|
+
def puke klass, method, e
|
76
|
+
line = MiniTest::Unit.new.location(e)
|
77
|
+
case e
|
78
|
+
when MiniTest::Skip then
|
79
|
+
@skips << Skip.new(:klass => klass, :method => method, :line => line, :message => e.message)
|
80
|
+
@skip = true
|
81
|
+
when MiniTest::Assertion then
|
82
|
+
@failures << Failure.new(:klass => klass, :method => method, :line => line, :message => e.message)
|
83
|
+
@fail = true
|
84
|
+
else
|
85
|
+
bt = MiniTest::filter_backtrace(e.backtrace).join("\n ")
|
86
|
+
message = "#{e.class}: #{e.message}\n #{bt}"
|
87
|
+
@errors << Error.new(:klass => klass, :method => method, :line => line, :message => e.message)
|
88
|
+
@error = true
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
end
|
93
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'macruby_test_result'
|
2
|
+
|
3
|
+
module MinitestOwrapper
|
4
|
+
|
5
|
+
def self.run test_file, load_path='', &block
|
6
|
+
load_path.split(":").each{ |path| $: << path }
|
7
|
+
code = File.new(test_file).read
|
8
|
+
test_result = TestResult.new
|
9
|
+
|
10
|
+
injection = %q{
|
11
|
+
test_result.start
|
12
|
+
klass = self.const_get(test_klass_name(code))
|
13
|
+
klass.instance_methods.grep(/^test_/).each do |method|
|
14
|
+
runner = klass.new(method)
|
15
|
+
runner.run(test_result)
|
16
|
+
block.call(test_result) if block
|
17
|
+
test_result.assertions += runner._assertions
|
18
|
+
test_result.reset
|
19
|
+
end
|
20
|
+
test_result.stop
|
21
|
+
test_result
|
22
|
+
}
|
23
|
+
eval(code + injection)
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.test_klass_name content
|
27
|
+
content.match /class\s*(.*?)\s*</
|
28
|
+
$1
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,43 @@
|
|
1
|
+
# Tested with macruby => eval() is macruby eval()
|
2
|
+
# So TestResult implements macruby minitest test result interface (#puke)
|
3
|
+
# ENV['RUBY'] = 'MACRUBY'
|
4
|
+
# ENV['MACRUBY_TESTING'] = '1'
|
5
|
+
|
6
|
+
require "minitest/autorun"
|
7
|
+
require 'minitest_owrapper'
|
8
|
+
|
9
|
+
class TestMinitestOwrapper < MiniTest::Unit::TestCase
|
10
|
+
|
11
|
+
describe MinitestOwrapper do
|
12
|
+
|
13
|
+
before do
|
14
|
+
@test_file = File.join(File.dirname(__FILE__), '../fixtures/fake_test.rb')
|
15
|
+
end
|
16
|
+
|
17
|
+
it 'should get klass name of test from file content' do
|
18
|
+
code = File.new(@test_file).read
|
19
|
+
klass_name = MinitestOwrapper.test_klass_name(code)
|
20
|
+
|
21
|
+
assert_equal 'FakeTest', klass_name
|
22
|
+
end
|
23
|
+
|
24
|
+
it 'should run FakeTest and get TestResult object whith 2 failure, 1 error, 1 success, 1 skip ' do
|
25
|
+
load_path = File.expand_path(File.join(File.dirname(__FILE__), '../fixtures'))
|
26
|
+
|
27
|
+
result = MinitestOwrapper.run(@test_file, load_path) do |test_result|
|
28
|
+
puts test_result.current
|
29
|
+
end
|
30
|
+
|
31
|
+
assert_equal 1, result.errors.count
|
32
|
+
assert_equal 2, result.failures.count
|
33
|
+
assert_equal 1, result.skips.count
|
34
|
+
assert_equal 1, result.successes.count
|
35
|
+
|
36
|
+
assert_equal 5, result.tests
|
37
|
+
assert_in_delta result.duration, 1, 1
|
38
|
+
assert_equal 4, result.assertions
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
metadata
ADDED
@@ -0,0 +1,85 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: minitest_owrapper
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 29
|
5
|
+
prerelease: false
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
|
+
platform: ruby
|
12
|
+
authors:
|
13
|
+
- Philippe Cantin
|
14
|
+
autorequire:
|
15
|
+
bindir: bin
|
16
|
+
cert_chain: []
|
17
|
+
|
18
|
+
date: 2011-05-09 00:00:00 +02:00
|
19
|
+
default_executable:
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: minitest
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 3
|
30
|
+
segments:
|
31
|
+
- 0
|
32
|
+
version: "0"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: " With ruby or macruby test unit or minitest, results are damnly tied to output and you can't get result\n of a test as an object after its execution and global tests result as an object too.\n This gem permit to do so, and, have result of a unit test (with minitest testunit and macruby for now but can easily be evolved\n with ruby. See usage on github repository)\n "
|
36
|
+
email:
|
37
|
+
- anoiaque@gmail.com
|
38
|
+
executables: []
|
39
|
+
|
40
|
+
extensions: []
|
41
|
+
|
42
|
+
extra_rdoc_files:
|
43
|
+
- README.rdoc
|
44
|
+
files:
|
45
|
+
- lib/macruby_test_result.rb
|
46
|
+
- lib/minitest_owrapper/version.rb
|
47
|
+
- lib/minitest_owrapper.rb
|
48
|
+
- README.rdoc
|
49
|
+
- test/test_minitest_owrapper.rb
|
50
|
+
has_rdoc: true
|
51
|
+
homepage: https://github.com/anoiaque/minitest_owrapper
|
52
|
+
licenses: []
|
53
|
+
|
54
|
+
post_install_message:
|
55
|
+
rdoc_options: []
|
56
|
+
|
57
|
+
require_paths:
|
58
|
+
- lib
|
59
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
none: false
|
61
|
+
requirements:
|
62
|
+
- - ">="
|
63
|
+
- !ruby/object:Gem::Version
|
64
|
+
hash: 3
|
65
|
+
segments:
|
66
|
+
- 0
|
67
|
+
version: "0"
|
68
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
69
|
+
none: false
|
70
|
+
requirements:
|
71
|
+
- - ">="
|
72
|
+
- !ruby/object:Gem::Version
|
73
|
+
hash: 3
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
requirements: []
|
78
|
+
|
79
|
+
rubyforge_project: minitest_owrapper
|
80
|
+
rubygems_version: 1.3.7
|
81
|
+
signing_key:
|
82
|
+
specification_version: 3
|
83
|
+
summary: Get tests results as a TestResult object instead tied to output
|
84
|
+
test_files:
|
85
|
+
- test/test_minitest_owrapper.rb
|