assay 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/.ruby +46 -41
  2. data/COPYING.rdoc +38 -0
  3. data/HISTORY.rdoc +18 -1
  4. data/QED.rdoc +1100 -0
  5. data/README.rdoc +139 -16
  6. data/lib/assay.rb +82 -29
  7. data/lib/assay.yml +46 -41
  8. data/lib/assay/{adapters → adapter}/minitest.rb +0 -0
  9. data/lib/assay/{adapters → adapter}/testunit.rb +0 -0
  10. data/lib/assay/assertable.rb +174 -0
  11. data/lib/assay/assertion.rb +98 -124
  12. data/lib/assay/assertor.rb +187 -0
  13. data/lib/assay/boolean_assay.rb +15 -0
  14. data/lib/assay/case_assay.rb +17 -0
  15. data/lib/assay/compare_assay.rb +38 -0
  16. data/lib/assay/core_ext/kernel.rb +52 -0
  17. data/lib/assay/core_ext/na.rb +9 -0
  18. data/lib/assay/directory_assay.rb +20 -0
  19. data/lib/assay/empty_assay.rb +17 -0
  20. data/lib/assay/equal_assay.rb +35 -0
  21. data/lib/assay/equality_assay.rb +18 -0
  22. data/lib/assay/execution_assay.rb +59 -0
  23. data/lib/assay/false_assay.rb +17 -0
  24. data/lib/assay/file_assay.rb +17 -0
  25. data/lib/assay/identity_assay.rb +49 -0
  26. data/lib/assay/include_assay.rb +17 -0
  27. data/lib/assay/instance_assay.rb +17 -0
  28. data/lib/assay/kind_assay.rb +18 -0
  29. data/lib/assay/less_assay.rb +18 -0
  30. data/lib/assay/less_equal_assay.rb +25 -0
  31. data/lib/assay/like_assay.rb +17 -0
  32. data/lib/assay/match_assay.rb +17 -0
  33. data/lib/assay/more_assay.rb +18 -0
  34. data/lib/assay/more_equal_assay.rb +25 -0
  35. data/lib/assay/nil_assay.rb +15 -0
  36. data/lib/assay/nomatch_assay.rb +17 -0
  37. data/lib/assay/output_assay.rb +35 -0
  38. data/lib/assay/path_assay.rb +17 -0
  39. data/lib/assay/raise_assay.rb +109 -0
  40. data/lib/assay/rescue_assay.rb +55 -0
  41. data/lib/assay/respond_assay.rb +17 -0
  42. data/lib/assay/return_assay.rb +46 -0
  43. data/lib/assay/silent_assay.rb +59 -0
  44. data/lib/assay/stderr_assay.rb +30 -0
  45. data/lib/assay/stdout_assay.rb +30 -0
  46. data/lib/assay/throw_assay.rb +89 -0
  47. data/lib/assay/true_assay.rb +20 -0
  48. data/lib/assay/unequal_assay.rb +37 -0
  49. data/lib/assay/within_assay.rb +39 -0
  50. data/test/case_compare_assay.rb +59 -0
  51. data/test/case_empty_assay.rb +51 -0
  52. data/test/case_equal_assay.rb +53 -0
  53. data/test/case_equality_assay.rb +55 -0
  54. data/test/case_false_assay.rb +48 -0
  55. data/test/case_identity_assay.rb +51 -0
  56. data/test/case_include_assay.rb +51 -0
  57. data/test/case_instance_assay.rb +51 -0
  58. data/test/case_kind_assay.rb +51 -0
  59. data/test/case_less_assay.rb +53 -0
  60. data/test/case_less_equal_assay.rb +53 -0
  61. data/test/case_like_assay.rb +57 -0
  62. data/test/case_match_assay.rb +45 -0
  63. data/test/case_more_assay.rb +53 -0
  64. data/test/case_more_equal_assay.rb +53 -0
  65. data/test/case_nil_assay.rb +48 -0
  66. data/test/case_nomatch_assay.rb +47 -0
  67. data/test/case_raise_assay.rb +51 -0
  68. data/test/case_respond_assay.rb +51 -0
  69. data/test/case_throw_assay.rb +51 -0
  70. data/test/case_true_assay.rb +48 -0
  71. data/test/case_unequal_assay.rb +55 -0
  72. data/test/case_within_assay.rb +61 -0
  73. data/test/helper.rb +36 -0
  74. metadata +135 -108
  75. data/APACHE2.txt +0 -205
  76. data/NOTICE.rdoc +0 -18
  77. data/lib/assay/assertions/compare_failure.rb +0 -61
  78. data/lib/assay/assertions/delta_failure.rb +0 -80
  79. data/lib/assay/assertions/empty_failure.rb +0 -76
  80. data/lib/assay/assertions/equality_failure.rb +0 -100
  81. data/lib/assay/assertions/execution_failure.rb +0 -90
  82. data/lib/assay/assertions/false_failure.rb +0 -72
  83. data/lib/assay/assertions/identity_failure.rb +0 -85
  84. data/lib/assay/assertions/instance_failure.rb +0 -76
  85. data/lib/assay/assertions/kind_failure.rb +0 -80
  86. data/lib/assay/assertions/match_failure.rb +0 -85
  87. data/lib/assay/assertions/nil_failure.rb +0 -75
  88. data/lib/assay/assertions/raise_failure.rb +0 -134
  89. data/lib/assay/assertions/response_failure.rb +0 -86
  90. data/lib/assay/assertions/same_failure.rb +0 -82
  91. data/lib/assay/assertions/throw_failure.rb +0 -122
  92. data/lib/assay/assertions/true_failure.rb +0 -79
  93. data/lib/assay/matcher.rb +0 -48
  94. data/qed/01_failure_classes.rdoc +0 -75
  95. data/qed/02_assertives.rdoc +0 -118
  96. data/qed/03_matchers.rdoc +0 -118
  97. data/qed/04_lookup.rdoc +0 -10
@@ -1,86 +0,0 @@
1
- require 'assay/assertion'
2
-
3
- module Assay
4
-
5
- # Does an object #respond_to? a method call.
6
- class ResponseFailure < Assertion
7
-
8
- def self.assertion_name
9
- :respond_to
10
- end
11
-
12
- def self.assertion_name!
13
- :not_respond_to
14
- end
15
-
16
- def self.operator_name
17
- :respond_to?
18
- end
19
-
20
- # Check assertion.
21
- def self.pass?(reciever, method)
22
- #flip = (Symbol === obj) && ! (Symbol === meth) # HACK for specs
23
- #obj, meth = meth, obj if flip
24
- reciever.respond_to?(method)
25
- end
26
-
27
- #
28
- def to_s
29
- return @mesg if @mesg
30
- return super unless @arguments.size == 2
31
-
32
- reciever = @arguments[0].inspect
33
- method = @arguments[1].inspect
34
-
35
- if @_negated
36
- "Expected #{reciever} (#{reciever.class}) to NOT respond to ##{method}"
37
- else
38
- "Expected #{reciever} (#{reciever.class}) to respond to ##{method}"
39
- end
40
- end
41
-
42
- end
43
-
44
-
45
- module Assertives
46
- # Passes if +object+ respond_to? +methods+.
47
- #
48
- # assert_respond_to 'bugbear', :slice
49
- #
50
- def assert_respond_to(reciever, method, msg=nil)
51
- ResponseFailure.assert(reciever, method, :message=>msg, :backtrace=>caller)
52
- end
53
- alias_method :assert_responds_to, :assert_respond_to
54
-
55
- # Passes if +object+ does not respond_to? +methods+.
56
- #
57
- # assert_not_respond_to 'bugbear', :slice
58
- #
59
- def assert_not_respond_to(reciever, method, msg=nil)
60
- ResponseFailure.refute(reciever, method, :message=>msg, :backtrace=>caller)
61
- end
62
-
63
- alias_method :assert_not_responds_to, :assert_not_respond_to
64
- end
65
-
66
-
67
- module Matchers
68
- #
69
- #
70
- # object.assert is_responsive_to(:method_symbol)
71
- #
72
- def is_responsive_to(method)
73
- ResponseFailure.to_matcher(method)
74
- end
75
-
76
- #
77
- #
78
- # object.should be_responsive_to(:method_symbol)
79
- #
80
- def be_responsive_to(method)
81
- ResponseFailure.to_matcher(method)
82
- end
83
- end
84
-
85
- end
86
-
@@ -1,82 +0,0 @@
1
- require 'assay/assertions/compare_failure'
2
-
3
- module Assay
4
-
5
- # Comparison assertion for the #eql? method.
6
- class SameFailure < CompareFailure
7
-
8
- def self.assertion_name
9
- :same
10
- end
11
-
12
- def self.assertion_operator
13
- :eql?
14
- end
15
-
16
- # Check assertion.
17
- def self.pass?(exp, act)
18
- exp.eql?(act)
19
- end
20
-
21
- #
22
- def to_s
23
- return @mesg if @mesg
24
- return super unless @arguments.size == 2
25
-
26
- exp = @arguments[0].inspect
27
- act = @arguments[1].inspect
28
-
29
- if @_negated
30
- "Expected #{act} to NOT be the same as #{exp}"
31
- else
32
- "Expected #{act} to be the same as #{exp}"
33
- end
34
- end
35
-
36
- end
37
-
38
-
39
- module Assertives
40
- # Passes if +expected+ .eq? +actual+.
41
- #
42
- # Note that the ordering of arguments is important,
43
- # since a helpful error message is generated when this
44
- # one fails that tells you the values of expected and actual.
45
- #
46
- # assert_same 'MY STRING', 'my string'.upcase
47
- #
48
- def assert_same(exp, act, msg=nil)
49
- SameFailure.assert(exp, act, :message=>msg, :backtrace=>caller)
50
- end
51
-
52
- # Passes if not +expected+ .eq? +actual+.
53
- #
54
- # assert_not_the_same 'some string', 5
55
- #
56
- def refute_same(exp, act, msg=nil)
57
- SameFailure.refute(exp, act, :message=>msg, :backtrace=>caller)
58
- end
59
-
60
- alias_method :assert_not_same, :refute_same
61
- end
62
-
63
-
64
- module Matchers
65
- #
66
- #
67
- # object1.assert is_same_as(object2)
68
- #
69
- def is_same_as(obj)
70
- SameFailure.to_matcher(obj)
71
- end
72
-
73
- #
74
- #
75
- # object1.should be_same_as(object2)
76
- #
77
- def be_same_as(obj)
78
- SameFailure.to_matcher(obj)
79
- end
80
- end
81
-
82
- end
@@ -1,122 +0,0 @@
1
- require 'assay/assertions/execution_failure'
2
-
3
- module Assay
4
-
5
- #
6
- class ThrowFailure < ExecutionFailure
7
-
8
- def self.assertion_name
9
- :throws
10
- end
11
-
12
- def self.assertion_name!
13
- :not_thrown
14
- end
15
-
16
- # Passes if the block throws expected_symbol
17
- #
18
- # assert_throws :done do
19
- # throw :done
20
- # end
21
- #
22
- def self.pass?(sym, &block)
23
- pass = true
24
- catch(sym) do
25
- begin
26
- block.call
27
- rescue ArgumentError => err # 1.9 exception
28
- #msg += ", not #{err.message.split(/ /).last}"
29
- pass = false
30
- rescue NameError => err # 1.8 exception
31
- #msg += ", not #{err.name.inspect}"
32
- pass = false
33
- end
34
- end
35
- pass
36
- end
37
-
38
- # Passes if the block throws expected_symbol
39
- #
40
- # assert_not_thrown :done do
41
- # throw :chimp
42
- # end
43
- #
44
- # FIXME: Is this correct?
45
- def self.fail?(sym, &block)
46
- pass = false
47
- catch(sym) do
48
- begin
49
- block.call
50
- rescue ArgumentError => err # 1.9 exception
51
- #msg += ", not #{err.message.split(/ /).last}"
52
- pass = true
53
- rescue NameError => err # 1.8 exception
54
- #msg += ", not #{err.name.inspect}"
55
- pass = true
56
- end
57
- end
58
- pass
59
- end
60
-
61
- #
62
- def to_s
63
- return @mesg if @mesg
64
- return super unless @arguments.size == 1
65
-
66
- sym = @arguments[0].inspect
67
-
68
- if @_negated
69
- "Expected #{sym} to have been thrown"
70
- else
71
- "Expected #{sym} NOT to have been thrown"
72
- end
73
- end
74
-
75
- end
76
-
77
-
78
- module Assertives
79
- # Passes if the block throws expected_symbol
80
- #
81
- # assert_throws :done do
82
- # throw :done
83
- # end
84
- #
85
- def assert_throws(sym, msg=nil, &blk)
86
- ThrowFailure.assert(sym, :message=>msg, :backtrace=>caller, &blk)
87
- end
88
-
89
- # Passes if the block throws expected_symbol
90
- #
91
- # refute_throws :done do
92
- # throw :chimp
93
- # end
94
- #
95
- def refute_throws(sym, msg=nil, &blk)
96
- ThrowFailure.refute(sym, :message=>msg, :backtrace=>caller, &blk)
97
- end
98
-
99
- alias_method :assert_not_thrown, :refute_throws
100
- end
101
-
102
-
103
- module Matchers
104
- #
105
- #
106
- # :symbol.assert is_thrown{ ... }
107
- #
108
- def is_thrown(&blk)
109
- ThrowFailure.to_matcher(&blk)
110
- end
111
-
112
- #
113
- #
114
- # :symbol.should be_thrown{ ... }
115
- #
116
- def be_thrown(&blk)
117
- ThrowFailure.to_matcher(&blk)
118
- end
119
- end
120
-
121
- end
122
-
@@ -1,79 +0,0 @@
1
- require 'assay/assertions/compare_failure'
2
-
3
- module Assay
4
-
5
- # Comparison assertion for TrueClass.
6
- #
7
- # TrueFailure.pass?(true) #=> true
8
- # TrueFailure.fail?(true) #=> false
9
- # TrueFailure.pass?(1) #=> false
10
- #
11
- class TrueFailure < CompareFailure
12
-
13
- def self.assertion_name
14
- :true
15
- end
16
-
17
- def self.assertion_operator
18
- :true?
19
- end
20
-
21
- # Check assertion.
22
- def self.pass?(exp)
23
- TrueClass === exp
24
- end
25
-
26
- #
27
- def to_s
28
- return @mesg if @mesg
29
- return super unless @arguments.size == 1
30
-
31
- exp = @arguments[0].inspect
32
-
33
- if @_negated
34
- "Expected #{exp} to NOT be true"
35
- else
36
- "Expected #{exp} to be true"
37
- end
38
- end
39
-
40
- end
41
-
42
-
43
- module Assertives
44
- # Passed if object is +true+.
45
- #
46
- def assert_true(exp, msg=nil)
47
- TrueFailure.assert(exp, :message=>msg, :backtrace=>caller)
48
- end
49
-
50
- # Passed if object is not +true+.
51
- #
52
- # assert_not_true(false)
53
- #
54
- def assert_not_true(exp, msg=nil)
55
- TrueFailure.refute(exp, :message=>msg, :backtrace=>caller)
56
- end
57
- end
58
-
59
-
60
- module Matchers
61
- # True?
62
- #
63
- # value.assert is_true
64
- #
65
- def is_true
66
- TrueFailure.to_matcher
67
- end
68
-
69
- # True?
70
- #
71
- # value.should be_true
72
- #
73
- def be_true
74
- TrueFailure.to_matcher
75
- end
76
- end
77
-
78
- end
79
-
@@ -1,48 +0,0 @@
1
- module Assay
2
-
3
- #
4
- class Matcher
5
- def initialize(fail_class, *arguments, &block)
6
- @fail_class = fail_class
7
- @arguments = arguments
8
- @block = block
9
- end
10
-
11
- #
12
- def fail_class
13
- @fail_class
14
- end
15
-
16
- #
17
- def matches?(target)
18
- @exception = nil
19
- @target = target
20
-
21
- @fail_class.pass?(target, *@arguments, &@block)
22
- end
23
-
24
- # Returns Exception class.
25
- def exception(message=nil)
26
- @exception ||= fail_class.new(message, @target, *@arguments, &@block)
27
- # :negated => options[:negated],
28
- # :backtrace => options[:backtrace] || caller,
29
- end
30
-
31
- # This is just for RSpec matcher compatability.
32
- def fail_message
33
- exception.to_s
34
- end
35
-
36
- # This is just for RSpec matcher compatability.
37
- def negative_fail_message
38
- #exception.set_negative(true)
39
- exception.to_s
40
- end
41
-
42
- #
43
- def fail(backtrace=nil)
44
- super exception #(backtrace || caller)
45
- end
46
- end
47
-
48
- end
@@ -1,75 +0,0 @@
1
- = Failure Classes
2
-
3
- require 'assay'
4
-
5
- == EqualityFailure
6
-
7
- assert Assay::EqualityFailure.pass?(1,1)
8
- refute Assay::EqualityFailure.pass?(1,2)
9
-
10
- == TrueFailure
11
-
12
- assert Assay::TrueFailure.pass?(true)
13
- refute Assay::TrueFailure.pass?(false)
14
-
15
- == FalseFailure
16
-
17
- assert Assay::FalseFailure.pass?(false)
18
- refute Assay::FalseFailure.pass?(true)
19
-
20
- == NilFailure
21
-
22
- assert Assay::NilFailure.pass?(nil)
23
- refute Assay::NilFailure.pass?(true)
24
- refute Assay::NilFailure.pass?(false)
25
-
26
- == DeltaFailure
27
-
28
- assert Assay::DeltaFailure.pass?(1, 1.5, 2)
29
- refute Assay::DeltaFailure.pass?(1, 2.5, 1)
30
-
31
- == MatchFailure
32
-
33
- assert Assay::MatchFailure.pass?(/a/, "abc")
34
- refute Assay::MatchFailure.pass?(/x/, "abc")
35
-
36
- == SameFailure
37
-
38
- assert Assay::SameFailure.pass?(1, 1)
39
- refute Assay::SameFailure.pass?(1, 1.0)
40
-
41
- == IdentityFailure
42
-
43
- assert Assay::IdentityFailure.pass?(:a, :a)
44
- refute Assay::IdentityFailure.pass?("a", "a")
45
-
46
- == InstanceFailure
47
-
48
- assert Assay::InstanceFailure.pass?(1, Fixnum)
49
- refute Assay::InstanceFailure.pass?(1, String)
50
-
51
- == KindFailure
52
-
53
- assert Assay::KindFailure.pass?(1, Integer)
54
- refute Assay::KindFailure.pass?(1, String)
55
-
56
- == RaiseFailure
57
-
58
- assert Assay::RaiseFailure.pass?(ArgumentError){ raise ArgumentError }
59
- refute Assay::RaiseFailure.pass?(ArgumentError){ raise TypeError }
60
-
61
- == ResponseFailure
62
-
63
- assert Assay::ResponseFailure.pass?("string", :upcase)
64
- refute Assay::ResponseFailure.pass?("string", :not_a_method)
65
-
66
- == ExecutionFailure
67
-
68
- assert Assay::ExecutionFailure.pass?(){ nil }
69
- refute Assay::ExecutionFailure.pass?(){ raise }
70
-
71
- == ThrowFailure
72
-
73
- assert Assay::ThrowFailure.pass?(:foo){ throw :foo }
74
- refute Assay::ThrowFailure.pass?(:foo){ throw :bar }
75
-