shindo 0.1.3 → 0.1.4
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/bin/shindo +18 -2
- data/lib/shindo.rb +35 -34
- data/shindo.gemspec +2 -2
- metadata +3 -3
data/bin/shindo
CHANGED
@@ -1,4 +1,16 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
|
+
@interrupt = lambda do
|
3
|
+
formatador = Thread.current[:formatador] || Formatador
|
4
|
+
unless Thread.main[:exit]
|
5
|
+
formatador.display_line('Gracefully Exiting... (ctrl-c to force)')
|
6
|
+
Thread.main[:exit] = true
|
7
|
+
else
|
8
|
+
formatador.display_line('Exiting...')
|
9
|
+
Thread.exit
|
10
|
+
end
|
11
|
+
end
|
12
|
+
Kernel.trap('INT', @interrupt)
|
13
|
+
|
2
14
|
require File.join(File.dirname(__FILE__), '..', 'lib', 'shindo')
|
3
15
|
|
4
16
|
helpers = Dir.glob(File.join(Dir.pwd, 'tests', '**', '*helper.rb')).sort_by {|helper| helper.count(File::SEPARATOR)}
|
@@ -31,10 +43,14 @@ def run_in_thread(helpers, tests, tags)
|
|
31
43
|
shindo = Thread.new {
|
32
44
|
Thread.current[:tags] = tags
|
33
45
|
for file in helpers
|
34
|
-
|
46
|
+
unless Thread.main[:exit]
|
47
|
+
load(file)
|
48
|
+
end
|
35
49
|
end
|
36
50
|
for file in tests
|
37
|
-
|
51
|
+
unless Thread.main[:exit]
|
52
|
+
load(file)
|
53
|
+
end
|
38
54
|
end
|
39
55
|
}
|
40
56
|
shindo.join
|
data/lib/shindo.rb
CHANGED
@@ -5,7 +5,7 @@ require 'gestalt'
|
|
5
5
|
module Shindo
|
6
6
|
|
7
7
|
unless const_defined?(:VERSION)
|
8
|
-
VERSION = '0.1.
|
8
|
+
VERSION = '0.1.4'
|
9
9
|
end
|
10
10
|
|
11
11
|
def self.tests(description = nil, tags = [], &block)
|
@@ -18,8 +18,8 @@ module Shindo
|
|
18
18
|
def initialize(description, tags = [], &block)
|
19
19
|
@afters = []
|
20
20
|
@befores = []
|
21
|
-
@formatador = Formatador.new
|
22
21
|
@tag_stack = []
|
22
|
+
Thread.current[:formatador] = Formatador.new
|
23
23
|
Thread.current[:reload] = false
|
24
24
|
Thread.current[:tags] ||= []
|
25
25
|
Thread.current[:totals] ||= { :failed => 0, :pending => 0, :skipped => 0, :succeeded => 0 }
|
@@ -33,9 +33,9 @@ module Shindo
|
|
33
33
|
@unless_tagged << tag[1..-1]
|
34
34
|
end
|
35
35
|
end
|
36
|
-
|
36
|
+
Thread.current[:formatador].display_line
|
37
37
|
tests(description, tags, &block)
|
38
|
-
|
38
|
+
Thread.current[:formatador].display_line
|
39
39
|
end
|
40
40
|
|
41
41
|
def after(&block)
|
@@ -47,7 +47,7 @@ module Shindo
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def tests(description, tags = [], &block)
|
50
|
-
return self if
|
50
|
+
return self if Thread.main[:exit] || Thread.current[:reload]
|
51
51
|
|
52
52
|
tags = [*tags]
|
53
53
|
@tag_stack.push(tags)
|
@@ -66,8 +66,8 @@ module Shindo
|
|
66
66
|
(@unless_tagged.empty? || (@unless_tagged & @tag_stack.flatten).empty?)
|
67
67
|
if block_given?
|
68
68
|
begin
|
69
|
-
|
70
|
-
|
69
|
+
Thread.current[:formatador].display_line(description)
|
70
|
+
Thread.current[:formatador].indent { instance_eval(&block) }
|
71
71
|
rescue => error
|
72
72
|
display_error(error)
|
73
73
|
end
|
@@ -75,14 +75,14 @@ module Shindo
|
|
75
75
|
@description = description
|
76
76
|
end
|
77
77
|
else
|
78
|
-
|
78
|
+
Thread.current[:formatador].display_line("[light_black]#{description}[/]")
|
79
79
|
end
|
80
80
|
|
81
81
|
@afters.pop
|
82
82
|
@befores.pop
|
83
83
|
@tag_stack.pop
|
84
84
|
|
85
|
-
Thread.exit if
|
85
|
+
Thread.exit if Thread.current[:exit] || Thread.current[:reload]
|
86
86
|
self
|
87
87
|
end
|
88
88
|
|
@@ -101,10 +101,10 @@ module Shindo
|
|
101
101
|
private
|
102
102
|
|
103
103
|
def assert(type, expectation, description, &block)
|
104
|
-
return if
|
104
|
+
return if Thread.main[:exit] || Thread.current[:reload]
|
105
105
|
description = [@description, description].compact.join(' ')
|
106
106
|
success = nil
|
107
|
-
@gestalt = Gestalt.new({'formatador' =>
|
107
|
+
@gestalt = Gestalt.new({'formatador' => Thread.current[:formatador]})
|
108
108
|
if block_given?
|
109
109
|
begin
|
110
110
|
for before in @befores.flatten.compact
|
@@ -136,8 +136,8 @@ module Shindo
|
|
136
136
|
"expected => #{expectation.inspect}",
|
137
137
|
"returned => #{value.inspect}"
|
138
138
|
]
|
139
|
-
|
140
|
-
|
139
|
+
Thread.current[:formatador].indent do
|
140
|
+
Thread.current[:formatador].display_lines([*@message].map {|message| "[red]#{message}[/]"})
|
141
141
|
end
|
142
142
|
@message = nil
|
143
143
|
end
|
@@ -152,30 +152,31 @@ module Shindo
|
|
152
152
|
end
|
153
153
|
|
154
154
|
def display_error(error)
|
155
|
-
|
155
|
+
Thread.current[:formatador].display_line("[red]#{error.message} (#{error.class})[/]")
|
156
156
|
unless error.backtrace.empty?
|
157
|
-
|
158
|
-
|
157
|
+
Thread.current[:formatador].indent do
|
158
|
+
Thread.current[:formatador].display_lines(error.backtrace.map {|line| "[red]#{line}[/]"})
|
159
159
|
end
|
160
160
|
end
|
161
161
|
end
|
162
162
|
|
163
163
|
def failure(description, &block)
|
164
164
|
Thread.current[:totals][:failed] += 1
|
165
|
-
|
165
|
+
Thread.current[:formatador].display_line("[red]- #{description}[/]")
|
166
166
|
end
|
167
167
|
|
168
168
|
def pending(description, &block)
|
169
169
|
Thread.current[:totals][:pending] += 1
|
170
|
-
|
170
|
+
Thread.current[:formatador].display_line("[yellow]# #{description}[/]")
|
171
171
|
end
|
172
172
|
|
173
173
|
def prompt(description, &block)
|
174
|
-
|
174
|
+
return if Thread.main[:exit] || Thread.current[:reload]
|
175
|
+
Thread.current[:formatador].display("Action? [c,e,i,q,r,t,?]? ")
|
175
176
|
choice = STDIN.gets.strip
|
176
177
|
continue = false
|
177
|
-
|
178
|
-
|
178
|
+
Thread.current[:formatador].display_line
|
179
|
+
Thread.current[:formatador].indent do
|
179
180
|
case choice
|
180
181
|
when 'c', 'continue'
|
181
182
|
continue = true
|
@@ -185,12 +186,12 @@ module Shindo
|
|
185
186
|
if value.nil?
|
186
187
|
value = 'nil'
|
187
188
|
end
|
188
|
-
|
189
|
+
Thread.current[:formatador].display_line(value)
|
189
190
|
rescue => error
|
190
191
|
display_error(error)
|
191
192
|
end
|
192
193
|
when 'i', 'interactive', 'irb'
|
193
|
-
|
194
|
+
Thread.current[:formatador].display_line('Starting interactive session...')
|
194
195
|
if @irb.nil?
|
195
196
|
require 'irb'
|
196
197
|
ARGV.clear # Avoid passing args to IRB
|
@@ -200,7 +201,7 @@ module Shindo
|
|
200
201
|
IRB.conf[:PROMPT][:SHINDO] = {}
|
201
202
|
end
|
202
203
|
for key, value in IRB.conf[:PROMPT][:SIMPLE]
|
203
|
-
IRB.conf[:PROMPT][:SHINDO][key] = "#{
|
204
|
+
IRB.conf[:PROMPT][:SHINDO][key] = "#{Thread.current[:formatador].indentation}#{value}"
|
204
205
|
end
|
205
206
|
@irb.context.prompt_mode = :SHINDO
|
206
207
|
@irb.context.workspace = IRB::WorkSpace.new(@gestalt.bindings.last)
|
@@ -209,19 +210,19 @@ module Shindo
|
|
209
210
|
rescue SystemExit
|
210
211
|
end
|
211
212
|
when 'q', 'quit', 'exit'
|
212
|
-
|
213
|
-
|
213
|
+
Thread.current[:formatador].display_line("Exiting...")
|
214
|
+
Thread.current[:exit] = true
|
214
215
|
when 'r', 'reload'
|
215
|
-
|
216
|
+
Thread.current[:formatador].display_line("Reloading...")
|
216
217
|
Thread.current[:reload] = true
|
217
218
|
when 't', 'backtrace', 'trace'
|
218
219
|
if @gestalt.calls.empty?
|
219
|
-
|
220
|
+
Thread.current[:formatador].display_line("[red]No methods were called, so no backtrace was captured.[/]")
|
220
221
|
else
|
221
222
|
@gestalt.display_calls
|
222
223
|
end
|
223
224
|
when '?', 'help'
|
224
|
-
|
225
|
+
Thread.current[:formatador].display_lines([
|
225
226
|
'c - ignore this error and continue',
|
226
227
|
'i - interactive mode',
|
227
228
|
'q - quit Shindo',
|
@@ -230,19 +231,19 @@ module Shindo
|
|
230
231
|
'? - display help'
|
231
232
|
])
|
232
233
|
else
|
233
|
-
|
234
|
+
Thread.current[:formatador].display_line("[red]#{choice} is not a valid choice, please try again.[/]")
|
234
235
|
end
|
235
|
-
|
236
|
+
Thread.current[:formatador].display_line
|
236
237
|
end
|
237
|
-
unless continue ||
|
238
|
-
|
238
|
+
unless continue || Thread.current[:exit]
|
239
|
+
Thread.current[:formatador].display_line("[red]- #{description}[/]")
|
239
240
|
prompt(description, &block)
|
240
241
|
end
|
241
242
|
end
|
242
243
|
|
243
244
|
def success(description, &block)
|
244
245
|
Thread.current[:totals][:succeeded] += 1
|
245
|
-
|
246
|
+
Thread.current[:formatador].display_line("[green]+ #{description}[/]")
|
246
247
|
end
|
247
248
|
|
248
249
|
end
|
data/shindo.gemspec
CHANGED
@@ -13,8 +13,8 @@ Gem::Specification.new do |s|
|
|
13
13
|
## If your rubyforge_project name is different, then edit it and comment out
|
14
14
|
## the sub! line in the Rakefile
|
15
15
|
s.name = 'shindo'
|
16
|
-
s.version = '0.1.
|
17
|
-
s.date = '2010-05-
|
16
|
+
s.version = '0.1.4'
|
17
|
+
s.date = '2010-05-30'
|
18
18
|
s.rubyforge_project = 'shindo'
|
19
19
|
|
20
20
|
## Make sure your summary is short. The description may be as long
|
metadata
CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
|
|
5
5
|
segments:
|
6
6
|
- 0
|
7
7
|
- 1
|
8
|
-
-
|
9
|
-
version: 0.1.
|
8
|
+
- 4
|
9
|
+
version: 0.1.4
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- geemus (Wesley Beary)
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-05-
|
17
|
+
date: 2010-05-30 00:00:00 -05:00
|
18
18
|
default_executable: shindo
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|