openlogic-turn 0.8.2

Sign up to get free protection for your applications and to get access to all the features.
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
+