tryouts 2.0.1.002 → 2.0.3
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/CHANGES.txt +10 -0
- data/README.rdoc +6 -3
- data/Rakefile +2 -2
- data/VERSION.yml +2 -2
- data/lib/tryouts.rb +58 -42
- metadata +6 -7
data/CHANGES.txt
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
TRYOUTS, CHANGES
|
2
2
|
|
3
|
+
#### 2.0.3 (2010-11-03) ###############################
|
4
|
+
|
5
|
+
* FIXED: Print test value not expected value twice!
|
6
|
+
|
7
|
+
#### 2.0.2 (2010-11-03) ###############################
|
8
|
+
|
9
|
+
* FIXED: Properly skip test cases with commented out expectations (i.e ##=>)
|
10
|
+
* CHANGE: Revised CLI output. Print output for each test case as it's running.
|
11
|
+
|
12
|
+
|
3
13
|
#### 2.0.1.002 (2010-07-21) ###############################
|
4
14
|
|
5
15
|
* FIXED: clean error (bad value for range). Didn't run tryouts. Bad Delano!
|
data/README.rdoc
CHANGED
@@ -1,8 +1,10 @@
|
|
1
1
|
= Tryouts v2.0 ALPHA
|
2
2
|
|
3
|
-
<i>
|
3
|
+
<i>Don't waste your time writing tests.</i>
|
4
4
|
|
5
|
-
<b>NOTE: Tryouts syntax changed 0.x. The old version is still available in the 0.8-FINAL branch.</b>
|
5
|
+
<b>NOTE: Tryouts syntax changed since 0.x. The old version is still available in the 0.8-FINAL branch.</b>
|
6
|
+
|
7
|
+
Check out the screencast[http://www.rubypulse.com/episode-0.46_tryouts.html] created by Alex Peuchert.
|
6
8
|
|
7
9
|
|
8
10
|
== Basic syntax
|
@@ -36,7 +38,7 @@
|
|
36
38
|
end
|
37
39
|
#=> :success
|
38
40
|
|
39
|
-
For real world examples, see the Gibbler[github.com/delano/gibbler/tree/master/try/] tryouts.
|
41
|
+
For real world examples, see the Gibbler[http://github.com/delano/gibbler/tree/master/try/] tryouts.
|
40
42
|
|
41
43
|
== Setup / Cleanup
|
42
44
|
|
@@ -89,5 +91,6 @@ With help from:
|
|
89
91
|
== Thanks
|
90
92
|
|
91
93
|
* Syntenic[http://syntenic.com/] for the hackfest venue.
|
94
|
+
* AlexPeuchert[http://www.rubypulse.com/] for the screencast.
|
92
95
|
|
93
96
|
<i>This collision was brought to you by Montreal.rb.</i>
|
data/Rakefile
CHANGED
@@ -17,10 +17,10 @@ name = "stella"
|
|
17
17
|
begin
|
18
18
|
require "jeweler"
|
19
19
|
Jeweler::Tasks.new do |gem|
|
20
|
-
gem.version = "#{config[:MAJOR]}.#{config[:MINOR]}.#{config[:PATCH]}
|
20
|
+
gem.version = "#{config[:MAJOR]}.#{config[:MINOR]}.#{config[:PATCH]}"
|
21
21
|
gem.name = "tryouts"
|
22
22
|
gem.rubyforge_project = gem.name
|
23
|
-
gem.summary = "
|
23
|
+
gem.summary = "Don't waste your time writing tests"
|
24
24
|
gem.description = gem.summary
|
25
25
|
gem.email = "delano@solutious.com"
|
26
26
|
gem.homepage = "http://github.com/delano/tryouts"
|
data/VERSION.yml
CHANGED
data/lib/tryouts.rb
CHANGED
@@ -43,7 +43,7 @@ class Tryouts
|
|
43
43
|
|
44
44
|
def run_all *paths
|
45
45
|
batches = paths.collect do |path|
|
46
|
-
|
46
|
+
parse path
|
47
47
|
end
|
48
48
|
|
49
49
|
all, skipped_tests, failed_tests = 0, 0, 0
|
@@ -52,45 +52,42 @@ class Tryouts
|
|
52
52
|
msg 'Ruby %s @ %-40s' % [RUBY_VERSION, Time.now], $/
|
53
53
|
|
54
54
|
batches.each do |batch|
|
55
|
-
if !batch.run?
|
56
|
-
skipped_batches += 1
|
57
|
-
status = "SKIP"
|
58
|
-
elsif batch.failed?
|
59
|
-
failed_batches += 1
|
60
|
-
status = Console.color(:red, "FAIL").bright
|
61
|
-
else
|
62
|
-
status = Console.color(:green, "PASS").bright
|
63
|
-
end
|
64
55
|
|
65
56
|
path = batch.path.gsub(/#{Dir.pwd}\/?/, '')
|
66
57
|
|
67
|
-
msg '%-60s %s' % [path, status
|
68
|
-
|
69
|
-
|
70
|
-
|
58
|
+
msg '%-60s %s' % [path, ''] # status
|
59
|
+
|
60
|
+
before_handler = Proc.new do |t|
|
61
|
+
msg Console.reverse(' %-58s ' % [t.desc.to_s])
|
62
|
+
msg t.test.inspect, t.exps.inspect
|
63
|
+
end
|
64
|
+
|
65
|
+
batch.run(before_handler) do |t|
|
66
|
+
if t.failed?
|
67
|
+
failed_tests += 1
|
68
|
+
msg Console.color(:red, t.failed.join($/)), $/
|
69
|
+
elsif t.skipped? || !t.run?
|
70
|
+
skipped_tests += 1
|
71
|
+
msg Console.bright(t.skipped.join($/)), $/
|
72
|
+
else
|
73
|
+
msg Console.color(:green, t.passed.join($/)), $/
|
71
74
|
end
|
72
75
|
|
73
76
|
all += 1
|
74
|
-
|
75
|
-
|
76
|
-
if t.failed?
|
77
|
-
msg if (failed_tests += 1) == 1
|
78
|
-
msg Console.reverse(' %-58s ' % [t.desc.to_s])
|
79
|
-
msg t.test.inspect, t.exps.inspect
|
80
|
-
msg Console.color(:red, t.failed.join($/)), $/
|
81
|
-
end
|
77
|
+
|
82
78
|
end
|
83
79
|
end
|
80
|
+
|
84
81
|
msg
|
85
82
|
if all > 0
|
86
83
|
suffix = 'tests passed'
|
87
|
-
suffix << " (#{skipped_tests} skipped)" if skipped_tests > 0
|
84
|
+
suffix << " (and #{skipped_tests} skipped)" if skipped_tests > 0
|
88
85
|
msg cformat(all-failed_tests-skipped_tests, all-skipped_tests, suffix) if all-skipped_tests > 0
|
89
86
|
end
|
90
87
|
if batches.size > 1
|
91
88
|
if batches.size-skipped_batches > 0
|
92
89
|
suffix = "batches passed"
|
93
|
-
suffix << " (#{skipped_batches} skipped)" if skipped_batches > 0
|
90
|
+
suffix << " (and #{skipped_batches} skipped)" if skipped_batches > 0
|
94
91
|
msg cformat(batches.size-skipped_batches-failed_batches, batches.size-skipped_batches, suffix)
|
95
92
|
end
|
96
93
|
end
|
@@ -172,7 +169,7 @@ class Tryouts
|
|
172
169
|
batch << TestCase.new(desc, test, exps)
|
173
170
|
end
|
174
171
|
end
|
175
|
-
|
172
|
+
|
176
173
|
batch
|
177
174
|
end
|
178
175
|
|
@@ -208,7 +205,7 @@ class Tryouts
|
|
208
205
|
private
|
209
206
|
|
210
207
|
def expectation? str
|
211
|
-
!ignore?(str) && str.strip.match(
|
208
|
+
!ignore?(str) && str.strip.match(/\A\#+\s*=>/)
|
212
209
|
end
|
213
210
|
|
214
211
|
def comment? str
|
@@ -224,8 +221,8 @@ class Tryouts
|
|
224
221
|
end
|
225
222
|
|
226
223
|
def test_begin? str
|
227
|
-
ret = !str.strip.match(
|
228
|
-
!str.strip.match(
|
224
|
+
ret = !str.strip.match(/\#+\s*TEST/i).nil? ||
|
225
|
+
!str.strip.match(/\A\#\#+[\s\w]+/i).nil?
|
229
226
|
ret
|
230
227
|
end
|
231
228
|
|
@@ -246,10 +243,15 @@ class Tryouts
|
|
246
243
|
@container = Container.new.metaclass
|
247
244
|
@run = false
|
248
245
|
end
|
249
|
-
def run
|
246
|
+
def run(before_test, &after_test)
|
250
247
|
return if empty?
|
251
248
|
setup
|
252
|
-
ret = self.select { |tc|
|
249
|
+
ret = self.select { |tc|
|
250
|
+
before_test.call(tc) unless before_test.nil?
|
251
|
+
ret = !tc.run
|
252
|
+
after_test.call(tc)
|
253
|
+
ret # select failed tests
|
254
|
+
}
|
253
255
|
@failed = ret.size
|
254
256
|
@run = true
|
255
257
|
clean
|
@@ -275,7 +277,7 @@ class Tryouts
|
|
275
277
|
end
|
276
278
|
end
|
277
279
|
class TestCase
|
278
|
-
attr_reader :desc, :test, :exps, :failed, :passed
|
280
|
+
attr_reader :desc, :test, :exps, :failed, :passed, :skipped
|
279
281
|
def initialize(d,t,e)
|
280
282
|
@desc, @test, @exps, @path = d,t,e
|
281
283
|
end
|
@@ -288,24 +290,38 @@ class Tryouts
|
|
288
290
|
def run
|
289
291
|
Tryouts.debug '%s:%d' % [@test.path, @test.first]
|
290
292
|
Tryouts.debug inspect, $/
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
293
|
+
expectations = exps.collect { |exp,idx|
|
294
|
+
exp =~ /\A\#?\s*=>\s*(.+)\Z/
|
295
|
+
$1 # this will be nil if the expectation is commented out
|
296
|
+
}
|
297
|
+
|
298
|
+
# Evaluate test block only if there are valid expectations
|
299
|
+
unless expectations.compact.empty?
|
300
|
+
test_value = Tryouts.eval @test.to_s, @test.path, @test.first
|
301
|
+
@has_run = true
|
302
|
+
end
|
303
|
+
|
304
|
+
@passed, @failed, @skipped = [], [], []
|
305
|
+
expectations.each_with_index { |exp,idx|
|
306
|
+
if exp.nil?
|
307
|
+
@skipped << ' [skipped]'
|
299
308
|
else
|
300
|
-
|
309
|
+
exp_value = Tryouts.eval(exp, @exps.path, @exps.first+idx)
|
310
|
+
if test_value == exp_value
|
311
|
+
@passed << ' == %s' % [test_value.inspect]
|
312
|
+
else
|
313
|
+
@failed << ' != %s' % [test_value.inspect]
|
314
|
+
end
|
301
315
|
end
|
302
|
-
ret
|
303
316
|
}
|
304
317
|
Tryouts.debug
|
305
318
|
@failed.empty?
|
306
319
|
end
|
320
|
+
def skipped?
|
321
|
+
!@skipped.nil? && !@skipped.empty?
|
322
|
+
end
|
307
323
|
def run?
|
308
|
-
|
324
|
+
@has_run == true
|
309
325
|
end
|
310
326
|
def failed?
|
311
327
|
!@failed.nil? && !@failed.empty?
|
metadata
CHANGED
@@ -1,14 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tryouts
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 9
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 2
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
|
11
|
-
version: 2.0.1.002
|
9
|
+
- 3
|
10
|
+
version: 2.0.3
|
12
11
|
platform: ruby
|
13
12
|
authors:
|
14
13
|
- Delano Mandelbaum
|
@@ -16,11 +15,11 @@ autorequire:
|
|
16
15
|
bindir: bin
|
17
16
|
cert_chain: []
|
18
17
|
|
19
|
-
date: 2010-
|
18
|
+
date: 2010-11-03 00:00:00 -04:00
|
20
19
|
default_executable: try
|
21
20
|
dependencies: []
|
22
21
|
|
23
|
-
description:
|
22
|
+
description: Don't waste your time writing tests
|
24
23
|
email: delano@solutious.com
|
25
24
|
executables:
|
26
25
|
- try
|
@@ -76,6 +75,6 @@ rubyforge_project: tryouts
|
|
76
75
|
rubygems_version: 1.3.7
|
77
76
|
signing_key:
|
78
77
|
specification_version: 3
|
79
|
-
summary:
|
78
|
+
summary: Don't waste your time writing tests
|
80
79
|
test_files: []
|
81
80
|
|