MacSpec 0.3.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/.document +5 -0
  2. data/.gitignore +21 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +20 -0
  5. data/Rakefile +53 -0
  6. data/lib/mac_spec.rb +59 -0
  7. data/lib/mac_spec/matcher_system.rb +19 -0
  8. data/lib/mac_spec/matcher_system/built_in/change_expectations.rb +36 -0
  9. data/lib/mac_spec/matcher_system/built_in/enumerable_expectations.rb +43 -0
  10. data/lib/mac_spec/matcher_system/built_in/error_expectations.rb +68 -0
  11. data/lib/mac_spec/matcher_system/built_in/operator_expectations.rb +45 -0
  12. data/lib/mac_spec/matcher_system/built_in/truth_expectations.rb +148 -0
  13. data/lib/mac_spec/matcher_system/core/def_matcher.rb +14 -0
  14. data/lib/mac_spec/matcher_system/core/exceptions.rb +7 -0
  15. data/lib/mac_spec/matcher_system/core/expectation_builder.rb +11 -0
  16. data/lib/mac_spec/matcher_system/core/matcher_builder.rb +53 -0
  17. data/lib/mac_spec/matcher_system/core/modals.rb +36 -0
  18. data/lib/mac_spec/mocking_framework.rb +13 -0
  19. data/lib/mac_spec/mocking_framework/extensions/kernel_extension.rb +14 -0
  20. data/lib/mac_spec/mocking_framework/extensions/object_extension.rb +74 -0
  21. data/lib/mac_spec/mocking_framework/message_expectation.rb +127 -0
  22. data/lib/mac_spec/mocking_framework/mock.rb +20 -0
  23. data/lib/mac_spec/testing_framework.rb +13 -0
  24. data/lib/mac_spec/testing_framework/core/functions.rb +26 -0
  25. data/lib/mac_spec/testing_framework/core/kernel_extension.rb +27 -0
  26. data/lib/mac_spec/testing_framework/core/test_case_class_methods.rb +90 -0
  27. data/lib/mac_spec/version.rb +3 -0
  28. data/test/all.rb +6 -0
  29. data/test/mac_spec/matcher_system/built_in/change_expectations_test.rb +68 -0
  30. data/test/mac_spec/matcher_system/built_in/enumerable_expectations_test.rb +91 -0
  31. data/test/mac_spec/matcher_system/built_in/error_expectations_test.rb +144 -0
  32. data/test/mac_spec/matcher_system/built_in/operator_expectations_test.rb +136 -0
  33. data/test/mac_spec/matcher_system/built_in/truth_expectations_test.rb +373 -0
  34. data/test/mac_spec/matcher_system/core/def_matcher_test.rb +100 -0
  35. data/test/mac_spec/matcher_system/core/expectation_builder_test.rb +34 -0
  36. data/test/mac_spec/matcher_system/core/matcher_builder_test.rb +72 -0
  37. data/test/mac_spec/matcher_system/core/modals_test.rb +39 -0
  38. data/test/mac_spec/matcher_system/script.rb +29 -0
  39. data/test/mac_spec/matcher_system/test_helper.rb +2 -0
  40. data/test/mac_spec/mocking_framework/extensions/kernel_extension_test.rb +37 -0
  41. data/test/mac_spec/mocking_framework/extensions/object_extension_test.rb +9 -0
  42. data/test/mac_spec/mocking_framework/message_expectation_test.rb +9 -0
  43. data/test/mac_spec/mocking_framework/mock_test.rb +9 -0
  44. data/test/mac_spec/mocking_framework/regression/mocking_class_methods_test.rb +96 -0
  45. data/test/mac_spec/mocking_framework/regression/negative_expectation_test.rb +33 -0
  46. data/test/mac_spec/mocking_framework/regression/stub_test.rb +19 -0
  47. data/test/mac_spec/mocking_framework/test_helper.rb +1 -0
  48. data/test/mac_spec/test_helper.rb +1 -0
  49. data/test/mac_spec/testing_framework/performance/x_test_performance.rb +125 -0
  50. data/test/mac_spec/testing_framework/regression/before_test.rb +32 -0
  51. data/test/mac_spec/testing_framework/regression/deep_nested_example_groups_test.rb +20 -0
  52. data/test/mac_spec/testing_framework/regression/description_string_test.rb +13 -0
  53. data/test/mac_spec/testing_framework/regression/example_name_test.rb +11 -0
  54. data/test/mac_spec/testing_framework/regression/inherit_not_double_test.rb +39 -0
  55. data/test/mac_spec/testing_framework/regression/surrounding_module_scope_test.rb +31 -0
  56. data/test/mac_spec/testing_framework/regression/testing_functions_test.rb +66 -0
  57. data/test/mac_spec/testing_framework/test_helper.rb +1 -0
  58. data/test/test_helper.rb +1 -0
  59. metadata +150 -0
@@ -0,0 +1,90 @@
1
+ module MacSpec
2
+ module TestingFramework
3
+ # The methods defined in this module are available
4
+ # inside the TestCases.
5
+ module TestCaseClassMethods
6
+ attr_accessor :desc, :setup_chained, :teardown_chained
7
+ @desc ||= ""
8
+ def setup_chained # :nodoc:
9
+ @setup_chained || lambda {}
10
+ end
11
+
12
+ def teardown_chained # :nodoc:
13
+ @teardown_chained || lambda {}
14
+ end
15
+
16
+ def testcases
17
+ @@testcases ||= []
18
+ @@testcases
19
+ end
20
+
21
+ def own_tests
22
+ @own_tests ||= []
23
+ end
24
+
25
+ def all_tests
26
+ @@_tests ||= []
27
+ end
28
+
29
+ def macspec_superclass
30
+ @macspec_superclass
31
+ end
32
+
33
+ def macspec_superclass=(sc)
34
+ @macspec_superclass = sc
35
+ end
36
+
37
+ # == Run before each Test.
38
+ # The code in the block attached to this method will be run before each
39
+ # test in all subsequent, eventually nested testcases.
40
+ def setup(&block)
41
+ passed_through_setup = self.setup_chained
42
+ self.setup_chained = lambda { instance_eval(&passed_through_setup);instance_eval(&block) }
43
+ define_method :setup, &self.setup_chained
44
+ end
45
+ alias before setup
46
+
47
+ # == Run after each Test.
48
+ # The code in the block attached to this method will be run after each
49
+ # test in all subsequent, eventually nested testcases.
50
+ def teardown(&block)
51
+ passed_through_teardown = self.teardown_chained
52
+ self.teardown_chained = lambda {instance_eval(&block);instance_eval(&passed_through_teardown) }
53
+ define_method :teardown, &self.teardown_chained
54
+ end
55
+ alias after teardown
56
+
57
+ # == Define a TestCase.
58
+ def describe desc, &block
59
+ cls = Class.new(macspec_superclass)
60
+ mods = self.ancestors.reject {|m| Module === m }
61
+ Object.const_set(self.name + desc.to_s.split(/\W+/).map { |s| s.capitalize }.join, cls)
62
+ cls.setup_chained = self.setup_chained
63
+ cls.teardown_chained = self.teardown_chained
64
+ cls.macspec_superclass = self.macspec_superclass
65
+ cls.desc = self.desc + " " + desc
66
+ cls.tests($1.constantize) if defined?(Rails) &&
67
+ self.name =~ /^(.*(Controller|Helper|Mailer))Test/ &&
68
+ self < ActiveSupport::TestCase
69
+ mods = self.ancestors.select {|m| m.class.to_s == "Module" }
70
+ orig_block = block
71
+ block = lambda {include *mods; instance_eval(&orig_block)}
72
+ cls.class_eval(&block)
73
+ self.testcases << cls
74
+ end
75
+
76
+ # == Define a test.
77
+ def it desc, &block
78
+ self.setup {}
79
+ desc = MacSpec::TestingFramework::Functions.make_constantizeable(desc)
80
+ if block_given?
81
+ test = "test_#{desc.gsub(/\W+/, '_').downcase}"
82
+ define_method(test, &lambda {$current_spec = self; instance_eval(&block)})
83
+ (@@_tests ||= []) << test.to_sym
84
+ (@own_tests ||= []) << test.to_sym
85
+ end
86
+ self.teardown {}
87
+ end
88
+ end # TestCaseClassMethods
89
+ end
90
+ end # MacSpec
@@ -0,0 +1,3 @@
1
+ module MacSpec
2
+ VERSION = "0.3.1"
3
+ end
data/test/all.rb ADDED
@@ -0,0 +1,6 @@
1
+ dir = File.dirname(__FILE__)
2
+ Dir[File.expand_path("#{dir}/**/*.rb")].uniq.each do |file|
3
+ if (file =~ /\/\w+_test\.rb$/)
4
+ require file
5
+ end
6
+ end
@@ -0,0 +1,68 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ module MacSpec
4
+ module MatcherSystem
5
+ describe "change matcher" do
6
+ before do
7
+ @var = 1
8
+ end
9
+
10
+ it "passing" do
11
+ lambda {@var += 1}.should change {@var}
12
+ end
13
+
14
+ it "change fails" do
15
+ lambda do
16
+ lambda { }.should change {@var}
17
+ end.should raise_error
18
+ end
19
+
20
+ it "change by" do
21
+ lambda {@var += 1}.should change {@var}.by(1)
22
+ end
23
+
24
+ it "change by fails" do
25
+ lambda do
26
+ lambda {@var += 2}.should change {@var}.by(1)
27
+ end.should raise_error
28
+ end
29
+
30
+ it "change by at least" do
31
+ lambda {@var += 1}.should change {@var}.by_at_least(1)
32
+ end
33
+
34
+ it "change by at least fails" do
35
+ lambda do
36
+ lambda {@var += 0.9}.should change {@var}.by_at_least(1)
37
+ end.should raise_error
38
+ end
39
+
40
+ it "change by at most" do
41
+ lambda {@var += 1}.should change {@var}.by_at_most(1)
42
+ end
43
+
44
+ it "change by at most fails" do
45
+ lambda do
46
+ lambda {@var += 1.1}.should change {@var}.by_at_most(1)
47
+ end.should raise_error
48
+ end
49
+
50
+ it "change from to" do
51
+ lambda {@var += 1}.should change {@var}.from(1).to(2)
52
+ end
53
+
54
+ it "change from to fails" do
55
+ lambda do
56
+ lambda {@var += 1.1}.should change {@var}.from(1).to(2)
57
+ end.should raise_error
58
+ end
59
+
60
+ it "raises unsupported message sent" do
61
+ lambda do
62
+ lambda {@var += 1.1}.should change {@var}.unsupported_message
63
+ end.should raise_error Exceptions::UnsupportedMessageSentToMatcher
64
+ end
65
+ end
66
+
67
+ end
68
+ end
@@ -0,0 +1,91 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Enumerable Expectations" do
4
+ it "include" do
5
+ [1,2,3,4].should include(4)
6
+ end
7
+
8
+ it "include fail" do
9
+ lambda {
10
+ [1,2,3,4].should include(6)
11
+ }.should raise_error(MacSpec.assertion_failed_error)
12
+ end
13
+
14
+ it "exclude" do
15
+ [1,2,3,4].should exclude(9)
16
+ end
17
+
18
+ it "exclude fail" do
19
+ lambda {
20
+ [1,2,3,4].should exclude(4)
21
+ }.should raise_error(MacSpec.assertion_failed_error)
22
+ end
23
+
24
+ it "multi include" do
25
+ [1,2,3,4].should include(1,2)
26
+ end
27
+
28
+ it "multi include fail" do
29
+ lambda {
30
+ [1,2,3,4].should include(6,7,8)
31
+ }.should raise_error(MacSpec.assertion_failed_error)
32
+ end
33
+
34
+ it "multi exclude" do
35
+ [1,2,3,4].should exclude(13,14)
36
+ end
37
+
38
+ it "multi exclude fail" do
39
+ lambda {
40
+ [1,2,3,4].should exclude(2,3,4)
41
+ }.should raise_error(MacSpec.assertion_failed_error)
42
+ end
43
+
44
+ it "negative include" do
45
+ [1,2,3,4].should_not include(9)
46
+ end
47
+
48
+ it "negative include fail" do
49
+ lambda {
50
+ [1,2,3,4].should_not include(4)
51
+ }.should raise_error(MacSpec.assertion_failed_error)
52
+ end
53
+
54
+ it "negative exclude" do
55
+ [1,2,3,4].should_not exclude(3)
56
+ end
57
+
58
+ it "negative exclude fail" do
59
+ lambda {
60
+ [1,2,3,4].should_not exclude(6,7)
61
+ }.should raise_error(MacSpec.assertion_failed_error)
62
+ end
63
+
64
+ it "include fail message" do
65
+ obj = include(1)
66
+ obj.matches?([4,5,6])
67
+
68
+ obj.failure_message.should be("Expected [4, 5, 6] to include [1].")
69
+ end
70
+
71
+ it "include negative fail message" do
72
+ obj = include(1)
73
+ obj.matches?([4,5,6])
74
+
75
+ obj.negative_failure_message.should be("Expected [4, 5, 6] to not include [1].")
76
+ end
77
+
78
+ it "exclude fail message" do
79
+ obj = exclude(4)
80
+ obj.matches?([4,5,6])
81
+
82
+ obj.failure_message.should be("Expected [4, 5, 6] to exclude [4].")
83
+ end
84
+
85
+ it "exclude negative fail message" do
86
+ obj = exclude(4)
87
+ obj.matches?([4,5,6])
88
+
89
+ obj.negative_failure_message.should be("Expected [4, 5, 6] to not exclude [4].")
90
+ end
91
+ end
@@ -0,0 +1,144 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Error Expectations" do
4
+ it "raises error" do
5
+ lambda { raise "FAIL" }.should raise_error
6
+ end
7
+
8
+ it "raises error fail" do
9
+ lambda {
10
+ lambda { "WIN" }.should raise_error
11
+ }.should raise_error(MacSpec.assertion_failed_error)
12
+ end
13
+
14
+ it "negative raises error" do
15
+ lambda { "WIN" }.should_not raise_error
16
+ end
17
+
18
+ it "negative raises error fail" do
19
+ lambda {
20
+ lambda { raise "FAIL" }.should_not raise_error
21
+ }.should raise_error(MacSpec.assertion_failed_error)
22
+ end
23
+
24
+ it "raises specific error" do
25
+ lambda { raise TypeError }.should raise_error(TypeError)
26
+ end
27
+
28
+ it "raises specific error fail with no error" do
29
+ lambda {
30
+ lambda { "WIN" }.should raise_error(TypeError)
31
+ }.should raise_error(MacSpec.assertion_failed_error)
32
+ end
33
+
34
+ it "raises specific error fail with different error" do
35
+ lambda {
36
+ lambda { raise StandardError }.should raise_error(TypeError)
37
+ }.should raise_error(MacSpec.assertion_failed_error)
38
+ end
39
+
40
+ it "throws symbol" do
41
+ lambda {
42
+ throw :win
43
+ }.should throw_symbol(:win)
44
+ end
45
+
46
+ it "throws symbol fails with different symbol" do
47
+ lambda {
48
+ lambda {
49
+ throw :fail
50
+ }.should throw_symbol(:win)
51
+ }.should raise_error(MacSpec.assertion_failed_error)
52
+ end
53
+
54
+ it "negative throws symbol" do
55
+ lambda {
56
+ "not this time!"
57
+ }.should_not throw_symbol(:win)
58
+ end
59
+
60
+ it "negative throws symbol fails with different symbol" do
61
+
62
+ lambda{
63
+ lambda {
64
+ throw :fail
65
+ }.should_not throw_symbol(:fail)
66
+ }.should raise_error(MacSpec.assertion_failed_error)
67
+
68
+ end
69
+
70
+ it "error fail message" do
71
+ obj = raise_error(TypeError)
72
+ obj.matches?(lambda { raise NameError })
73
+
74
+ obj.failure_message.should =~ /Expected #<(.*)> to raise TypeError, but NameError was raised instead./
75
+ end
76
+
77
+ it "error fail message when no error" do
78
+ obj = raise_error(TypeError)
79
+ obj.matches?(lambda { "moop" })
80
+
81
+ obj.failure_message.should =~ /Expected #<(.*)> to raise TypeError, but none was raised./
82
+ end
83
+
84
+ it "error negative fail message" do
85
+ obj = raise_error(TypeError)
86
+ obj.matches?(lambda { raise TypeError })
87
+
88
+ obj.negative_failure_message.should =~ /Expected #<(.*)> to not raise TypeError./
89
+ end
90
+
91
+ it "throw fail message" do
92
+ obj = throw_symbol(:fail)
93
+ obj.matches?(lambda { throw :lame })
94
+
95
+ obj.failure_message.should =~ /Expected #<(.*)> to throw :fail, but :lame was thrown instead./
96
+ end
97
+
98
+ it "throw fail message when no symbol" do
99
+ obj = throw_symbol(:fail)
100
+ obj.matches?(lambda { "moop" })
101
+
102
+ obj.failure_message.should =~ /Expected #<(.*)> to throw :fail, but no symbol was thrown./
103
+ end
104
+
105
+ it "throw negative fail message" do
106
+ obj = throw_symbol(:fail)
107
+ obj.matches?(lambda { throw :fail })
108
+
109
+ obj.negative_failure_message.should =~ /Expected #<(.*)> to not throw :fail./
110
+ end
111
+
112
+ it "string argument message" do
113
+ lambda {raise "message"}.should raise_error("message")
114
+ end
115
+
116
+ it "string argument message fails no error" do
117
+ lambda do
118
+ lambda { 1 }.should raise_error("message")
119
+
120
+ end.should raise_error
121
+ end
122
+
123
+ it "string argument message fails wrong message" do
124
+ lambda do
125
+ lambda { raise "other message" }.should raise_error("message")
126
+ end.should raise_error
127
+ end
128
+
129
+ it "regexp argument message" do
130
+ lambda {raise "message"}.should raise_error(/essa/)
131
+ end
132
+
133
+ it "regexp argument message fails no error" do
134
+ lambda do
135
+ lambda { 1 }.should raise_error(/essa/)
136
+ end.should raise_error
137
+ end
138
+
139
+ it "regexp argument message fails wrong message" do
140
+ lambda do
141
+ lambda { raise "other message" }.should raise_error(/abc/)
142
+ end.should raise_error(/matching/)
143
+ end
144
+ end
@@ -0,0 +1,136 @@
1
+ require File.dirname(__FILE__) + '/../test_helper.rb'
2
+
3
+ describe "Operator Expectations" do
4
+
5
+ it "equals (==)" do
6
+ 3.should == 3
7
+ end
8
+
9
+ it "equals fails" do
10
+ lambda {
11
+ 3.should == 5
12
+ }.should raise_error(MacSpec.assertion_failed_error)
13
+ end
14
+
15
+ it "negative equals" do
16
+ 3.should_not == 4
17
+ end
18
+
19
+ it "negative equals fails" do
20
+ lambda {
21
+ 3.should_not == 3
22
+ }.should raise_error(MacSpec.assertion_failed_error)
23
+ end
24
+
25
+ it "less than (<)" do
26
+ 3.should < 5
27
+ end
28
+
29
+ it "less than fails" do
30
+ lambda {
31
+ 4.should < 3
32
+ }.should raise_error(MacSpec.assertion_failed_error)
33
+ end
34
+
35
+ it "less than equals" do
36
+ 3.should_not < 2
37
+ end
38
+
39
+ it "negative less than fails" do
40
+ lambda {
41
+ 4.should_not < 5
42
+ }.should raise_error(MacSpec.assertion_failed_error)
43
+ end
44
+
45
+ # GREATER THAN (>)
46
+ it "greater than" do
47
+ 3.should > 2
48
+ end
49
+
50
+ it "greater than fails" do
51
+ lambda {
52
+ 4.should > 5
53
+ }.should raise_error(MacSpec.assertion_failed_error)
54
+ end
55
+
56
+ it "greater than equals" do
57
+ 3.should_not > 5
58
+ end
59
+
60
+ it "negative greater than fails" do
61
+ lambda {
62
+ 4.should_not > 3
63
+ }.should raise_error(MacSpec.assertion_failed_error)
64
+ end
65
+
66
+ # LESS THAN EQUAL (<=)
67
+ it "less than equal" do
68
+ 3.should <= 5
69
+ end
70
+
71
+ it "less than equal equal" do
72
+ 3.should <= 3
73
+ end
74
+
75
+ it "less than equal fails" do
76
+ lambda {
77
+ 4.should <= 3
78
+ }.should raise_error(MacSpec.assertion_failed_error)
79
+ end
80
+
81
+ it "negative less than equal" do
82
+ 3.should_not <= 2
83
+ end
84
+
85
+ it "negative less than equal fails" do
86
+ lambda {
87
+ 4.should_not <= 5
88
+ }.should raise_error(MacSpec.assertion_failed_error)
89
+ end
90
+
91
+ # GREATER THAN EQUALS (>=)
92
+ it "greater than equal" do
93
+ 3.should >= 2
94
+ end
95
+
96
+ it "greater than equal equals" do
97
+ 3.should >= 3
98
+ end
99
+
100
+ it "greater than equal fails" do
101
+ lambda {
102
+ 4.should >= 5
103
+ }.should raise_error(MacSpec.assertion_failed_error)
104
+ end
105
+
106
+ it "negative greater than equal equals" do
107
+ 3.should_not >= 5
108
+ end
109
+
110
+ it "negative greater than equal fails" do
111
+ lambda {
112
+ 4.should_not >= 3
113
+ }.should raise_error(MacSpec.assertion_failed_error)
114
+ end
115
+
116
+ # MATCHES (=~)
117
+ it "matches" do
118
+ "hey world".should =~ /world/
119
+ end
120
+
121
+ it "matches fails" do
122
+ lambda {
123
+ "d00d ur 1337".should =~ /world/
124
+ }.should raise_error(MacSpec.assertion_failed_error)
125
+ end
126
+
127
+ it "negative matches" do
128
+ "1337@age".should_not =~ /434/
129
+ end
130
+
131
+ it "negative matches fails" do
132
+ lambda {
133
+ "it's a freak out!".should_not =~ /freak/
134
+ }.should raise_error(MacSpec.assertion_failed_error)
135
+ end
136
+ end