motion-stump 0.2.0 → 0.2.1

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.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 582335357cf4b0b510e0ebb140abfd520f9c05bb
4
+ data.tar.gz: e1571647e3da93c289ef8d443565ab13b00c9722
5
+ SHA512:
6
+ metadata.gz: 37cd5afe544468ce18afe677f6eb0020d6111845f605bf1ebc26916877e5b30431978045a189b1d0d269de58d8c0850f558ed5ab9dc8dc69a5c09b00d6e835b5
7
+ data.tar.gz: d32793edd2866cf12ea63245cf4ef278b0c372fbc1c195ce669a251b267aa7bb9d137db4f9b525f4c478238bb855d5876fb57b6bd31992ca47ab404631f4e81c
data/README.md CHANGED
@@ -7,10 +7,19 @@ Stubbing and mocking for RubyMotion. Based on Jeremy McAnally's [stump](https://
7
7
  ### Stubbing right on the object
8
8
 
9
9
  ```ruby
10
- # Returns 'hey!'
11
- MyClass.stub!(:thing, :return => "hey!")
12
- # Returns nil
13
- your_object.stub!(:hello)
10
+ MyClass.stub!(:thing, :return => "hey!") # => 'hey!'
11
+
12
+ your_object.stub!(:hello) # => nil
13
+
14
+ your_object.stub!(:thing) do |arg1, arg2|
15
+ "Hello #{arg1},#{arg2}"
16
+ end
17
+ your_object.thing("1", "2") # => 'Hello 1,2'
18
+
19
+ your_object.stub!(:hello, :yield => ["1", "2"])
20
+ your_object.hello do |a, b| # yield with "1" and "2"
21
+ puts "#{a}, #{b}"
22
+ end
14
23
  ```
15
24
 
16
25
  ### Pure stub objects
@@ -23,7 +23,8 @@ Motion::Project::App.setup do |app|
23
23
  File.join(File.dirname(__FILE__), 'stump/stub.rb'),
24
24
  File.join(File.dirname(__FILE__), 'stump/mocks.rb'),
25
25
  File.join(File.dirname(__FILE__), 'stump/mock.rb'),
26
- File.join(File.dirname(__FILE__), 'stump/proxy.rb')
26
+ File.join(File.dirname(__FILE__), 'stump/proxy.rb'),
27
+ File.join(File.dirname(__FILE__), 'stump/app_delegate.rb')
27
28
  ].reverse.each {|f| app.files.unshift(f) }
28
29
  end
29
- end
30
+ end
File without changes
@@ -23,6 +23,11 @@ class Object
23
23
  Stump::Mocks.verify([self, method])
24
24
  block.call(*args)
25
25
  end
26
+ elsif options[:yield]
27
+ lambda do |*args|
28
+ Stump::Mocks.verify([self, method])
29
+ yield(options[:yield])
30
+ end
26
31
  else
27
32
  lambda do |*args|
28
33
  Stump::Mocks.verify([self, method])
@@ -32,6 +37,13 @@ class Object
32
37
 
33
38
  meta_def method, &behavior
34
39
  end
40
+
41
+ def should_not_call(method)
42
+ behavior = lambda do |*args|
43
+ should.flunk "Umet expectations: #{method} expected to not be called"
44
+ end
45
+ meta_def method, &behavior
46
+ end
35
47
  end
36
48
 
37
49
  module Kernel
@@ -1,19 +1,25 @@
1
1
  class Object
2
2
  # Create a stub method on an object. Simply returns a value for a method call on
3
3
  # an object.
4
- #
4
+ #
5
5
  # ==== Examples
6
6
  #
7
7
  # my_string = "a wooden rabbit"
8
8
  # my_string.stub!(:retreat!, :return => "run away! run away!")
9
- #
9
+ #
10
10
  # # test/your_test.rb
11
11
  # my_string.retreat! # => "run away! run away!"
12
12
  #
13
- def stub!(method, options = {}, &block)
14
- behavior = (block_given? ? block : proc { return options[:return] })
13
+ def stub!(method_name, options = {}, &stubbed)
14
+ behavior = (block_given? ? stubbed : lambda { return options[:return] })
15
15
 
16
- meta_def method, &behavior
16
+ class << self
17
+ self
18
+ end.instance_eval {
19
+ define_method(method_name) { |*args, &block|
20
+ behavior.call(*args, &block)
21
+ }
22
+ }
17
23
  end
18
24
  end
19
25
 
@@ -21,14 +27,14 @@ module Kernel
21
27
  # Create a pure stub object.
22
28
  #
23
29
  # ==== Examples
24
- #
30
+ #
25
31
  # stubbalicious = stub(:failure, "wat u say?")
26
32
  # stubbalicious.failure # => "wat u say?"
27
33
  #
28
34
  def stub(method, options = {}, &block)
29
35
  stub_object = Object.new
30
36
  stub_object.stub!(method, options, &block)
31
-
37
+
32
38
  stub_object
33
39
  end
34
40
  end
@@ -1,3 +1,3 @@
1
1
  module Stump
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -1,45 +1,144 @@
1
1
  describe "Application 'stump-test'" do
2
- class Hello
2
+
3
+ # Test class for mocking.
4
+ class Dog
5
+ def self.create
6
+ return Dog.new
7
+ end
8
+
9
+ def bark
10
+ "Woof!"
11
+ end
12
+
13
+ def eat(food)
14
+ "#{food}! Yum!"
15
+ end
16
+
17
+ # Calls the given block on the nearest toy, a stuffed mouse.
18
+ def get_toy(&block)
19
+ block.call("stuffed mouse")
20
+ end
21
+
22
+ # Calls the given block on true (for a succesful fetch) and 2 (the time it
23
+ # took to fetch.
24
+ def fetch(&block)
25
+ block.call(true, 20)
26
+ end
27
+ end
28
+
29
+ before do
30
+ @dog = Dog.new
3
31
  end
4
32
 
5
- it "stub on object" do
6
- Hello.stub!(:thing, :return => "hey!")
7
- Hello.should.not.be.nil
8
- Hello.thing.should == "hey!"
33
+ describe "#stub!" do
34
+ it "should stub a class method" do
35
+ Dog.stub!(:thing, return: :thing)
36
+ Dog.should.not.be.nil
37
+ Dog.thing.should == :thing
38
+ end
9
39
 
10
- my_obj = Object.new
11
- my_obj.stub!(:hello)
12
- my_obj.hello.should.be.nil
40
+ it "should stub an instance method" do
41
+ my_obj = Object.new
42
+ my_obj.stub!(:hello, return: "hi")
43
+ my_obj.hello.should.be == "hi"
44
+ end
45
+
46
+ it "should stub using block" do
47
+ my_obj = Object.new
48
+ my_obj.stub!(:hello) do |a, b|
49
+ a.should == "foo"
50
+ b.should == "bar"
51
+ "#{a},#{b}"
52
+ end
53
+ my_obj.hello("foo", "bar").should.be == "foo,bar"
54
+ end
13
55
  end
56
+
57
+ describe "#stub" do
58
+ it "should create a pure stub" do
59
+ my_stub = stub(:thing, return: "dude, a thing!")
60
+ my_stub.thing.should == "dude, a thing!"
61
+ end
14
62
 
15
- it "should create pure stub" do
16
- my_stub = stub(:thing, :return => "dude, a thing!")
17
- my_stub.thing.should == "dude, a thing!"
63
+ it "should create a stub using block" do
64
+ my_stub = stub(:thing) do |a, b|
65
+ a.should == "a"
66
+ b.should == "thing!"
67
+ "dude, #{a} #{b}"
68
+ end
69
+ my_stub.thing("a", "thing!").should == "dude, a thing!"
70
+ end
18
71
  end
19
72
 
20
- it "should mock object" do
21
- my_object = "things are fun"
22
- my_object.mock!(:fancy, :return => "ooo fancy!")
23
- my_object.mock!(:tancy, :return => "ooo tancy!")
24
- my_object.fancy.should == 'ooo fancy!'
25
- my_object.tancy.should == 'ooo tancy!'
73
+ describe "#mock!" do
74
+ it "should mock an instance method on an object" do
75
+ @dog.mock!(:bark, return: "Meow!")
76
+ @dog.mock!(:eat, return: "Yuck!")
77
+ @dog.bark.should == "Meow!"
78
+ @dog.eat("broccoli").should == "Yuck!"
79
+ end
80
+
81
+ it "should mock using block" do
82
+ @dog.mock!(:bark) do |a|
83
+ a.should == "Meow!"
84
+ a
85
+ end
86
+ @dog.bark("Meow!").should == "Meow!"
87
+ end
88
+
89
+ it "should mock a class method" do
90
+ Dog.mock!(:create, return: "Dog")
91
+ Dog.create.should == "Dog"
92
+ end
93
+
94
+ it "should be able to yield a single object" do
95
+ @dog.mock!(:get_toy, yield: "stuffed fox")
96
+ @dog.get_toy do |toy|
97
+ toy.should.be == "stuffed fox"
98
+ end
99
+ end
100
+
101
+ it "should be able to yield multiple objects" do
102
+ @dog.mock!(:fetch, yield: [false, 10])
103
+ @dog.fetch do |success, time|
104
+ success.should.be == success
105
+ time.should.be == 10
106
+ end
107
+ end
26
108
  end
27
109
 
28
- it "should create pure mock" do
29
- my_mock = mock(:hello, :return => "what fun is this?")
30
- my_mock.hello.should == "what fun is this?"
110
+ describe "#mock" do
111
+ it "should create pure mock" do
112
+ my_mock = mock(:hello, return: "hi")
113
+ my_mock.hello.should == "hi"
114
+ end
31
115
  end
32
116
 
33
- # class Greeting
34
- # def bonjour
35
- # "Bonjour!"
36
- # end
37
- # end
117
+ describe "#should_not_call" do
118
+ it "should raise an error with an instance method" do
119
+ @dog.should_not_call(:bark)
120
+ should.raise(Bacon::Error) do
121
+ @dog.bark
122
+ end
123
+ end
124
+
125
+ it "should succeed if the call is not made" do
126
+ should.not.raise(Bacon::Error) do
127
+ @dog.should_not_call(:bark)
128
+ end
129
+ end
38
130
 
39
- # it "should use proxy objects" do
40
- # greet_me = Greeting.new
41
- # greet_me.proxy!(:bonjour)
42
- # greet_me.bonjour # => "Bonjour!"
43
- # end
131
+ it "should not fail in another test" do
132
+ should.not.raise(Bacon::Error) do
133
+ @dog.bark
134
+ end
135
+ end
44
136
 
137
+ it "should raise an error with a class method" do
138
+ Dog.should_not_call(:create)
139
+ should.raise(Bacon::Error) do
140
+ Dog.create
141
+ end
142
+ end
143
+ end
45
144
  end
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: motion-stump
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
5
- prerelease:
4
+ version: 0.2.1
6
5
  platform: ruby
7
6
  authors:
8
7
  - Francis Chong
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2012-10-06 00:00:00.000000000 Z
11
+ date: 2013-03-17 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: motion-redgreen
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :development
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ~>
28
25
  - !ruby/object:Gem::Version
@@ -30,17 +27,15 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - '>='
36
32
  - !ruby/object:Gem::Version
37
33
  version: '0'
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - '>='
44
39
  - !ruby/object:Gem::Version
45
40
  version: '0'
46
41
  description: Stubbing and mocking for RubyMotion
@@ -56,8 +51,8 @@ files:
56
51
  - License.txt
57
52
  - README.md
58
53
  - Rakefile
59
- - app/app_delegate.rb
60
54
  - lib/motion-stump.rb
55
+ - lib/stump/app_delegate.rb
61
56
  - lib/stump/metaid.rb
62
57
  - lib/stump/mock.rb
63
58
  - lib/stump/mocks.rb
@@ -69,33 +64,26 @@ files:
69
64
  - spec/main_spec.rb
70
65
  homepage: https://github.com/siuying/motion-stump
71
66
  licenses: []
67
+ metadata: {}
72
68
  post_install_message:
73
69
  rdoc_options: []
74
70
  require_paths:
75
71
  - lib
76
72
  required_ruby_version: !ruby/object:Gem::Requirement
77
- none: false
78
73
  requirements:
79
- - - ! '>='
74
+ - - '>='
80
75
  - !ruby/object:Gem::Version
81
76
  version: '0'
82
- segments:
83
- - 0
84
- hash: 800842307904232879
85
77
  required_rubygems_version: !ruby/object:Gem::Requirement
86
- none: false
87
78
  requirements:
88
- - - ! '>='
79
+ - - '>='
89
80
  - !ruby/object:Gem::Version
90
81
  version: '0'
91
- segments:
92
- - 0
93
- hash: 800842307904232879
94
82
  requirements: []
95
83
  rubyforge_project:
96
- rubygems_version: 1.8.24
84
+ rubygems_version: 2.0.0
97
85
  signing_key:
98
- specification_version: 3
86
+ specification_version: 4
99
87
  summary: Stubbing and mocking for RubyMotion
100
88
  test_files:
101
89
  - spec/main_spec.rb