openlogic-turn 0.8.2

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/History.txt ADDED
@@ -0,0 +1,54 @@
1
+ == 0.8.1 / 2010-09-10
2
+ * Fix misspelling of "raised" which prevented proper recording of errors.
3
+ * Fix IsoRunner so it passes error, not just error message.
4
+
5
+ == 0.8.0 / 2010-06-02
6
+ * Mintest support
7
+ * Two new reporters
8
+
9
+ == 0.7.1 / 2009-12-25
10
+ * Copied String#tab from Facets.
11
+ * Facets is no longer needed as direct dependency.
12
+
13
+ == 0.7.0 / 2009-10-13
14
+ * Fix typo and potential bug.
15
+ * Running ruby with /usr/bin/env for portability
16
+ * Adding --name=PATTERN for test name filtering
17
+ * ANSI class is all caps
18
+
19
+ == 0.6.3 / 2009-10-12
20
+ * Fixing require statements
21
+
22
+ == 0.6.2 / 2009-10-07
23
+ * Detecting rails environment and adjusting output accordingly
24
+ * Colorizing the filename
25
+
26
+ == 0.6.1 / 2009-08-26
27
+ * Switched ANSI color support to ANSI project.
28
+
29
+ == 0.6.0 / 2009-05-30
30
+ * Testrunner @io renamed to @output for test/unit 2.
31
+
32
+ == 0.5.1 / 2009-03-25
33
+ * fixed a "convert nil into String" error
34
+
35
+ == 0.4.0 / 2008-09-18
36
+ * add solo and cross runners
37
+ * move Colorize into separate file
38
+ * use ::ANSICode instead of ::Console::ANSICode
39
+
40
+ == 0.3.0 / 2007-12-11
41
+ * color highlighting now works (need facets-2.0 library)
42
+
43
+ == 0.2.0 / 2006-11-26
44
+ * add the "turn" executable
45
+ * fixed warnings
46
+
47
+ == 0.1.2 / 2006-11-13
48
+ * added some instructions for using the package
49
+
50
+ == 0.1.1 / 2006-11-10
51
+ * removed explicit dependency on the 'hoe' gem
52
+
53
+ == 0.1.0 / 2006-11-10
54
+ * initial release
data/README.txt ADDED
@@ -0,0 +1,116 @@
1
+ = TURN - Test::Unit Reporter (New)
2
+ by Tim Pease
3
+ http://codeforpeople.rubyforge.org/turn
4
+
5
+ == DESCRIPTION:
6
+
7
+ TURN is a new way to view Test::Unit results. With longer running tests, it
8
+ can be very frustrating to see a failure (....F...) and then have to wait till
9
+ all the tests finish before you can see what the exact failure was. TURN
10
+ displays each test on a separate line with failures being displayed
11
+ immediately instead of at the end of the tests.
12
+
13
+ If you have the 'ansi' gem installed, then TURN output will be displayed in
14
+ wonderful technicolor (but only if your terminal supports ANSI color codes).
15
+ Well, the only colors are green and red, but that is still color.
16
+
17
+ == FEATURES:
18
+
19
+ General usage provides better test output. Here is some sample output:
20
+
21
+ TestMyClass
22
+ test_alt PASS
23
+ test_alt_eq PASS
24
+ test_bad FAIL
25
+ ./test/test_my_class.rb:64:in `test_bad'
26
+ <false> is not true.
27
+ test_foo PASS
28
+ test_foo_eq PASS
29
+ TestYourClass
30
+ test_method_a PASS
31
+ test_method_b PASS
32
+ test_method_c PASS
33
+ ============================================================================
34
+ pass: 7, fail: 1, error: 0
35
+ total: 15 tests with 42 assertions in 0.018 seconds
36
+ ============================================================================
37
+
38
+ Turn also provides solo and cross test modes when run from the *turn* commandline
39
+ application.
40
+
41
+ == SYNOPSIS:
42
+
43
+ Turn can be using from the command-line or via require. The command-line tool
44
+ offers additional options for how one runs tests.
45
+
46
+ === Command Line
47
+
48
+ You can use the *turn* executable in place of the *ruby* interpreter.
49
+
50
+ turn -Ilib test/test_all.rb
51
+
52
+ This will invoke the ruby interpreter and automatically require the turn
53
+ formatting library. All command line arguments are passed "as is" to the
54
+ ruby interpreter.
55
+
56
+ To use the solo runner.
57
+
58
+ turn --solo -Ilib test/
59
+
60
+ This will run all tests in the test/ directory in a separate process.
61
+ Likewise for the cross runner.
62
+
63
+ turn --cross -Ilib test/
64
+
65
+ This will run every pairing of tests in a separate process.
66
+
67
+ === Require
68
+
69
+ Simply require the TURN package from within your test suite.
70
+
71
+ require 'turn'
72
+
73
+ This will configure Test::Unit to use TURN formatting for displaying test
74
+ restuls. A better line to use, though, is the following:
75
+
76
+ begin; require 'turn'; rescue LoadError; end
77
+
78
+ When you distribute your code, the test suite can be run without requiring
79
+ the end user to install the TURN package.
80
+
81
+ For a Rails application, put the require line into the 'test/test_helper.rb'
82
+ scipt. Now your Rails tests will use TURN formatting.
83
+
84
+ == REQUIREMENTS:
85
+
86
+ * ansi 1.1+ (for colorized output and progressbar output mode)
87
+
88
+ == INSTALL:
89
+
90
+ * sudo gem install turn
91
+
92
+ == LICENSE:
93
+
94
+ MIT License
95
+
96
+ Copyright (c) 2006-2008
97
+
98
+ Permission is hereby granted, free of charge, to any person obtaining
99
+ a copy of this software and associated documentation files (the
100
+ 'Software'), to deal in the Software without restriction, including
101
+ without limitation the rights to use, copy, modify, merge, publish,
102
+ distribute, sublicense, and/or sell copies of the Software, and to
103
+ permit persons to whom the Software is furnished to do so, subject to
104
+ the following conditions:
105
+
106
+ The above copyright notice and this permission notice shall be
107
+ included in all copies or substantial portions of the Software.
108
+
109
+ THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
110
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
111
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
112
+ IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
113
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
114
+ TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
115
+ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
116
+
data/Rakefile ADDED
@@ -0,0 +1,40 @@
1
+ begin
2
+ require 'bones'
3
+ rescue LoadError
4
+ abort '### please install the "bones" gem ###'
5
+ end
6
+
7
+ task :default => 'test'
8
+
9
+ Bones {
10
+ name 'openlogic-turn'
11
+ summary 'Test::Unit Reporter (New) -- new output format for Test::Unit'
12
+ authors 'Tim Pease'
13
+ email 'tim.pease@gmail.com'
14
+ url 'http://gemcutter.org/gems/turn'
15
+ version File.read('Version.txt').strip
16
+ ignore_file '.gitignore'
17
+ rubyforge.name 'codeforpeople'
18
+
19
+ exclude << '^work'
20
+ rdoc.exclude << '^lib'
21
+
22
+ use_gmail
23
+
24
+ depend_on 'ansi'
25
+ depend_on 'bones-git', :development => true
26
+ }
27
+
28
+ # Might be useful one day, so we'll leave it here.
29
+ #
30
+ # Rake::TaskManager.class_eval do
31
+ # def remove_task(task_name)
32
+ # @tasks.delete(task_name.to_s)
33
+ # end
34
+ # end
35
+ #
36
+ # def remove_task(task_name)
37
+ # Rake.application.remove_task(task_name)
38
+ # end
39
+
40
+ # EOF
data/Release.txt ADDED
@@ -0,0 +1,33 @@
1
+ = Turn 0.8.0
2
+
3
+ Version 0.8.0 is a fairly significant release for Turn. This release
4
+ adds support for Ruby 1.9's Minitest framework. You can even use
5
+ minitest with Ruby 1.8 by supplying the --minitest option on the turn
6
+ command line.
7
+
8
+ In addition, two new reporters have been a added, a new "pretty" reporter
9
+ which provides a more a modern "OSX" look (thanks Paydro) and a Cue
10
+ reporter which seeks user input with each failure or error (thanks
11
+ Shindo).
12
+
13
+ With this release we are encouraging users to move away from using
14
+ autorun modes. Autorunning is when your test script includes code
15
+ that "automagically" sets up a test runner, e.g. require 'test/unit'
16
+ and MiniTest::Unit.autorun, and by simply running the scripts
17
+ through the ruby interpretor the tests get run. There are a number
18
+ of problems with this approach. To begin with, running tests this way
19
+ limits Turn of a single mode of operation (that's no fun!) More
20
+ importantly it prevents interoperability between the old TestUnit
21
+ and the new MiniTest systems. By leaving these out and using a
22
+ commandline runner you can use the same tests for each version of
23
+ Ruby. This may require some adjutments to build tools, but hell,
24
+ why not use Turn there too. The Turn::Controller class makes it
25
+ damn easy.
26
+
27
+ One last note. Turn is no longer compatible with TestUnit 2.0+.
28
+ TestUnit and MiniTest are deverging and after some consideration
29
+ it was decided that Turn's goal is to support Ruby's native test
30
+ framework, whatever it may be.
31
+
32
+ Enjoy!
33
+
data/Version.txt ADDED
@@ -0,0 +1 @@
1
+ 0.8.2
data/bin/turn ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'turn/command'
3
+ Turn::Command.main(*ARGV)
4
+
@@ -0,0 +1,26 @@
1
+ require 'minitest/unit'
2
+ require 'turn'
3
+
4
+ class SampleCase1 < MiniTest::Unit::TestCase
5
+ def test_sample_pass1
6
+ assert_equal(1,1)
7
+ end
8
+ def test_sample_pass2
9
+ assert_equal(2,2)
10
+ end
11
+
12
+ def test_sample_fail1
13
+ assert_equal(1,2)
14
+ end
15
+ def test_sample_fail2
16
+ assert_include(1,[])
17
+ end
18
+
19
+ def test_sample_error1
20
+ raise StandardError, "Raised exception!"
21
+ end
22
+ def test_sample_error2
23
+ raise StandardError, "Raised another exception!"
24
+ end
25
+ end
26
+
@@ -0,0 +1,26 @@
1
+ require 'test/unit'
2
+ require 'turn'
3
+
4
+ class SampleCase1 < Test::Unit::TestCase
5
+ def test_sample_pass1
6
+ assert_equal(1,1)
7
+ end
8
+ def test_sample_pass2
9
+ assert_equal(2,2)
10
+ end
11
+
12
+ def test_sample_fail1
13
+ assert_equal(1,2)
14
+ end
15
+ def test_sample_fail2
16
+ assert_include(1,[])
17
+ end
18
+
19
+ def test_sample_error1
20
+ raise StandardError, "Raised exception!"
21
+ end
22
+ def test_sample_error2
23
+ raise StandardError, "Raised another exception!"
24
+ end
25
+ end
26
+
@@ -0,0 +1,35 @@
1
+ class SampleCase1 < Test::Unit::TestCase
2
+ def test_sample_pass1
3
+ assert_equal(1,1)
4
+ end
5
+ def test_sample_pass2
6
+ assert_equal(2,2)
7
+ end
8
+
9
+ def test_sample_fail1
10
+ assert_equal(1,2)
11
+ end
12
+ def test_sample_fail2
13
+ assert_include(1,[])
14
+ end
15
+
16
+ def test_sample_error1
17
+ raise StandardError, "Raised exception!"
18
+ end
19
+ def test_sample_error2
20
+ raise StandardError, "Raised another exception!"
21
+ end
22
+ end
23
+
24
+
25
+ class SampleCase2 < Test::Unit::TestCase
26
+ def test_sample_pass1
27
+ assert_equal(1,1)
28
+ end
29
+ def test_sample_pass2
30
+ assert_equal(1,1)
31
+ end
32
+ end
33
+
34
+ class EmptyCase < Test::Unit::TestCase
35
+ end
@@ -0,0 +1,33 @@
1
+ class Sample2Case1 < Test::Unit::TestCase
2
+ def test_sample_pass1
3
+ assert_equal(1,1)
4
+ end
5
+ def test_sample_pass2
6
+ assert_equal(2,2)
7
+ end
8
+
9
+ def test_sample_fail1
10
+ assert_equal(1,2)
11
+ end
12
+ def test_sample_fail2
13
+ assert_include(1,[])
14
+ end
15
+
16
+ def test_sample_error1
17
+ raise StandardError, "Raised exception!"
18
+ end
19
+ def test_sample_error2
20
+ raise StandardError, "Raised another exception!"
21
+ end
22
+ end
23
+
24
+
25
+ class Sample2Case2 < Test::Unit::TestCase
26
+ def test_sample_pass1
27
+ assert_equal(1,1)
28
+ end
29
+ def test_sample_pass2
30
+ assert_equal(1,1)
31
+ end
32
+ end
33
+
data/lib/turn.rb ADDED
@@ -0,0 +1,19 @@
1
+ module Turn
2
+ # Returns +true+ if the ruby version supports minitest.
3
+ # Otherwise, +false+ is returned.
4
+ def self.minitest?
5
+ RUBY_VERSION >= '1.9'
6
+ end
7
+ end
8
+
9
+ unless defined?(Turn::Command)
10
+ if Turn.minitest?
11
+ require 'turn/autorun/minitest'
12
+ MiniTest::Unit.autorun
13
+ else
14
+ require 'turn/autorun/testunit'
15
+ end
16
+ #autoload :Test, 'turn/autorun/testunit'
17
+ #autoload :MiniTest, 'turn/autorun/minitest'
18
+ end
19
+
@@ -0,0 +1,155 @@
1
+ require 'minitest/unit'
2
+ require 'minitest/spec'
3
+ #require 'rubygems'
4
+ require 'ansi'
5
+
6
+ class MiniTest::Unit
7
+ include ANSI::Code
8
+
9
+ PADDING_SIZE = 4
10
+
11
+ def run(args = [])
12
+ @verbose = true
13
+
14
+ filter = if args.first =~ /^(-n|--name)$/ then
15
+ args.shift
16
+ arg = args.shift
17
+ arg =~ /\/(.*)\// ? Regexp.new($1) : arg
18
+ else
19
+ /./ # anything - ^test_ already filtered by #tests
20
+ end
21
+
22
+ @@out.puts "Loaded suite #{$0.sub(/\.rb$/, '')}\nStarted"
23
+
24
+ start = Time.now
25
+ run_test_suites filter
26
+
27
+ @@out.puts
28
+ @@out.puts "Finished in #{'%.6f' % (Time.now - start)} seconds."
29
+
30
+ @@out.puts
31
+
32
+ @@out.print "%d tests, " % test_count
33
+ @@out.print "%d assertions, " % assertion_count
34
+ @@out.print red { "%d failures, " % failures }
35
+ @@out.print yellow { "%d errors, " % errors }
36
+ @@out.puts cyan { "%d skips" % skips}
37
+
38
+ return failures + errors if @test_count > 0 # or return nil...
39
+ end
40
+
41
+ # Overwrite #run_test_suites so that it prints out reports
42
+ # as errors are generated.
43
+ def run_test_suites(filter = /./)
44
+ @test_count, @assertion_count = 0, 0
45
+ old_sync, @@out.sync = @@out.sync, true if @@out.respond_to? :sync=
46
+ TestCase.test_suites.each do |suite|
47
+ test_cases = suite.test_methods.grep(filter)
48
+ if test_cases.size > 0
49
+ @@out.print "\n#{suite}:\n"
50
+ end
51
+
52
+ test_cases.each do |test|
53
+ inst = suite.new test
54
+ inst._assertions = 0
55
+
56
+ t = Time.now
57
+
58
+ @broken = nil
59
+
60
+ @@out.print(case inst.run(self)
61
+ when :pass
62
+ @broken = false
63
+ green { pad_with_size "PASS" }
64
+ when :error
65
+ @broken = true
66
+ yellow { pad_with_size "ERROR" }
67
+ when :fail
68
+ @broken = true
69
+ red { pad_with_size "FAIL" }
70
+ when :skip
71
+ @broken = false
72
+ cyan { pad_with_size "SKIP" }
73
+ end)
74
+
75
+
76
+ @@out.print " #{test}"
77
+ @@out.print " (%.2fs) " % (Time.now - t)
78
+
79
+ if @broken
80
+ @@out.puts
81
+
82
+ report = @report.last
83
+ @@out.puts pad(report[:message], 10)
84
+ trace = MiniTest::filter_backtrace(report[:exception].backtrace).first
85
+ @@out.print pad(trace, 10)
86
+
87
+ @@out.puts
88
+ end
89
+
90
+ @@out.puts
91
+ @test_count += 1
92
+ @assertion_count += inst._assertions
93
+ end
94
+ end
95
+ @@out.sync = old_sync if @@out.respond_to? :sync=
96
+ [@test_count, @assertion_count]
97
+ end
98
+
99
+ def pad(str, size=PADDING_SIZE)
100
+ " " * size + str
101
+ end
102
+
103
+ def pad_with_size(str)
104
+ pad("%5s" % str)
105
+ end
106
+
107
+ # Overwrite #puke method so that is stores a hash
108
+ # with :message and :exception keys.
109
+ def puke(klass, meth, e)
110
+ result = nil
111
+ msg = case e
112
+ when MiniTest::Skip
113
+ @skips += 1
114
+ result = :skip
115
+ e.message
116
+ when MiniTest::Assertion
117
+ @failures += 1
118
+ result = :fail
119
+ e.message
120
+ else
121
+ @errors += 1
122
+ result = :error
123
+ "#{e.class}: #{e.message}\n"
124
+ end
125
+
126
+ @report << {:message => msg, :exception => e}
127
+ result
128
+ end
129
+
130
+
131
+ class TestCase
132
+ # Overwrite #run method so that is uses symbols
133
+ # as return values rather than characters.
134
+ def run(runner)
135
+ result = :pass
136
+ begin
137
+ @passed = nil
138
+ self.setup
139
+ self.__send__ self.__name__
140
+ @passed = true
141
+ rescue Exception => e
142
+ @passed = false
143
+ result = runner.puke(self.class, self.__name__, e)
144
+ ensure
145
+ begin
146
+ self.teardown
147
+ rescue Exception => e
148
+ result = runner.puke(self.class, self.__name__, e)
149
+ end
150
+ end
151
+ result
152
+ end
153
+ end
154
+ end
155
+