shindo 0.0.7 → 0.0.8
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/Rakefile +2 -1
- data/VERSION +1 -1
- data/lib/shindo.rb +52 -93
- data/shindo.gemspec +8 -5
- metadata +13 -3
data/Rakefile
CHANGED
@@ -4,7 +4,6 @@ require 'rake'
|
|
4
4
|
begin
|
5
5
|
require 'jeweler'
|
6
6
|
Jeweler::Tasks.new do |gem|
|
7
|
-
gem.add_dependency('annals')
|
8
7
|
gem.name = "shindo"
|
9
8
|
gem.summary = %Q{ruby testing}
|
10
9
|
gem.description = %Q{Simple depth first ruby testing}
|
@@ -12,6 +11,8 @@ begin
|
|
12
11
|
gem.homepage = "http://github.com/geemus/shindo"
|
13
12
|
gem.authors = ["geemus (Wesley Beary)"]
|
14
13
|
gem.rubyforge_project = "shindo"
|
14
|
+
gem.add_dependency('annals', '>=0.0.2')
|
15
|
+
gem.add_dependency('formatador', '>=0.0.2')
|
15
16
|
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
16
17
|
end
|
17
18
|
rescue LoadError
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
data/lib/shindo.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'rubygems'
|
2
2
|
require 'annals'
|
3
|
+
require 'formatador'
|
3
4
|
|
4
5
|
module Shindo
|
5
6
|
|
@@ -16,7 +17,10 @@ module Shindo
|
|
16
17
|
@afters = []
|
17
18
|
@annals = Annals.new
|
18
19
|
@befores = []
|
19
|
-
@
|
20
|
+
@formatador = Formatador.new
|
21
|
+
@success = true
|
22
|
+
@tag_stack = []
|
23
|
+
Thread.current[:reload] = false;
|
20
24
|
Thread.current[:tags] ||= []
|
21
25
|
@if_tagged = Thread.current[:tags].
|
22
26
|
select {|tag| tag.match(/^\+/)}.
|
@@ -24,18 +28,10 @@ module Shindo
|
|
24
28
|
@unless_tagged = Thread.current[:tags].
|
25
29
|
select {|tag| tag.match(/^\-/)}.
|
26
30
|
map {|tag| tag[1..-1]}
|
27
|
-
@
|
28
|
-
@success = true
|
29
|
-
@tag_stack = []
|
30
|
-
Thread.current[:reload] = false
|
31
|
-
print("\n")
|
31
|
+
@formatador.display_line('')
|
32
32
|
tests(header, tags, &block)
|
33
|
-
|
34
|
-
|
35
|
-
Thread.current[:success] = true
|
36
|
-
else
|
37
|
-
Thread.current[:success] = false
|
38
|
-
end
|
33
|
+
@formatador.display_line('')
|
34
|
+
Thread.current[:success] = @success
|
39
35
|
end
|
40
36
|
|
41
37
|
def after(&block)
|
@@ -46,58 +42,33 @@ module Shindo
|
|
46
42
|
@befores[-1].push(block)
|
47
43
|
end
|
48
44
|
|
49
|
-
def
|
50
|
-
"#{@description_stack.compact.join(' ')}#{full_tags}"
|
51
|
-
end
|
52
|
-
|
53
|
-
def full_tags
|
45
|
+
def tags
|
54
46
|
unless @tag_stack.flatten.empty?
|
55
47
|
" [#{@tag_stack.flatten.join(', ')}]"
|
56
48
|
end
|
57
49
|
end
|
58
50
|
|
59
|
-
def
|
60
|
-
|
61
|
-
end
|
62
|
-
|
63
|
-
def indent(&block)
|
64
|
-
@indent += 1
|
65
|
-
yield
|
66
|
-
@indent -= 1
|
67
|
-
end
|
68
|
-
|
69
|
-
def indentation
|
70
|
-
' ' * @indent
|
71
|
-
end
|
72
|
-
|
73
|
-
def print_line(content, color = nil)
|
74
|
-
if color && STDOUT.tty?
|
75
|
-
content = "#{color}#{content}\e[0m"
|
76
|
-
end
|
77
|
-
print("#{indentation}#{content}\n")
|
78
|
-
end
|
79
|
-
|
80
|
-
def prompt(&block)
|
81
|
-
print("#{indentation}Action? [c,i,q,r,t,#,?]? ")
|
51
|
+
def prompt(description, &block)
|
52
|
+
@formatador.display("#{@formatador.indentation}Action? [c,i,q,r,t,#,?]? ")
|
82
53
|
choice = STDIN.gets.strip
|
83
|
-
|
54
|
+
@formatador.display_line("")
|
84
55
|
case choice
|
85
56
|
when 'c'
|
86
57
|
return
|
87
58
|
when 'i'
|
88
|
-
|
59
|
+
@formatador.display_line('Starting interactive session...')
|
89
60
|
if @irb.nil?
|
90
61
|
require 'irb'
|
91
62
|
ARGV.clear # Avoid passing args to IRB
|
92
63
|
IRB.setup(nil)
|
93
64
|
@irb = IRB::Irb.new(nil)
|
94
65
|
IRB.conf[:MAIN_CONTEXT] = @irb.context
|
95
|
-
IRB.conf[:PROMPT][:
|
66
|
+
IRB.conf[:PROMPT][:SHINDO] = {}
|
96
67
|
end
|
97
68
|
for key, value in IRB.conf[:PROMPT][:SIMPLE]
|
98
|
-
IRB.conf[:PROMPT][:
|
69
|
+
IRB.conf[:PROMPT][:SHINDO][key] = "#{@formatador.indentation}#{value}"
|
99
70
|
end
|
100
|
-
@irb.context.prompt_mode = :
|
71
|
+
@irb.context.prompt_mode = :SHINDO
|
101
72
|
@irb.context.workspace = IRB::WorkSpace.new(block.binding)
|
102
73
|
begin
|
103
74
|
@irb.eval_input
|
@@ -107,37 +78,35 @@ module Shindo
|
|
107
78
|
Thread.current[:success] = false
|
108
79
|
Thread.exit
|
109
80
|
when 'r'
|
110
|
-
|
81
|
+
@formatador.display_line("Reloading...")
|
111
82
|
Thread.current[:reload] = true
|
112
83
|
Thread.exit
|
113
84
|
when 't'
|
114
|
-
indent
|
85
|
+
@formatador.indent do
|
115
86
|
if @annals.lines.empty?
|
116
|
-
|
87
|
+
@formatador.display_line('no backtrace available')
|
117
88
|
else
|
118
|
-
|
119
|
-
|
120
|
-
print_line("#{' ' * (2 - index.to_s.length)}#{index} #{line}")
|
121
|
-
index += 1
|
89
|
+
@annals.lines.each_with_index do |line, index|
|
90
|
+
@formatador.display_line("#{' ' * (2 - index.to_s.length)}#{index} #{line}")
|
122
91
|
end
|
123
92
|
end
|
124
|
-
|
125
|
-
|
93
|
+
end
|
94
|
+
@formatador.display_line('')
|
126
95
|
when '?'
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
96
|
+
@formatador.display_line('c - ignore this error and continue')
|
97
|
+
@formatador.display_line('i - interactive mode')
|
98
|
+
@formatador.display_line('q - quit Shindo')
|
99
|
+
@formatador.display_line('r - reload and run the tests again')
|
100
|
+
@formatador.display_line('t - display backtrace')
|
101
|
+
@formatador.display_line('# - enter a number of a backtrace line to see its context')
|
102
|
+
@formatador.display_line('? - display help')
|
134
103
|
when /\d/
|
135
104
|
index = choice.to_i - 1
|
136
105
|
if @annals.lines[index]
|
137
|
-
indent
|
138
|
-
|
139
|
-
indent
|
140
|
-
|
106
|
+
@formatador.indent do
|
107
|
+
@formatador.display_line("#{@annals.lines[index]}: ")
|
108
|
+
@formatador.indent do
|
109
|
+
@formatador.display("\n")
|
141
110
|
current_line = @annals.buffer[index]
|
142
111
|
File.open(current_line[:file], 'r') do |file|
|
143
112
|
data = file.readlines
|
@@ -145,38 +114,34 @@ module Shindo
|
|
145
114
|
min = [0, current - (@annals.max / 2)].max
|
146
115
|
max = [current + (@annals.max / 2), data.length].min
|
147
116
|
min.upto(current - 1) do |line|
|
148
|
-
|
117
|
+
@formatador.display_line("#{line} #{data[line].rstrip}")
|
149
118
|
end
|
150
|
-
|
119
|
+
@formatador.display_line("[yellow]#{current} #{data[current].rstrip}[/]")
|
151
120
|
(current + 1).upto(max - 1) do |line|
|
152
|
-
|
121
|
+
@formatador.display_line("#{line} #{data[line].rstrip}")
|
153
122
|
end
|
154
123
|
end
|
155
|
-
|
156
|
-
|
157
|
-
|
124
|
+
@formatador.display_line('')
|
125
|
+
end
|
126
|
+
end
|
158
127
|
else
|
159
|
-
|
128
|
+
@formatador.display_line("[red]#{choice} is not a valid backtrace line, please try again.[/]")
|
160
129
|
end
|
161
130
|
else
|
162
|
-
|
131
|
+
@formatador.display_line("[red]#{choice} is not a valid choice, please try again.[/]")
|
163
132
|
end
|
164
|
-
|
133
|
+
@formatador.display_line("[red]- #{description}[/]")
|
165
134
|
prompt(&block)
|
166
135
|
end
|
167
136
|
|
168
|
-
def red_line(content)
|
169
|
-
print_line(content, "\e[31m")
|
170
|
-
end
|
171
|
-
|
172
137
|
def tests(description, tags = [], &block)
|
173
138
|
@tag_stack.push([*tags])
|
174
139
|
@befores.push([])
|
175
140
|
@afters.push([])
|
176
141
|
|
177
|
-
|
142
|
+
@formatador.display_line(description || 'Shindo.tests')
|
178
143
|
if block_given?
|
179
|
-
indent { instance_eval(&block) }
|
144
|
+
@formatador.indent { instance_eval(&block) }
|
180
145
|
end
|
181
146
|
|
182
147
|
@afters.pop
|
@@ -185,10 +150,9 @@ module Shindo
|
|
185
150
|
end
|
186
151
|
|
187
152
|
def test(description, tags = [], &block)
|
188
|
-
@description_stack.push(description)
|
189
153
|
@tag_stack.push([*tags])
|
190
154
|
|
191
|
-
# if the test includes tags and discludes
|
155
|
+
# if the test includes +tags and discludes -tags, evaluate it
|
192
156
|
if (@if_tagged.empty? || !(@if_tagged & @tag_stack.flatten).empty?) &&
|
193
157
|
(@unless_tagged.empty? || (@unless_tagged & @tag_stack.flatten).empty?)
|
194
158
|
if block_given?
|
@@ -201,6 +165,7 @@ module Shindo
|
|
201
165
|
success = instance_eval(&block)
|
202
166
|
@annals.stop
|
203
167
|
rescue => error
|
168
|
+
@annals.stop
|
204
169
|
success = false
|
205
170
|
file, line, method = error.backtrace.first.split(':')
|
206
171
|
if method
|
@@ -209,16 +174,15 @@ module Shindo
|
|
209
174
|
method = ''
|
210
175
|
end
|
211
176
|
method << "! #{error.message} (#{error.class})"
|
212
|
-
@annals.stop
|
213
177
|
@annals.unshift(:file => file, :line => line.to_i, :method => method)
|
214
178
|
end
|
215
179
|
@success = @success && success
|
216
180
|
if success
|
217
|
-
|
181
|
+
@formatador.display_line("[green]+ #{description}#{tags}[/]")
|
218
182
|
else
|
219
|
-
|
183
|
+
@formatador.display_line("[red]- #{description}#{tags}[/]")
|
220
184
|
if STDOUT.tty?
|
221
|
-
prompt(&block)
|
185
|
+
prompt(description, &block)
|
222
186
|
end
|
223
187
|
end
|
224
188
|
|
@@ -226,18 +190,13 @@ module Shindo
|
|
226
190
|
after.call
|
227
191
|
end
|
228
192
|
else
|
229
|
-
|
193
|
+
@formatador.display_line("[yellow]* #{description}[/]")
|
230
194
|
end
|
231
195
|
else
|
232
|
-
|
196
|
+
@formatador.display_line("_ #{description}")
|
233
197
|
end
|
234
198
|
|
235
199
|
@tag_stack.pop
|
236
|
-
@description_stack.pop
|
237
|
-
end
|
238
|
-
|
239
|
-
def yellow_line(content)
|
240
|
-
print_line(content, "\e[33m")
|
241
200
|
end
|
242
201
|
|
243
202
|
end
|
data/shindo.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{shindo}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["geemus (Wesley Beary)"]
|
12
|
-
s.date = %q{2009-
|
12
|
+
s.date = %q{2009-12-01}
|
13
13
|
s.default_executable = %q{shindo}
|
14
14
|
s.description = %q{Simple depth first ruby testing}
|
15
15
|
s.email = %q{me@geemus.com}
|
@@ -43,12 +43,15 @@ Gem::Specification.new do |s|
|
|
43
43
|
s.specification_version = 3
|
44
44
|
|
45
45
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
46
|
-
s.add_runtime_dependency(%q<annals>, [">= 0"])
|
46
|
+
s.add_runtime_dependency(%q<annals>, [">= 0.0.2"])
|
47
|
+
s.add_runtime_dependency(%q<formatador>, [">= 0.0.2"])
|
47
48
|
else
|
48
|
-
s.add_dependency(%q<annals>, [">= 0"])
|
49
|
+
s.add_dependency(%q<annals>, [">= 0.0.2"])
|
50
|
+
s.add_dependency(%q<formatador>, [">= 0.0.2"])
|
49
51
|
end
|
50
52
|
else
|
51
|
-
s.add_dependency(%q<annals>, [">= 0"])
|
53
|
+
s.add_dependency(%q<annals>, [">= 0.0.2"])
|
54
|
+
s.add_dependency(%q<formatador>, [">= 0.0.2"])
|
52
55
|
end
|
53
56
|
end
|
54
57
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shindo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- geemus (Wesley Beary)
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-
|
12
|
+
date: 2009-12-01 00:00:00 -08:00
|
13
13
|
default_executable: shindo
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -20,7 +20,17 @@ dependencies:
|
|
20
20
|
requirements:
|
21
21
|
- - ">="
|
22
22
|
- !ruby/object:Gem::Version
|
23
|
-
version:
|
23
|
+
version: 0.0.2
|
24
|
+
version:
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: formatador
|
27
|
+
type: :runtime
|
28
|
+
version_requirement:
|
29
|
+
version_requirements: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.0.2
|
24
34
|
version:
|
25
35
|
description: Simple depth first ruby testing
|
26
36
|
email: me@geemus.com
|