assert 0.7.1 → 0.7.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +3 -3
- data/lib/assert/context.rb +16 -9
- data/lib/assert/macro.rb +4 -1
- data/lib/assert/macros/methods.rb +4 -2
- data/lib/assert/setup/helpers.rb +11 -13
- data/lib/assert/test.rb +1 -1
- data/lib/assert/version.rb +1 -1
- data/test/context/class_methods_test.rb +133 -17
- data/test/macro_test.rb +16 -1
- data/test/test_test.rb +1 -1
- metadata +5 -5
data/Gemfile.lock
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
assert (0.7.
|
4
|
+
assert (0.7.2)
|
5
5
|
assert-view (~> 0.4)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: http://rubygems.org/
|
9
9
|
specs:
|
10
|
-
ansi (1.
|
11
|
-
assert-view (0.4.
|
10
|
+
ansi (1.4.1)
|
11
|
+
assert-view (0.4.2)
|
12
12
|
ansi (~> 1.3)
|
13
13
|
undies (~> 1.1)
|
14
14
|
rake (0.9.2)
|
data/lib/assert/context.rb
CHANGED
@@ -115,19 +115,23 @@ module Assert
|
|
115
115
|
def test(desc_or_macro, called_from=nil, first_caller=nil, &block)
|
116
116
|
if desc_or_macro.kind_of?(Macro)
|
117
117
|
instance_eval(&desc_or_macro)
|
118
|
-
|
119
|
-
method_name = "test: #{desc_or_macro}"
|
120
|
-
|
121
|
-
# if no block given, create a test that just skips
|
122
|
-
method_block = block_given? ? block : (Proc.new { skip })
|
123
|
-
|
118
|
+
elsif block_given?
|
124
119
|
ci = Suite::ContextInfo.new(self, called_from, first_caller || caller.first)
|
125
|
-
|
120
|
+
test_name = desc_or_macro
|
121
|
+
|
122
|
+
# create a test from the given code block
|
123
|
+
Assert.suite.tests << Test.new(test_name, ci, &block)
|
124
|
+
else
|
125
|
+
test_eventually(desc_or_macro, called_from, first_caller, &block)
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
129
129
|
def test_eventually(desc_or_macro, called_from=nil, first_caller=nil, &block)
|
130
|
-
|
130
|
+
ci = Suite::ContextInfo.new(self, called_from, first_caller || caller.first)
|
131
|
+
test_name = desc_or_macro.kind_of?(Macro) ? desc_or_macro.name : desc_or_macro
|
132
|
+
|
133
|
+
# create a test from a proc that just skips
|
134
|
+
Assert.suite.tests << Test.new(test_name, ci, &(Proc.new { skip }))
|
131
135
|
end
|
132
136
|
alias_method :test_skip, :test_eventually
|
133
137
|
|
@@ -139,7 +143,10 @@ module Assert
|
|
139
143
|
end
|
140
144
|
|
141
145
|
def should_eventually(desc_or_macro, called_from=nil, first_caller=nil, &block)
|
142
|
-
|
146
|
+
if !desc_or_macro.kind_of?(Macro)
|
147
|
+
desc_or_macro = "should #{desc_or_macro}"
|
148
|
+
end
|
149
|
+
test_eventually(desc_or_macro, called_from, first_caller || caller.first)
|
143
150
|
end
|
144
151
|
alias_method :should_skip, :should_eventually
|
145
152
|
|
data/lib/assert/macro.rb
CHANGED
@@ -5,8 +5,11 @@ module Assert
|
|
5
5
|
# arguments. When passed as an argument to the 'should' method, a macro
|
6
6
|
# will be instance_eval'd in that Assert::Context.
|
7
7
|
|
8
|
-
|
8
|
+
attr_accessor :name
|
9
|
+
|
10
|
+
def initialize(name=nil, *args, &block)
|
9
11
|
raise ArgumentError unless block_given?
|
12
|
+
@name = name || "run this macro"
|
10
13
|
super()
|
11
14
|
end
|
12
15
|
|
@@ -11,7 +11,8 @@ module Assert::Macros
|
|
11
11
|
|
12
12
|
def have_instance_method(*methods)
|
13
13
|
called_from = (methods.last.kind_of?(Array) ? methods.pop : caller).first
|
14
|
-
|
14
|
+
name = "have instance methods: #{methods.map{|m| "'#{m}'"}.join(', ')}"
|
15
|
+
Assert::Macro.new(name) do
|
15
16
|
methods.each do |method|
|
16
17
|
should "respond to instance method ##{method}", called_from do
|
17
18
|
assert_respond_to method, subject, "#{subject.class.name} does not have instance method ##{method}"
|
@@ -23,7 +24,8 @@ module Assert::Macros
|
|
23
24
|
|
24
25
|
def have_class_method(*methods)
|
25
26
|
called_from = (methods.last.kind_of?(Array) ? methods.pop : caller).first
|
26
|
-
|
27
|
+
name = "have class methods: #{methods.map{|m| "'#{m}'"}.join(', ')}"
|
28
|
+
Assert::Macro.new(name) do
|
27
29
|
methods.each do |method|
|
28
30
|
should "respond to class method ##{method}", called_from do
|
29
31
|
assert_respond_to method, subject.class, "#{subject.class.name} does not have class method ##{method}"
|
data/lib/assert/setup/helpers.rb
CHANGED
@@ -10,7 +10,7 @@ module Assert
|
|
10
10
|
|
11
11
|
class << self
|
12
12
|
|
13
|
-
USER_TEST_HELPER = "
|
13
|
+
USER_TEST_HELPER = "./.assert/options"
|
14
14
|
|
15
15
|
# assume the test dir path is ./test and look for helpers in ./test/helper.rb
|
16
16
|
def package_test_dir
|
@@ -33,26 +33,24 @@ module Assert
|
|
33
33
|
private
|
34
34
|
|
35
35
|
def require_user_test_helper
|
36
|
-
|
37
|
-
|
38
|
-
require File.expand_path(USER_TEST_HELPER)
|
39
|
-
end
|
40
|
-
rescue LoadError => err
|
41
|
-
# do nothing
|
36
|
+
if ENV['HOME']
|
37
|
+
safe_require File.expand_path(USER_TEST_HELPER, ENV['HOME'])
|
42
38
|
end
|
43
39
|
end
|
44
40
|
|
45
41
|
# require the package's test/helper file if it exists
|
46
42
|
def require_package_test_helper(root_path)
|
47
|
-
|
48
|
-
require package_helper_file(root_path)
|
49
|
-
rescue LoadError => err
|
50
|
-
# do nothing
|
51
|
-
end
|
43
|
+
safe_require package_helper_file(root_path)
|
52
44
|
end
|
53
45
|
|
54
46
|
def package_helper_file(root_path)
|
55
|
-
File.join(root_path, package_test_dir, package_helper_name
|
47
|
+
File.join(root_path, package_test_dir, package_helper_name)
|
48
|
+
end
|
49
|
+
|
50
|
+
def safe_require(helper_file)
|
51
|
+
if File.exists?(helper_file+".rb")
|
52
|
+
require helper_file
|
53
|
+
end
|
56
54
|
end
|
57
55
|
|
58
56
|
# this method inspects the caller info and finds the caller's root path
|
data/lib/assert/test.rb
CHANGED
data/lib/assert/version.rb
CHANGED
@@ -301,19 +301,50 @@ class Assert::Context
|
|
301
301
|
setup do
|
302
302
|
@test_count_before = Assert.suite.tests.size
|
303
303
|
|
304
|
-
@
|
305
|
-
@
|
306
|
-
@
|
304
|
+
@test_desc = "be true"
|
305
|
+
@test_block = ::Proc.new{ assert(true) }
|
306
|
+
@test_name = @test_desc
|
307
307
|
|
308
|
-
d, b = @
|
308
|
+
d, b = @test_desc, @test_block
|
309
309
|
@context_class = Factory.context_class { test(d, &b) }
|
310
310
|
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
311
311
|
end
|
312
312
|
subject{ @context }
|
313
313
|
|
314
|
-
should "
|
314
|
+
should "build a test with a given desc and code block" do
|
315
315
|
assert_equal @test_count_before+1, Assert.suite.tests.size
|
316
|
-
|
316
|
+
built_test = Assert.suite.tests.last
|
317
|
+
|
318
|
+
assert_kind_of Assert::Test, built_test
|
319
|
+
assert_equal @test_name, built_test.name
|
320
|
+
|
321
|
+
assert_equal @test_block, built_test.code
|
322
|
+
end
|
323
|
+
|
324
|
+
end
|
325
|
+
|
326
|
+
class TestMacroTest < TestMethTest
|
327
|
+
desc "on a macro"
|
328
|
+
setup do
|
329
|
+
@test_count_before = Assert.suite.tests.size
|
330
|
+
d, b = @test_desc, @test_block
|
331
|
+
m = Assert::Macro.new do
|
332
|
+
test(d, &b)
|
333
|
+
test(d, &b)
|
334
|
+
end
|
335
|
+
@context_class = Factory.context_class { test(m) }
|
336
|
+
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
337
|
+
end
|
338
|
+
subject{ @context }
|
339
|
+
|
340
|
+
should "build tests from the macro" do
|
341
|
+
assert_equal @test_count_before+2, Assert.suite.tests.size
|
342
|
+
built_test = Assert.suite.tests.last
|
343
|
+
|
344
|
+
assert_kind_of Assert::Test, built_test
|
345
|
+
assert_equal @test_name, built_test.name
|
346
|
+
|
347
|
+
assert_equal @test_block, built_test.code
|
317
348
|
end
|
318
349
|
|
319
350
|
end
|
@@ -321,13 +352,15 @@ class Assert::Context
|
|
321
352
|
class NoBlockTestMethTest < TestMethTest
|
322
353
|
desc "called with no block"
|
323
354
|
setup do
|
324
|
-
|
355
|
+
@test_count_before = Assert.suite.tests.size
|
356
|
+
d = @test_desc
|
325
357
|
@context_class = Factory.context_class { test(d) }
|
326
358
|
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
327
359
|
end
|
328
360
|
subject{ @context }
|
329
361
|
|
330
|
-
should "
|
362
|
+
should "build a test that skips" do
|
363
|
+
assert_equal @test_count_before+1, Assert.suite.tests.size
|
331
364
|
assert_raises(Assert::Result::TestSkipped) do
|
332
365
|
subject.instance_eval(&Assert.suite.tests.last.code)
|
333
366
|
end
|
@@ -336,9 +369,10 @@ class Assert::Context
|
|
336
369
|
end
|
337
370
|
|
338
371
|
class TestEventuallyTest < TestMethTest
|
339
|
-
desc "
|
372
|
+
desc "called with '_eventually'"
|
340
373
|
setup do
|
341
|
-
|
374
|
+
@test_count_before = Assert.suite.tests.size
|
375
|
+
d, b = @test_desc, @test_block
|
342
376
|
@context_class = Factory.context_class do
|
343
377
|
test_eventually(d, &b)
|
344
378
|
end
|
@@ -346,7 +380,31 @@ class Assert::Context
|
|
346
380
|
end
|
347
381
|
subject{ @context }
|
348
382
|
|
349
|
-
should "
|
383
|
+
should "build a test that skips" do
|
384
|
+
assert_equal @test_count_before+1, Assert.suite.tests.size
|
385
|
+
assert_raises(Assert::Result::TestSkipped) do
|
386
|
+
subject.instance_eval(&Assert.suite.tests.last.code)
|
387
|
+
end
|
388
|
+
end
|
389
|
+
|
390
|
+
end
|
391
|
+
|
392
|
+
class TestEventuallyMacroTest < TestEventuallyTest
|
393
|
+
desc "on a macro"
|
394
|
+
setup do
|
395
|
+
@test_count_before = Assert.suite.tests.size
|
396
|
+
d, b = @test_desc, @test_block
|
397
|
+
m = Assert::Macro.new do
|
398
|
+
test(d, &b)
|
399
|
+
test(d, &b)
|
400
|
+
end
|
401
|
+
@context_class = Factory.context_class { test_eventually(m) }
|
402
|
+
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
403
|
+
end
|
404
|
+
subject{ @context }
|
405
|
+
|
406
|
+
should "build a test that skips" do
|
407
|
+
assert_equal @test_count_before+1, Assert.suite.tests.size
|
350
408
|
assert_raises(Assert::Result::TestSkipped) do
|
351
409
|
subject.instance_eval(&Assert.suite.tests.last.code)
|
352
410
|
end
|
@@ -363,7 +421,7 @@ class Assert::Context
|
|
363
421
|
|
364
422
|
@should_desc = "be true"
|
365
423
|
@should_block = ::Proc.new{ assert(true) }
|
366
|
-
@
|
424
|
+
@test_name = "should #{@should_desc}"
|
367
425
|
|
368
426
|
d, b = @should_desc, @should_block
|
369
427
|
@context_class = Factory.context_class { should(d, &b) }
|
@@ -371,9 +429,40 @@ class Assert::Context
|
|
371
429
|
end
|
372
430
|
subject{ @context }
|
373
431
|
|
374
|
-
should "
|
432
|
+
should "build a test with a given should desc and code block" do
|
375
433
|
assert_equal @test_count_before+1, Assert.suite.tests.size
|
376
|
-
|
434
|
+
built_test = Assert.suite.tests.last
|
435
|
+
|
436
|
+
assert_kind_of Assert::Test, built_test
|
437
|
+
assert_equal @test_name, built_test.name
|
438
|
+
|
439
|
+
assert_equal @should_block, built_test.code
|
440
|
+
end
|
441
|
+
|
442
|
+
end
|
443
|
+
|
444
|
+
class ShouldMacroTest < ShouldTest
|
445
|
+
desc "on a macro"
|
446
|
+
setup do
|
447
|
+
@test_count_before = Assert.suite.tests.size
|
448
|
+
d, b = @should_desc, @should_block
|
449
|
+
m = Assert::Macro.new do
|
450
|
+
should(d, &b)
|
451
|
+
should(d, &b)
|
452
|
+
end
|
453
|
+
@context_class = Factory.context_class { should m }
|
454
|
+
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
455
|
+
end
|
456
|
+
subject{ @context }
|
457
|
+
|
458
|
+
should "build tests from the macro" do
|
459
|
+
assert_equal @test_count_before+2, Assert.suite.tests.size
|
460
|
+
built_test = Assert.suite.tests.last
|
461
|
+
|
462
|
+
assert_kind_of Assert::Test, built_test
|
463
|
+
assert_equal @test_name, built_test.name
|
464
|
+
|
465
|
+
assert_equal @should_block, built_test.code
|
377
466
|
end
|
378
467
|
|
379
468
|
end
|
@@ -381,13 +470,15 @@ class Assert::Context
|
|
381
470
|
class NoBlockShouldTest < ShouldTest
|
382
471
|
desc "called with no block"
|
383
472
|
setup do
|
473
|
+
@test_count_before = Assert.suite.tests.size
|
384
474
|
d = @should_desc
|
385
475
|
@context_class = Factory.context_class { should(d) }
|
386
476
|
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
387
477
|
end
|
388
478
|
subject{ @context }
|
389
479
|
|
390
|
-
should "
|
480
|
+
should "build a test that skips" do
|
481
|
+
assert_equal @test_count_before+1, Assert.suite.tests.size
|
391
482
|
assert_raises(Assert::Result::TestSkipped) do
|
392
483
|
subject.instance_eval(&Assert.suite.tests.last.code)
|
393
484
|
end
|
@@ -396,15 +487,40 @@ class Assert::Context
|
|
396
487
|
end
|
397
488
|
|
398
489
|
class ShouldEventuallyTest < ShouldTest
|
399
|
-
desc "
|
490
|
+
desc "called with '_eventually'"
|
400
491
|
setup do
|
492
|
+
@test_count_before = Assert.suite.tests.size
|
401
493
|
d, b = @should_desc, @should_block
|
402
494
|
@context_class = Factory.context_class { should_eventually(d, &b) }
|
403
495
|
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
404
496
|
end
|
405
497
|
subject{ @context }
|
406
498
|
|
407
|
-
should "
|
499
|
+
should "build a test that skips" do
|
500
|
+
assert_equal @test_count_before+1, Assert.suite.tests.size
|
501
|
+
assert_raises(Assert::Result::TestSkipped) do
|
502
|
+
subject.instance_eval(&Assert.suite.tests.last.code)
|
503
|
+
end
|
504
|
+
end
|
505
|
+
|
506
|
+
end
|
507
|
+
|
508
|
+
class ShouldEventuallyMacroTest < ShouldEventuallyTest
|
509
|
+
desc "on a macro"
|
510
|
+
setup do
|
511
|
+
@test_count_before = Assert.suite.tests.size
|
512
|
+
d, b = @should_desc, @should_block
|
513
|
+
m = Assert::Macro.new do
|
514
|
+
should(d, &b)
|
515
|
+
should(d, &b)
|
516
|
+
end
|
517
|
+
@context_class = Factory.context_class { should_eventually(m) }
|
518
|
+
@context = @context_class.new(Factory.test("something", Factory.context_info(@context_class)))
|
519
|
+
end
|
520
|
+
subject{ @context }
|
521
|
+
|
522
|
+
should "build a test that skips" do
|
523
|
+
assert_equal @test_count_before+1, Assert.suite.tests.size
|
408
524
|
assert_raises(Assert::Result::TestSkipped) do
|
409
525
|
subject.instance_eval(&Assert.suite.tests.last.code)
|
410
526
|
end
|
data/test/macro_test.rb
CHANGED
@@ -6,7 +6,21 @@ class Assert::Macro
|
|
6
6
|
|
7
7
|
class BaseTest < Assert::Context
|
8
8
|
desc "a macro"
|
9
|
-
|
9
|
+
setup { @macro = Assert::Macro.new {} }
|
10
|
+
subject { @macro }
|
11
|
+
|
12
|
+
should "have an accessor for its (optional) name" do
|
13
|
+
assert_respond_to :name, subject
|
14
|
+
assert_respond_to :name=, subject
|
15
|
+
end
|
16
|
+
|
17
|
+
should "default its name if no given" do
|
18
|
+
assert_equal "run this macro", (Assert::Macro.new {}).name
|
19
|
+
end
|
20
|
+
|
21
|
+
should "initialize with a given name" do
|
22
|
+
assert_equal "test", (Assert::Macro.new("test") {}).name
|
23
|
+
end
|
10
24
|
|
11
25
|
should "be a Proc" do
|
12
26
|
assert_kind_of ::Proc, subject
|
@@ -17,6 +31,7 @@ class Assert::Macro
|
|
17
31
|
Assert::Macro.new
|
18
32
|
end
|
19
33
|
end
|
34
|
+
|
20
35
|
end
|
21
36
|
|
22
37
|
class InstanceMethodsTest < Assert::Context
|
data/test/test_test.rb
CHANGED
@@ -5,7 +5,7 @@ class Assert::Test
|
|
5
5
|
class BasicTest < Assert::Context
|
6
6
|
desc "Assert test"
|
7
7
|
setup do
|
8
|
-
test_name = "
|
8
|
+
test_name = "should do something amazing"
|
9
9
|
@test_code = lambda{ assert(true) }
|
10
10
|
context_desc = "context class"
|
11
11
|
@context_class = Factory.context_class do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 7
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 7
|
9
|
-
-
|
10
|
-
version: 0.7.
|
9
|
+
- 2
|
10
|
+
version: 0.7.2
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Kelly Redding
|
@@ -16,7 +16,7 @@ autorequire:
|
|
16
16
|
bindir: bin
|
17
17
|
cert_chain: []
|
18
18
|
|
19
|
-
date: 2011-
|
19
|
+
date: 2011-11-29 00:00:00 Z
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
22
22
|
type: :development
|
@@ -167,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
167
167
|
requirements: []
|
168
168
|
|
169
169
|
rubyforge_project:
|
170
|
-
rubygems_version: 1.8.
|
170
|
+
rubygems_version: 1.8.11
|
171
171
|
signing_key:
|
172
172
|
specification_version: 3
|
173
173
|
summary: Test::Unit style testing framework, just better than Test::Unit.
|