pretty_test 0.0.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/.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: []