pork 1.1.2 → 1.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGES.md +6 -0
- data/README.md +11 -0
- data/TODO.md +4 -0
- data/lib/pork.rb +9 -4
- data/lib/pork/auto.rb +1 -0
- data/lib/pork/extra/rainbows.rb +23 -0
- data/lib/pork/imp.rb +4 -4
- data/lib/pork/more.rb +8 -0
- data/lib/pork/more/bottomup_backtrace.rb +9 -0
- data/lib/pork/more/color.rb +59 -0
- data/lib/pork/stat.rb +67 -25
- data/lib/pork/version.rb +1 -1
- data/pork.gemspec +8 -3
- data/task/gemgem.rb +1 -0
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 67d12f898ed53bc341734b4a53f3571e158eed58
|
4
|
+
data.tar.gz: 5930a1821b4ec2bd8bad6d0168baf26561a2edbb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2839c6e48efb8957c9abb05e83f61f0458de4e85e0db11ad5d3b0854891eadcbdfe5b665dc60182b6bf1e5d47c09e670167b4d71d1fcb808977eabc4c63bef2f
|
7
|
+
data.tar.gz: 0fc345ebec361a78a0ba7fba004194197a25f3508ce5d7f70b215a059990ef53581354dff2ce686c1c1c1b922a034bbf24160629e76a16dd514b9f7b20430a15
|
data/CHANGES.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# CHANGES
|
2
2
|
|
3
|
+
## Pork 1.1.3 -- 2015-02-04
|
4
|
+
|
5
|
+
* Fixed exit status.
|
6
|
+
* Introduced `require 'pork/more'` for colored output and bottom-up backtrace.
|
7
|
+
* Introduced `Pork.Rainbows!` for fun.
|
8
|
+
|
3
9
|
## Pork 1.1.2 -- 2015-01-28
|
4
10
|
|
5
11
|
* Really fixed passing `ENV['PORK_MODE']=execute`. I should sleep now.
|
data/README.md
CHANGED
@@ -284,6 +284,7 @@ Here's what `require 'pork/auto'` would do:
|
|
284
284
|
``` ruby
|
285
285
|
require 'pork'
|
286
286
|
require 'pork/should'
|
287
|
+
require 'pork/more'
|
287
288
|
extend Pork::API
|
288
289
|
Pork.autorun
|
289
290
|
```
|
@@ -329,6 +330,12 @@ could re-enable it.
|
|
329
330
|
|
330
331
|
[mutant]: https://github.com/mbj/mutant
|
331
332
|
|
333
|
+
Also note that there's a number of plugins would be loaded upon:
|
334
|
+
|
335
|
+
``` ruby
|
336
|
+
require 'pork/more'
|
337
|
+
```
|
338
|
+
|
332
339
|
## Where's the pork command?
|
333
340
|
|
334
341
|
It's not implemented. No strong reasons. You could simply run the tests by
|
@@ -860,6 +867,10 @@ Pork.inspect_failure_mode :newline
|
|
860
867
|
|
861
868
|
Then it would always use the mode we specified.
|
862
869
|
|
870
|
+
### Pork.Rainbows!
|
871
|
+
|
872
|
+
Have you seen Rainbows!?
|
873
|
+
|
863
874
|
## CONTRIBUTORS:
|
864
875
|
|
865
876
|
* Chun-Yi Liu (@trantorliu)
|
data/TODO.md
ADDED
data/lib/pork.rb
CHANGED
@@ -17,6 +17,11 @@ module Pork
|
|
17
17
|
@execute = execute || @execute ||= :execute
|
18
18
|
end
|
19
19
|
|
20
|
+
def self.Rainbows!
|
21
|
+
require 'pork/extra/rainbows'
|
22
|
+
Pork::Stat.__send__(:include, Pork::Rainbows)
|
23
|
+
end
|
24
|
+
|
20
25
|
def self.stat
|
21
26
|
@stat ||= Pork::Stat.new
|
22
27
|
end
|
@@ -32,8 +37,8 @@ module Pork
|
|
32
37
|
def self.trap sig='SIGINT'
|
33
38
|
Signal.trap(sig) do
|
34
39
|
stat.report
|
35
|
-
puts "\nterminated by signal
|
36
|
-
exit
|
40
|
+
puts "\nterminated by signal #{sig}"
|
41
|
+
exit 255
|
37
42
|
end
|
38
43
|
end
|
39
44
|
|
@@ -49,7 +54,7 @@ module Pork
|
|
49
54
|
end
|
50
55
|
else
|
51
56
|
puts "Cannot find test: #{ENV['PORK_TEST']}"
|
52
|
-
exit
|
57
|
+
exit 254
|
53
58
|
end
|
54
59
|
else
|
55
60
|
@stat = Executor.public_send(execute_mode, stat)
|
@@ -67,7 +72,7 @@ module Pork
|
|
67
72
|
trap
|
68
73
|
run
|
69
74
|
stat.report
|
70
|
-
exit
|
75
|
+
exit stat.failures + stat.errors + ($! && 1).to_i
|
71
76
|
end
|
72
77
|
end
|
73
78
|
end
|
data/lib/pork/auto.rb
CHANGED
@@ -0,0 +1,23 @@
|
|
1
|
+
|
2
|
+
module Pork
|
3
|
+
module Rainbows
|
4
|
+
def case_pass msg='.'
|
5
|
+
@rainbows ||= 0
|
6
|
+
io.print( color256(rainbows(@rainbows)){msg} )
|
7
|
+
@rainbows += 1
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
def color256 rgb
|
12
|
+
"\e[38;5;#{rgb}m#{yield}\e[0m"
|
13
|
+
end
|
14
|
+
|
15
|
+
def rainbows i
|
16
|
+
n = (i%42) / 6.0
|
17
|
+
r = Math.sin(n + 0*Math::PI/3) * 3 + 3
|
18
|
+
g = Math.sin(n + 2*Math::PI/3) * 3 + 3
|
19
|
+
b = Math.sin(n + 4*Math::PI/3) * 3 + 3
|
20
|
+
16 + 36*r.to_i + 6*g.to_i + b.to_i
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/pork/imp.rb
CHANGED
@@ -52,7 +52,7 @@ module Pork
|
|
52
52
|
if assertions == stat.assertions
|
53
53
|
raise Error.new('Missing assertions')
|
54
54
|
end
|
55
|
-
stat.
|
55
|
+
stat.case_pass
|
56
56
|
end
|
57
57
|
ensure
|
58
58
|
stat.incr_tests
|
@@ -65,13 +65,13 @@ module Pork
|
|
65
65
|
case e
|
66
66
|
when Skip
|
67
67
|
stat.incr_skips
|
68
|
-
stat.
|
68
|
+
stat.case_skip
|
69
69
|
when Failure
|
70
70
|
stat.add_failure(e, description_for("would #{desc}"))
|
71
|
-
stat.
|
71
|
+
stat.case_failed
|
72
72
|
when Error, StandardError
|
73
73
|
stat.add_error( e, description_for("would #{desc}"))
|
74
|
-
stat.
|
74
|
+
stat.case_errored
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
data/lib/pork/more.rb
ADDED
@@ -0,0 +1,59 @@
|
|
1
|
+
|
2
|
+
module Pork
|
3
|
+
module Color
|
4
|
+
def case_skip msg='s'; super(yellow {msg}); end
|
5
|
+
def case_failed msg='F'; super(magenta{msg}); end
|
6
|
+
def case_errored msg='E'; super(red {msg}); end
|
7
|
+
|
8
|
+
private
|
9
|
+
def command name
|
10
|
+
gray{super}
|
11
|
+
end
|
12
|
+
|
13
|
+
def message msg
|
14
|
+
blue{super}
|
15
|
+
end
|
16
|
+
|
17
|
+
def show_exception err
|
18
|
+
magenta{super}
|
19
|
+
end
|
20
|
+
|
21
|
+
def time_spent
|
22
|
+
cyan{super}
|
23
|
+
end
|
24
|
+
|
25
|
+
def numbers
|
26
|
+
super.zip(%w[green green magenta red yellow]).map do |(num, col)|
|
27
|
+
if num == 0
|
28
|
+
num
|
29
|
+
else
|
30
|
+
send(col){ num }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def backtrace err
|
36
|
+
super.map do |b|
|
37
|
+
path, msgs = b.split(':', 2)
|
38
|
+
dir , file = ::File.split(path)
|
39
|
+
msg = msgs.sub(/(\d+):/){red{$1}+':'}.sub(/`.+?'/){green{$&}}
|
40
|
+
|
41
|
+
"#{dir+'/'}#{yellow{file}}:#{msg}"
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def gray █ color('1;30', &block); end
|
46
|
+
def black █ color( 30 , &block); end
|
47
|
+
def red █ color( 31 , &block); end
|
48
|
+
def green █ color( 32 , &block); end
|
49
|
+
def yellow █ color( 33 , &block); end
|
50
|
+
def blue █ color( 34 , &block); end
|
51
|
+
def magenta █ color( 35 , &block); end
|
52
|
+
def cyan █ color( 36 , &block); end
|
53
|
+
def white █ color( 37 , &block); end
|
54
|
+
|
55
|
+
def color rgb
|
56
|
+
"\e[#{rgb}m#{yield}\e[0m"
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/lib/pork/stat.rb
CHANGED
@@ -2,26 +2,42 @@
|
|
2
2
|
require 'thread'
|
3
3
|
|
4
4
|
module Pork
|
5
|
-
|
6
|
-
|
5
|
+
Stat = Struct.new(:io, :start, :mutex,
|
6
|
+
:tests, :assertions, :skips, :failures, :errors,
|
7
|
+
:exceptions)
|
8
|
+
|
9
|
+
Stat::Imp = Module.new do
|
7
10
|
def initialize io=$stdout, st=Time.now, mu=Mutex.new,
|
8
|
-
t=0, a=0, s=0, f=
|
11
|
+
t=0, a=0, s=0, f=0, e=0, x=[]
|
9
12
|
super
|
10
13
|
end
|
11
14
|
def incr_assertions; mutex.synchronize{ self.assertions += 1 }; end
|
12
15
|
def incr_tests ; mutex.synchronize{ self.tests += 1 }; end
|
13
16
|
def incr_skips ; mutex.synchronize{ self.skips += 1 }; end
|
14
|
-
def add_failure *
|
15
|
-
|
16
|
-
|
17
|
-
|
17
|
+
def add_failure *err
|
18
|
+
mutex.synchronize do
|
19
|
+
self.failures += 1
|
20
|
+
exceptions << err
|
21
|
+
end
|
22
|
+
end
|
23
|
+
def add_error *err
|
24
|
+
mutex.synchronize do
|
25
|
+
self.errors += 1
|
26
|
+
exceptions << err
|
27
|
+
end
|
28
|
+
end
|
29
|
+
def case_pass msg='.'; io.print msg; end
|
30
|
+
def case_skip msg='s'; io.print msg; end
|
31
|
+
def case_failed msg='F'; io.print msg; end
|
32
|
+
def case_errored msg='E'; io.print msg; end
|
33
|
+
def passed?; exceptions.size == 0 ; end
|
34
|
+
def numbers; [tests, assertions, failures, errors, skips]; end
|
35
|
+
def time_spent; Time.now - start; end
|
18
36
|
def report
|
19
37
|
io.puts
|
20
|
-
io.puts
|
21
|
-
|
22
|
-
|
23
|
-
io.printf("\nFinished in %f seconds.\n", Time.now - start)
|
24
|
-
io.printf("%d tests, %d assertions, %d failures, %d errors, %d skips\n",
|
38
|
+
io.puts report_exceptions
|
39
|
+
io.printf("\nFinished in %s seconds.\n", time_spent)
|
40
|
+
io.printf("%s tests, %s assertions, %s failures, %s errors, %s skips\n",
|
25
41
|
*numbers)
|
26
42
|
end
|
27
43
|
def merge stat
|
@@ -30,29 +46,53 @@ module Pork
|
|
30
46
|
end
|
31
47
|
|
32
48
|
private
|
33
|
-
def
|
49
|
+
def report_exceptions
|
50
|
+
exceptions.reverse.map do |(err, msg)|
|
51
|
+
"\n #{show_command(msg)}" \
|
52
|
+
"\n #{show_backtrace(err)}" \
|
53
|
+
"\n#{message(msg)}" \
|
54
|
+
"\n#{show_exception(err)}"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def show_command name
|
59
|
+
"Replicate this test with:\n#{command(name)}"
|
60
|
+
end
|
61
|
+
|
62
|
+
def command name
|
63
|
+
"#{env(name)} #{Gem.ruby} -S #{$0} #{ARGV.join(' ')}"
|
64
|
+
end
|
65
|
+
|
66
|
+
def show_backtrace err
|
67
|
+
backtrace(err).join("\n ")
|
68
|
+
end
|
69
|
+
|
70
|
+
def backtrace err
|
34
71
|
if $VERBOSE
|
35
|
-
|
72
|
+
err.backtrace
|
36
73
|
else
|
37
|
-
strip(
|
38
|
-
end
|
74
|
+
strip(err.backtrace.reject{ |line| line =~ %r{/pork(/\w+)?\.rb:\d+} })
|
75
|
+
end
|
39
76
|
end
|
40
77
|
|
41
|
-
def
|
42
|
-
|
78
|
+
def message msg
|
79
|
+
msg
|
43
80
|
end
|
44
81
|
|
45
|
-
def
|
46
|
-
|
82
|
+
def show_exception err
|
83
|
+
"#{err.class}: #{err.message}"
|
47
84
|
end
|
48
85
|
|
49
|
-
def
|
50
|
-
|
86
|
+
def strip bt
|
87
|
+
strip_home(strip_cwd(bt))
|
51
88
|
end
|
52
89
|
|
53
|
-
def
|
54
|
-
|
55
|
-
|
90
|
+
def strip_home bt
|
91
|
+
bt.map{ |path| path.sub(ENV['HOME'], '~') }
|
92
|
+
end
|
93
|
+
|
94
|
+
def strip_cwd bt
|
95
|
+
bt.map{ |path| path.sub(Dir.pwd, '.') }
|
56
96
|
end
|
57
97
|
|
58
98
|
def env name
|
@@ -71,4 +111,6 @@ module Pork
|
|
71
111
|
"PORK_SEED=#{Pork.seed}"
|
72
112
|
end
|
73
113
|
end
|
114
|
+
|
115
|
+
Stat.__send__(:include, Stat::Imp)
|
74
116
|
end
|
data/lib/pork/version.rb
CHANGED
data/pork.gemspec
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
|
-
# stub: pork 1.1.
|
2
|
+
# stub: pork 1.1.3 ruby lib
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = "pork"
|
6
|
-
s.version = "1.1.
|
6
|
+
s.version = "1.1.3"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.require_paths = ["lib"]
|
10
10
|
s.authors = ["Lin Jen-Shin (godfat)"]
|
11
|
-
s.date = "2015-
|
11
|
+
s.date = "2015-02-04"
|
12
12
|
s.description = "Pork -- Simple and clean and modular testing library.\n\nInspired by [Bacon][].\n\n[Bacon]: https://github.com/chneukirchen/bacon"
|
13
13
|
s.email = ["godfat (XD) godfat.org"]
|
14
14
|
s.files = [
|
@@ -20,6 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
"LICENSE",
|
21
21
|
"README.md",
|
22
22
|
"Rakefile",
|
23
|
+
"TODO.md",
|
23
24
|
"lib/mutant/integration/pork.rb",
|
24
25
|
"lib/pork.rb",
|
25
26
|
"lib/pork/auto.rb",
|
@@ -28,11 +29,15 @@ Gem::Specification.new do |s|
|
|
28
29
|
"lib/pork/error.rb",
|
29
30
|
"lib/pork/executor.rb",
|
30
31
|
"lib/pork/expect.rb",
|
32
|
+
"lib/pork/extra/rainbows.rb",
|
31
33
|
"lib/pork/imp.rb",
|
32
34
|
"lib/pork/inspect.rb",
|
33
35
|
"lib/pork/isolate.rb",
|
34
36
|
"lib/pork/mode/parallel.rb",
|
35
37
|
"lib/pork/mode/shuffle.rb",
|
38
|
+
"lib/pork/more.rb",
|
39
|
+
"lib/pork/more/bottomup_backtrace.rb",
|
40
|
+
"lib/pork/more/color.rb",
|
36
41
|
"lib/pork/should.rb",
|
37
42
|
"lib/pork/stat.rb",
|
38
43
|
"lib/pork/test.rb",
|
data/task/gemgem.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lin Jen-Shin (godfat)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-02-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: muack
|
@@ -44,6 +44,7 @@ files:
|
|
44
44
|
- LICENSE
|
45
45
|
- README.md
|
46
46
|
- Rakefile
|
47
|
+
- TODO.md
|
47
48
|
- lib/mutant/integration/pork.rb
|
48
49
|
- lib/pork.rb
|
49
50
|
- lib/pork/auto.rb
|
@@ -52,11 +53,15 @@ files:
|
|
52
53
|
- lib/pork/error.rb
|
53
54
|
- lib/pork/executor.rb
|
54
55
|
- lib/pork/expect.rb
|
56
|
+
- lib/pork/extra/rainbows.rb
|
55
57
|
- lib/pork/imp.rb
|
56
58
|
- lib/pork/inspect.rb
|
57
59
|
- lib/pork/isolate.rb
|
58
60
|
- lib/pork/mode/parallel.rb
|
59
61
|
- lib/pork/mode/shuffle.rb
|
62
|
+
- lib/pork/more.rb
|
63
|
+
- lib/pork/more/bottomup_backtrace.rb
|
64
|
+
- lib/pork/more/color.rb
|
60
65
|
- lib/pork/should.rb
|
61
66
|
- lib/pork/stat.rb
|
62
67
|
- lib/pork/test.rb
|