forked from lian/bitcoin-ruby
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Rakefile
113 lines (93 loc) · 3.18 KB
/
Rakefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
begin
require 'bundler/gem_tasks'
rescue LoadError
end
PROJECT_SPECS = ( FileList['spec/bitcoin/bitcoin_spec.rb'] +
FileList['spec/bitcoin/protocol/*_spec.rb'] +
FileList['spec/bitcoin/script/*_spec.rb'] +
FileList['spec/bitcoin/wallet/*_spec.rb'] +
['spec/bitcoin/storage/storage_spec.rb',
'spec/bitcoin/storage/reorg_spec.rb',
'spec/bitcoin/storage/validation_spec.rb'] +
FileList['spec/bitcoin/node/*_spec.rb'] +
FileList['spec/bitcoin/*_spec.rb'] ).uniq
RUBY = 'ruby' unless defined?(RUBY)
task :default => :bacon
#
# test runner
#
desc 'Run all bacon specs with pretty output'
task :bacon do
require 'open3'
require 'scanf'
require 'matrix'
specs = PROJECT_SPECS
#specs.delete_if{|i| File.basename(i) == 'storage_spec.rb' } # skip for now
# E.g. SPEC=specs/bitcoin/script/ to run script-related specs only.
if spec_mask = ENV["SPEC"]
specs.delete_if{|s| !s[spec_mask] }
end
some_failed = false
specs_size = specs.size
len = specs.map{|s| s.size }.sort.last
total_tests = total_assertions = total_failures = total_errors = 0
totals = Vector[0, 0, 0, 0]
red, yellow, green = "\e[31m%s\e[0m", "\e[33m%s\e[0m", "\e[32m%s\e[0m"
left_format = "%4d/%d: %-#{len + 11}s"
spec_format = "%d specifications (%d requirements), %d failures, %d errors"
specs.each_with_index do |spec, idx|
print(left_format % [idx + 1, specs_size, spec])
Open3.popen3(RUBY, spec) do |sin, sout, serr|
out = sout.read.strip
err = serr.read.strip
# this is conventional, see spec/innate/state/fiber.rb for usage
if out =~ /^Bacon::Error: (needed .*)/
puts(yellow % ("%6s %s" % ['', $1]))
else
total = nil
out.each_line do |line|
scanned = line.scanf(spec_format)
next unless scanned.size == 4
total = Vector[*scanned]
break
end
if total
totals += total
tests, assertions, failures, errors = total_array = total.to_a
if tests > 0 && failures + errors == 0
puts((green % "%6d passed") % tests)
else
some_failed = true
puts(red % " failed")
puts out unless out.empty?
puts err unless err.empty?
end
else
some_failed = true
puts(red % " failed")
puts out unless out.empty?
puts err unless err.empty?
end
end
end
end
total_color = some_failed ? red : green
puts(total_color % (spec_format % totals.to_a))
exit 1 if some_failed
end
desc 'Generate RDoc documentation'
task :rdoc do
`rm -rf rdoc`
system("rdoc -a -A -H -t 'bitcoin-ruby RDoc' -W 'https://github.com/mhanne/bitcoin-ruby/tree/master/%s' -o rdoc -m README.rdoc examples/ doc/ lib/ README.rdoc COPYING")
end
desc 'Generate test coverage report'
task :coverage do
begin
require 'simplecov'
rescue LoadError
puts "Simplecov not found. Run `gem install simplecov` to install it."
exit
end
sh "bacon", *PROJECT_SPECS
system('open coverage/index.html') if RUBY_PLATFORM.include? 'darwin'
end