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,18 +0,0 @@
1
- = COPYRIGHT NOTICES
2
-
3
- == Assay
4
-
5
- Copyright 2009 Thomas Sawyer
6
-
7
- Licensed under the Apache License, Version 2.0 (the "License");
8
- you may not use this file except in compliance with the License.
9
- You may obtain a copy of the License at
10
-
11
- http://www.apache.org/licenses/LICENSE-2.0
12
-
13
- Unless required by applicable law or agreed to in writing, software
14
- distributed under the License is distributed on an "AS IS" BASIS,
15
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16
- See the License for the specific language governing permissions and
17
- limitations under the License.
18
-
@@ -1,61 +0,0 @@
1
- require 'assay/assertion'
2
-
3
- module Assay
4
-
5
- class CompareFailure < Assertion
6
-
7
- def self.assertion_name
8
- :like
9
- end
10
-
11
- # Test assertion.
12
- def self.pass?(exp, act)
13
- exp.equal?(act) ||
14
- exp.eq?(act) ||
15
- exp.==(act) ||
16
- exp.===(act)
17
- end
18
-
19
- #
20
- def to_s
21
- return @mesg if @mesg
22
- return super unless @arguments.size == 2
23
-
24
- iexp = @arguments[0].inspect
25
- iact = @arguments[1].inspect
26
-
27
- if @_negated
28
- "Expected #{iact} to NOT be like #{iexp}"
29
- else
30
- "Expected #{iact} to be like #{iexp}"
31
- end
32
- end
33
-
34
- end
35
-
36
-
37
- module Assertives
38
-
39
- end
40
-
41
-
42
- module Matchers
43
- #
44
- #
45
- # object1.should be_like(object2)
46
- #
47
- def be_like(act)
48
- CompareFailure.to_matcher(act)
49
- end
50
-
51
- #
52
- #
53
- # object1.should be_like(object2)
54
- #
55
- def is_like(act)
56
- CompareFailure.to_matcher(act)
57
- end
58
- end
59
-
60
- end
61
-
@@ -1,80 +0,0 @@
1
- require 'assay/assertions/compare_failure'
2
-
3
- module Assay
4
-
5
- # TODO: Support Range
6
- class DeltaFailure < CompareFailure
7
-
8
- #
9
- def self.assertion_name
10
- :in_delta
11
- end
12
-
13
- # Check assertion.
14
- def self.pass?(exp, act, delta)
15
- case delta
16
- when Numeric
17
- (exp.to_f - act.to_f).abs <= delta.to_f
18
- else
19
- exp - act <= delta
20
- end
21
- end
22
-
23
- #
24
- def to_s
25
- return @mesg if @mesg
26
- return super unless @arguments.size == 3
27
-
28
- exp = @arguments[0].inspect
29
- act = @arguments[1].inspect
30
- delta = @arguments[2].inspect
31
-
32
- if @_negated
33
- "Expected #{exp} to NOT be within #{delta} of #{act}"
34
- else
35
- "Expected #{exp} to be within #{delta} of #{act}"
36
- end
37
- end
38
-
39
- end
40
-
41
-
42
- module Assertives
43
- # Passes if expected and actual are equal within delta tolerance.
44
- #
45
- # assert_in_delta 0.05, (50000.0 / 10**6), 0.00001
46
- #
47
- def assert_in_delta(exp, act, delta, msg=nil)
48
- DeltaFailure.assert(exp, act, delta, :message=>msg, :backtrace=>caller)
49
- end
50
-
51
- # Passes if expected and actual are equal not within delta tolerance.
52
- #
53
- # assert_not_in_delta 0.05, (50000.0 / 10**6), 0.00001
54
- #
55
- def self.not_in_delta(exp, act, delta, msg=nil)
56
- opts[:backtrace] ||= caller
57
- DeltaFailure.refute(exp, act, delta, :message=>msg, :backtrace=>caller)
58
- end
59
- end
60
-
61
-
62
- module Matchers
63
- #
64
- #
65
- # value1.should be_within(delta, value2)
66
- #
67
- def is_within(delta, act)
68
- DeltaFailure.to_matcher(act, delta)
69
- end
70
-
71
- #
72
- #
73
- # value1.assert is_within(delta, value2)
74
- #
75
- def be_within(delta, act)
76
- DeltaFailure.to_matcher(act, delta)
77
- end
78
- end
79
-
80
- end
@@ -1,76 +0,0 @@
1
- require 'assay/assertion'
2
-
3
- module Assay
4
-
5
- class EmptyFailure < Assertion
6
-
7
- def self.assertion_name
8
- :empty
9
- end
10
-
11
- def self.assertion_operator
12
- :empty?
13
- end
14
-
15
- # Check assertion.
16
- def self.pass?(exp)
17
- exp.empty?
18
- end
19
-
20
- #
21
- def to_s
22
- return @mesg if @mesg
23
- return super unless @arguments.size == 1
24
-
25
- exp = @arguments.first.inspect
26
-
27
- if @_negated
28
- "Expected #{exp} to NOT be empty"
29
- else
30
- "Expected #{exp} to be empty"
31
- end
32
- end
33
-
34
- end
35
-
36
-
37
- module Assertives
38
- # Passed if object is +true+.
39
- #
40
- def assert_empty(exp, msg=nil)
41
- EmptyFailure.assert(exp, :message=>msg, :backtrace=>caller)
42
- end
43
-
44
- # Passed if object is not +true+.
45
- #
46
- # assert_not_true(false)
47
- #
48
- def refute_empty(exp, msg=nil)
49
- opts[:backtrace] ||= caller
50
- EmptyFailure.refute(exp, :message=>msg, :backtrace=>caller)
51
- end
52
-
53
- alias_method :assert_not_empty, :refute_empty
54
- end
55
-
56
-
57
- module Matchers
58
- # Empty?
59
- #
60
- # object.assert is_true
61
- #
62
- def is_empty
63
- EmptyFailure.to_matcher
64
- end
65
-
66
- # Empty?
67
- #
68
- # object.should be_empty
69
- #
70
- def be_empty
71
- EmptyFailure.to_matcher
72
- end
73
- end
74
-
75
- end
76
-
@@ -1,100 +0,0 @@
1
- require 'assay/assertions/compare_failure'
2
-
3
- module Assay
4
-
5
- #
6
- class EqualityFailure < CompareFailure
7
-
8
- #
9
- def self.assertion_name
10
- :equal
11
- end
12
-
13
- #
14
- def self.assertion_operator
15
- :==
16
- end
17
-
18
- # Check assertion.
19
- def self.pass?(exp, act)
20
- exp == act
21
- end
22
-
23
- # Check negated assertion.
24
- def self.fail?(exp, act)
25
- exp != act
26
- end
27
-
28
- #
29
- def to_s
30
- return @mesg if @mesg
31
- return super unless @arguments.size == 2
32
-
33
- oper = @_negated ? "!=" : "=="
34
- iexp = @arguments[0].inspect
35
- iact = @arguments[1].inspect
36
-
37
- if iexp.size > SIZE_LIMIT or iact.size > SIZE_LIMIT
38
- diff = ANSI::Diff.new(iact, iexp)
39
- "a #{oper} b\na) #{diff.diff1}\nb) #{diff.diff2}"
40
- else
41
- "#{iact} #{oper} #{iexp}"
42
- end
43
- end
44
-
45
- end
46
-
47
-
48
- module Assertives
49
- # Passes if expected == +actual.
50
- #
51
- # Note that the ordering of arguments is important,
52
- # since a helpful error message is generated when this
53
- # one fails that tells you the values of expected and actual.
54
- #
55
- # assert_equal 'MY STRING', 'my string'.upcase
56
- #
57
- def assert_equal(exp, act, msg=nil)
58
- EqualityFailure.assert(exp, act, :message=>msg, :backtrace=>caller)
59
- end
60
-
61
- # Passes if expected != actual
62
- #
63
- # assert_not_equal 'some string', 5
64
- #
65
- def assert_not_equal(exp, act, msg=nil)
66
- EqualityFailure.refute(exp, act, :message=>msg, :backtrace=>caller)
67
- end
68
- end
69
-
70
-
71
- module Matchers
72
- # Passes if +expected+ == +actual+.
73
- #
74
- # 'MY STRING'.assert is_equal_to('my string'.upcase)
75
- # 'MY STRING'.refute is_equal_to('another string')
76
- #
77
- def is_equal_to(exp, opts={})
78
- EqualityFailure.to_matcher(exp)
79
- end
80
-
81
- # Passes if +expected+ == +actual+.
82
- #
83
- # 'MY STRING'.should be_equal_to('my string'.upcase)
84
- # 'MY STRING'.should_not be_equal_to('another string')
85
- #
86
- def be_equal_to(exp)
87
- EqualityFailure.to_matcher(exp)
88
- end
89
-
90
- ## # Passes if expected != actual
91
- ## #
92
- ## # 'some string'.should not_be_equal_to('foo')
93
- ## #
94
- ## def not_be_equal_to(exp, act, opts)
95
- ## opts[:backtrace] ||= caller
96
- ## EqualityFailure.to_matcher!(exp, opts)
97
- ## end
98
- end
99
-
100
- end
@@ -1,90 +0,0 @@
1
- require 'assay/assertion'
2
-
3
- module Assay
4
-
5
- # Assert that a block of coded executes without error.
6
- #
7
- # ExecutionFailure is also the base class of the other
8
- # block-executing assertion classes.
9
- class ExecutionFailure < Assertion
10
- #
11
- def self.assertion_name
12
- :execution
13
- end
14
-
15
- # Check assertion.
16
- def self.pass?(_=nil, &block)
17
- begin
18
- block.call
19
- true
20
- rescue Exception
21
- false
22
- end
23
- end
24
-
25
- # Check negated assertion.
26
- def self.fail?(_=nil, &block)
27
- begin
28
- block.call
29
- false
30
- rescue Exception
31
- true
32
- end
33
- end
34
-
35
- #
36
- def to_s
37
- return @mesg if @mesg
38
- if @_negated
39
- "Expected procedure to raise an exception"
40
- else
41
- "Expected procedure to execute successfully"
42
- end
43
- end
44
-
45
- end
46
-
47
-
48
- module Assertives
49
- # Passes if the block yields successfully.
50
- #
51
- # assert_executes "Couldn't do the thing" do
52
- # do_the_thing
53
- # end
54
- #
55
- def assert_executes(msg=nil, &blk)
56
- ExecutionFailure.assert(:message=>msg, :backtrace=>caller, &blk)
57
- end
58
-
59
- # Passes if the block does not yield successfully.
60
- #
61
- # assert_not_executes "Couldn't do the thing" do
62
- # do_the_thing
63
- # end
64
- #
65
- def assert_not_executes(msg=nil, &blk)
66
- ExecutionFailure.refute(:message=>msg, :backtrace=>caller, &blk)
67
- end
68
- end
69
-
70
-
71
- module Matchers
72
- # TODO: Reasonable matcher for ExectuionFailure ?
73
- #
74
- #
75
- # proc.assert is_executed(*args)
76
- #
77
- def is_executed(&block)
78
- ExecutionFailure.to_matcher(&block)
79
- end
80
-
81
- #
82
- #
83
- # proc.should be_executed(*args)
84
- #
85
- def be_extecuted(&block)
86
- ExecutionFailure.to_matcher(&block)
87
- end
88
- end
89
-
90
- end
@@ -1,72 +0,0 @@
1
- require 'assay/assertions/compare_failure'
2
-
3
- module Assay
4
-
5
- class FalseFailure < CompareFailure
6
-
7
- def self.assertion_name
8
- :false
9
- end
10
-
11
- def self.assertion_operator
12
- :false?
13
- end
14
-
15
- # Check assertion.
16
- def self.pass?(exp)
17
- FalseClass === exp
18
- end
19
-
20
- #
21
- def to_s
22
- return @mesg if @mesg
23
- return super unless @arguments.size == 1
24
-
25
- exp = @arguments[0].inspect
26
-
27
- if @_negated
28
- "Expected #{exp} to NOT be false"
29
- else
30
- "Expected #{exp} to be false"
31
- end
32
- end
33
-
34
- end
35
-
36
-
37
- module Assertives
38
- # Passed if object is +false+.
39
- #
40
- def assert_false(exp, msg=nil)
41
- FalseFailure.assert(exp, :message=>msg, :backtrace=>caller)
42
- end
43
-
44
- # Passed if object is not +false+.
45
- #
46
- # assert_not_false(false)
47
- #
48
- def assert_not_false(exp, msg=nil)
49
- FalseFailure.refute(exp, :message=>msg, :backtrace=>caller)
50
- end
51
- end
52
-
53
-
54
- module Matchers
55
- #
56
- #
57
- # value.assert is_false
58
- #
59
- def is_false
60
- FalseFailure.to_matcher
61
- end
62
-
63
- #
64
- #
65
- # value.should be_false
66
- #
67
- def be_false
68
- FalseFailure.to_matcher
69
- end
70
- end
71
-
72
- end