pretty_test 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore ADDED
@@ -0,0 +1,17 @@
1
+ *.gem
2
+ *.rbc
3
+ .bundle
4
+ .config
5
+ .yardoc
6
+ Gemfile.lock
7
+ InstalledFiles
8
+ _yardoc
9
+ coverage
10
+ doc/
11
+ lib/bundler/man
12
+ pkg
13
+ rdoc
14
+ spec/reports
15
+ test/tmp
16
+ test/version_tmp
17
+ tmp
data/Gemfile ADDED
@@ -0,0 +1,2 @@
1
+ source "http://rubygems.org"
2
+ gemspec
@@ -0,0 +1,128 @@
1
+ class MiniTest::Unit
2
+
3
+ STATUS_FORMAT = "\e[?7l\e[1m\e[37m(%.1fs) \e[32m%d/%d tests\e[37m, \e[36m%d assertions\e[37m, \e[31m%d errors\e[37m, \e[31m%d failures\e[37m, \e[33m%d skips \e[37m%s\e[?7h\e[0m"
4
+
5
+ def run(args = [])
6
+ options = process_args args
7
+
8
+ @verbose = options[:verbose]
9
+
10
+ filter = options[:filter] || '/./'
11
+ filter = Regexp.new $1 if filter and filter =~ /\/(.*)\//
12
+
13
+ seed = options[:seed]
14
+ unless seed then
15
+ srand
16
+ seed = srand % 0xFFFF
17
+ end
18
+
19
+ srand seed
20
+
21
+ @@out.puts "Loaded suite #{$0.sub(/\.rb$/, '')}\nStarted"
22
+
23
+ @started_at = Time.now
24
+ run_test_suites filter
25
+
26
+ help = ["--seed", seed]
27
+ help.push "--verbose" if @verbose
28
+ help.push("--name", options[:filter].inspect) if options[:filter]
29
+
30
+ @@out.puts "\n\nTest run options: #{help.join(" ")}\n"
31
+
32
+ failures + errors if @test_count > 0
33
+ rescue Interrupt
34
+ abort "Interrupted"
35
+ end
36
+
37
+ def run_test_suites(filter = /./)
38
+ @test_count, @assertion_count = 0, 0
39
+ old_sync, @@out.sync = @@out.sync, true if @@out.respond_to? :sync=
40
+ tests = {}
41
+ TestCase.test_suites.each do |suite|
42
+ suite_name = suite.name.split("::").map { |token|
43
+ token =~ /^(test)?(.*?)(test)?$/i && $2.underscore.humanize
44
+ }.join(" ")
45
+ suite.test_methods.grep(filter).each do |test|
46
+ test_name = test =~ /^(test_)?(.*)$/ && $2.underscore.humanize.downcase
47
+ tests["#{suite_name}: #{test_name}"] = [suite, test]
48
+ end
49
+ end
50
+ @test_count = tests.size
51
+ tests.keys.each_with_index do |name, index|
52
+ update_status(index, name)
53
+ suite, test = tests[name]
54
+ inst = suite.new(test)
55
+ inst._assertions = 0
56
+ klass, method, error = inst.run(self)
57
+ @assertion_count += inst._assertions
58
+ remove_status
59
+ print_error(klass, method, error) if error
60
+ end
61
+ update_status(@test_count)
62
+ @@out.sync = old_sync if @@out.respond_to? :sync=
63
+ [@test_count, @assertion_count]
64
+ end
65
+
66
+ def puke(klass, method, error)
67
+ [klass, method, error]
68
+ end
69
+
70
+ def print_error(klass, method, error)
71
+ report = case error
72
+ when MiniTest::Skip then
73
+ @skips += 1
74
+ "\e[30m\e[43m[SKIPPED] #{pretty_test_name(klass, method)}\e[0m\n#{pretty_location(error)}\n\e[31m#{error.message}\e[0m"
75
+ when MiniTest::Assertion then
76
+ @failures += 1
77
+ "\e[37m\e[41m\e[1m[FAILURE] #{pretty_test_name(klass, method)}\e[0m\n#{pretty_location(error)}\n#{error.message}"
78
+ else
79
+ @errors += 1
80
+ "\e[37m\e[41m\e[1m[ERROR] #{pretty_test_name(klass, method)}\e[0m\n#{pretty_trace(error)}"
81
+ end
82
+ @@out.puts "#{report}\n\n"
83
+ end
84
+
85
+ def pretty_test_name(klass, test)
86
+ suite_name = klass.name.split("::").map { |token|
87
+ token =~ /^(test)?(.*?)(test)?$/i && $2.underscore.humanize
88
+ }.join(" ")
89
+ test_name = test =~ /^(test_)?(.*)$/i && $2.underscore.humanize.downcase
90
+ "#{suite_name}: #{test_name}"
91
+ end
92
+
93
+ def pretty_location(error)
94
+ location = error.backtrace.detect do |line|
95
+ line =~ %r{^#{Dir.pwd}/}
96
+ end
97
+ clean_trace_line("\e[1m-> ", location)
98
+ end
99
+
100
+ def pretty_trace(error)
101
+ location = error.backtrace.detect do |line|
102
+ line =~ %r{^#{Dir.pwd}/}
103
+ end
104
+ trace = error.backtrace.map do |line|
105
+ prefix = line == location ? "\e[1m-> " : " "
106
+ clean_trace_line(prefix, line)
107
+ end
108
+ "\e[31m#{error.class}: #{error.message}\e[0m\n#{trace.join("\n")}"
109
+ end
110
+
111
+ def clean_trace_line(prefix, line)
112
+ case line
113
+ when %r{^#{Dir.pwd}/(.+?)/(.+)$} then "\e[37m#{prefix}[#{$1}] #{$2}\e[0m"
114
+ when %r{^.*/gems/(.+?)/(.+)$} then "\e[36m#{prefix}[#{$1}] #{$2}\e[0m"
115
+ when %r{^.*/rubies/(.+?)/(.+)$} then "\e[35m#{prefix}[#{$1}] #{$2}\e[0m"
116
+ else "#{prefix}#{line}"
117
+ end
118
+ end
119
+
120
+ def update_status(index, test_name = nil)
121
+ status = STATUS_FORMAT % [Time.now - @started_at, index, @test_count, @assertion_count, @errors, @failures, @skips, test_name]
122
+ @@out.print status
123
+ end
124
+
125
+ def remove_status
126
+ @@out.print "\e[2K\r"
127
+ end
128
+ end
@@ -0,0 +1,3 @@
1
+ module PrettyTest
2
+ VERSION = "0.0.2"
3
+ end
@@ -0,0 +1,2 @@
1
+ require "pretty_test/version"
2
+ require "pretty_test/mini_test"
@@ -0,0 +1,17 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/pretty_test/version", __FILE__)
3
+
4
+ Gem::Specification.new do |gem|
5
+ gem.authors = ["Vladimir Bobes Tuzinsky"]
6
+ gem.email = ["vladimir@tuzinsky.com"]
7
+ gem.summary = %q{Minitest patch for pretty output}
8
+ gem.description = %q{Minitest patch for pretty output.}
9
+ gem.homepage = "http://github.com/bobes/pretty_test"
10
+
11
+ gem.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
12
+ gem.files = `git ls-files`.split("\n")
13
+ gem.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
14
+ gem.name = "pretty_test"
15
+ gem.require_paths = ["lib"]
16
+ gem.version = PrettyTest::VERSION
17
+ end
metadata ADDED
@@ -0,0 +1,51 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: pretty_test
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.2
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Vladimir Bobes Tuzinsky
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-10-08 00:00:00.000000000Z
13
+ dependencies: []
14
+ description: Minitest patch for pretty output.
15
+ email:
16
+ - vladimir@tuzinsky.com
17
+ executables: []
18
+ extensions: []
19
+ extra_rdoc_files: []
20
+ files:
21
+ - .gitignore
22
+ - Gemfile
23
+ - lib/pretty_test.rb
24
+ - lib/pretty_test/mini_test.rb
25
+ - lib/pretty_test/version.rb
26
+ - pretty_test.gemspec
27
+ homepage: http://github.com/bobes/pretty_test
28
+ licenses: []
29
+ post_install_message:
30
+ rdoc_options: []
31
+ require_paths:
32
+ - lib
33
+ required_ruby_version: !ruby/object:Gem::Requirement
34
+ none: false
35
+ requirements:
36
+ - - ! '>='
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ required_rubygems_version: !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ! '>='
43
+ - !ruby/object:Gem::Version
44
+ version: '0'
45
+ requirements: []
46
+ rubyforge_project:
47
+ rubygems_version: 1.8.10
48
+ signing_key:
49
+ specification_version: 3
50
+ summary: Minitest patch for pretty output
51
+ test_files: []