cells 3.3.10 → 3.4.0.beta1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (103) hide show
  1. data/CHANGES +0 -8
  2. data/Gemfile +4 -1
  3. data/README.rdoc +91 -107
  4. data/Rakefile +0 -4
  5. data/lib/cell.rb +5 -6
  6. data/lib/{cells/cell → cell}/active_helper.rb +1 -1
  7. data/lib/cell/base.rb +134 -0
  8. data/lib/cell/base_methods.rb +100 -0
  9. data/lib/cell/caching.rb +153 -0
  10. data/lib/cell/rails.rb +239 -0
  11. data/lib/cells.rb +25 -3
  12. data/lib/cells/assertions_helper.rb +1 -1
  13. data/lib/cells/helpers/capture_helper.rb +3 -3
  14. data/lib/cells/rails.rb +65 -4
  15. data/lib/cells/version.rb +3 -1
  16. data/rails_generators/cell/cell_generator.rb +47 -35
  17. data/rails_generators/cell/templates/cell.rb +1 -1
  18. data/rails_generators/cells_install/cells_install_generator.rb +5 -3
  19. data/rails_generators/erb/cell_generator.rb +20 -0
  20. data/rails_generators/{cell → erb}/templates/view.html.erb +0 -0
  21. data/test/active_helper_test.rb +1 -0
  22. data/test/app/cells/bad_guitarist_cell.rb +2 -0
  23. data/test/app/cells/bassist_cell.rb +1 -1
  24. data/test/app/controllers/musician_controller.rb +16 -0
  25. data/test/assertions_helper_test.rb +8 -18
  26. data/test/base_methods_test.rb +40 -0
  27. data/test/cell_generator_test.rb +33 -21
  28. data/test/helper_test.rb +31 -123
  29. data/test/rails/caching_test.rb +215 -0
  30. data/test/rails/capture_test.rb +52 -0
  31. data/test/rails/cells_test.rb +88 -0
  32. data/test/rails/integration_test.rb +37 -0
  33. data/test/rails/render_test.rb +140 -0
  34. data/test/rails/router_test.rb +74 -0
  35. data/test/rails/view_test.rb +24 -0
  36. data/test/test_helper.rb +30 -29
  37. metadata +68 -133
  38. data/.gitignore +0 -3
  39. data/about.yml +0 -7
  40. data/cells.gemspec +0 -26
  41. data/lib/cells/cell.rb +0 -16
  42. data/lib/cells/cell/base.rb +0 -470
  43. data/lib/cells/cell/caching.rb +0 -163
  44. data/lib/cells/cell/test_case.rb +0 -158
  45. data/lib/cells/cell/view.rb +0 -55
  46. data/lib/cells/rails/action_controller.rb +0 -37
  47. data/lib/cells/rails/action_view.rb +0 -37
  48. data/rails/init.rb +0 -44
  49. data/rails_generators/cells_install/templates/tasks.rake +0 -6
  50. data/test/app/cells/a/another_state.html.erb +0 -1
  51. data/test/app/cells/a/existing_view.html.erb +0 -1
  52. data/test/app/cells/a/inherited_view.html.erb +0 -1
  53. data/test/app/cells/a/inherited_view.js.erb +0 -1
  54. data/test/app/cells/a/view_with_locals.html.erb +0 -1
  55. data/test/app/cells/a/view_with_render_call.html.erb +0 -1
  56. data/test/app/cells/b/existing_view.html.erb +0 -1
  57. data/test/app/cells/b/existing_view.js.erb +0 -1
  58. data/test/app/cells/b/layouts/metal.html.erb +0 -1
  59. data/test/app/cells/b/view_with_render_call.html.erb +0 -1
  60. data/test/app/cells/bassist/jam.html.erb +0 -3
  61. data/test/app/cells/bassist/play.html.erb +0 -1
  62. data/test/app/cells/cells_test_one/renamed_instance_view.html.erb +0 -1
  63. data/test/app/cells/cells_test_one/super_state.html.erb +0 -1
  64. data/test/app/cells/cells_test_one_cell.rb +0 -20
  65. data/test/app/cells/cells_test_two_cell.rb +0 -4
  66. data/test/app/cells/helper_using/state_using_application_helper.html.erb +0 -3
  67. data/test/app/cells/helper_using/state_with_automatic_helper_invocation.html.erb +0 -3
  68. data/test/app/cells/helper_using/state_with_helper_invocation.html.erb +0 -3
  69. data/test/app/cells/helper_using/state_with_helper_method_invocation.html.erb +0 -3
  70. data/test/app/cells/layouts/metal.html.erb +0 -1
  71. data/test/app/cells/my_child/hello.html.erb +0 -1
  72. data/test/app/cells/my_mother/bye.html.erb +0 -1
  73. data/test/app/cells/my_mother/hello.html.erb +0 -1
  74. data/test/app/cells/my_test/_broken_partial.html.erb +0 -1
  75. data/test/app/cells/my_test/_partial.html.erb +0 -1
  76. data/test/app/cells/my_test/state_with_instance_var.html.erb +0 -1
  77. data/test/app/cells/my_test/state_with_link_to.html.erb +0 -3
  78. data/test/app/cells/my_test/state_with_not_included_helper_method.html.erb +0 -8
  79. data/test/app/cells/my_test/view_containing_broken_partial.html.erb +0 -3
  80. data/test/app/cells/my_test/view_containing_nonexistant_partial.html.erb +0 -3
  81. data/test/app/cells/my_test/view_containing_partial.html.erb +0 -3
  82. data/test/app/cells/my_test/view_containing_partial_without_cell_name.html.erb +0 -3
  83. data/test/app/cells/my_test/view_in_local_test_views_dir.html.erb +0 -1
  84. data/test/app/cells/my_test/view_with_explicit_english_translation.en.html.erb +0 -1
  85. data/test/app/cells/my_test/view_with_explicit_english_translation.html.erb +0 -1
  86. data/test/app/cells/my_test/view_with_instance_var.html.erb +0 -4
  87. data/test/app/cells/really_module/nested/happy_state.html.erb +0 -1
  88. data/test/app/cells/really_module/nested_cell.rb +0 -11
  89. data/test/app/cells/simple/two_templates_state.html.mytpl +0 -1
  90. data/test/app/cells/simple_cell.rb +0 -7
  91. data/test/app/cells/test/beep.html.erb +0 -1
  92. data/test/app/cells/test/state_invoking_capture.html.erb +0 -7
  93. data/test/app/cells/test/state_invoking_content_for.html.erb +0 -7
  94. data/test/app/cells/test/state_invoking_content_for_twice.html.erb +0 -9
  95. data/test/app/cells/test/state_with_not_included_helper_method.html.erb +0 -8
  96. data/test/app/cells/two_helpers_including/state_using_another_helper.html.erb +0 -3
  97. data/test/bugs_test.rb +0 -23
  98. data/test/caching_test.rb +0 -270
  99. data/test/capture_helper_test.rb +0 -59
  100. data/test/cells_test.rb +0 -352
  101. data/test/rails_test.rb +0 -35
  102. data/test/render_test.rb +0 -305
  103. data/test/test_case_test.rb +0 -106
@@ -0,0 +1,215 @@
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), '..', 'test_helper')
3
+
4
+ class DirectorCell < Cell::Rails
5
+ cache :count
6
+ @@counter = 0
7
+
8
+ def count
9
+ @@counter += 1
10
+ render :text => @@counter
11
+ end
12
+ end
13
+
14
+ class CachingTest < ActiveSupport::TestCase
15
+ context "A cell" do
16
+ setup do
17
+ ::ActionController::Base.cache_store = :memory_store
18
+ ::ActionController::Base.perform_caching = true
19
+ end
20
+
21
+ should "respond to state_cached?" do
22
+ assert cell(:director).state_cached?(:count)
23
+ assert_not cell(:director).state_cached?(:sing)
24
+ end
25
+
26
+ context "caching a state" do
27
+ setup do
28
+ @proc = Proc.new{}
29
+ end
30
+
31
+ should "save the version proc" do
32
+ DirectorCell.cache :count, @proc
33
+
34
+ assert_equal @proc, cell(:director).class.version_procs[:count]
35
+ assert_equal({}, cell(:director).class.cache_options[:count])
36
+ end
37
+
38
+ should "save the cache options" do
39
+ DirectorCell.cache :count, @proc, :expires_in => 10.minutes
40
+
41
+ assert_equal @proc, cell(:director).class.version_procs[:count]
42
+ assert_equal({:expires_in => 10.minutes}, cell(:director).class.cache_options[:count])
43
+ end
44
+
45
+ should "not mix caching configuration with other classes" do
46
+ DirectorCell.cache :count
47
+ class SecondDirectorCell < DirectorCell; end
48
+ SecondDirectorCell.cache :count, @proc
49
+
50
+ assert_equal nil, cell(:director).class.version_procs[:count]
51
+ assert_equal @proc, cell(:"caching_test/second_director").class.version_procs[:count]
52
+ end
53
+ end
54
+
55
+ context "caching without options" do
56
+ setup do
57
+ DirectorCell.class_eval do
58
+ @@counter = 0
59
+ cattr_accessor :count
60
+ end
61
+
62
+ key = cell(:director).cache_key(:count, :count => 0)
63
+ Cell::Base.expire_cache_key(key) ### TODO: separate test
64
+ end
65
+
66
+ should "cache forever" do
67
+ DirectorCell.class_eval do
68
+ cache :count
69
+ end
70
+
71
+ assert cell(:director).state_cached?(:count)
72
+ assert_equal nil, cell(:director).class.version_procs[:count]
73
+ assert_equal({}, cell(:director).class.cache_options[:count])
74
+
75
+ assert_equal render_cell(:director, :count), render_cell(:director, :count)
76
+ end
77
+
78
+ should "not cache at all" do
79
+ DirectorCell.class_eval do
80
+ def dictate
81
+ @@counter += 1
82
+ render :text => @@counter
83
+ end
84
+ end
85
+
86
+ assert_equal "1", render_cell(:director, :dictate)
87
+ assert_equal "2", render_cell(:director, :dictate)
88
+ end
89
+
90
+ should "expire the cache with a version proc" do
91
+ DirectorCell.class_eval do
92
+ cache :count, Proc.new { |cell|
93
+ cell.class.count >= 2 ? {:count => 2} : {:count => 0}
94
+ }
95
+
96
+ def count
97
+ render :text => @@count += 1
98
+ #@@count
99
+ end
100
+ end
101
+ DirectorCell.count = 0
102
+
103
+ assert_equal "1", render_cell(:director, :count)
104
+ assert_equal "1", render_cell(:director, :count) # cached.
105
+
106
+ DirectorCell.count = 2 # invalidates the view cache.
107
+ assert_equal "3", render_cell(:director, :count)
108
+ assert_equal "3", render_cell(:director, :count) # cached.
109
+ end
110
+
111
+ should "expire the cache with an instance method" do
112
+ DirectorCell.class_eval do
113
+ cache :count, :expire_count
114
+
115
+ def expire_count
116
+ self.class.count >= 2 ? {:count => 2} : {:count => 0}
117
+ end
118
+
119
+ def count
120
+ @@count += 1
121
+ render :text => @@count
122
+ end
123
+ end
124
+ DirectorCell.count = 0
125
+
126
+ assert_equal "1", render_cell(:director, :count)
127
+ assert_equal "1", render_cell(:director, :count) # cached.
128
+
129
+ DirectorCell.count = 2 # invalidates the view cache.
130
+ assert_equal "3", render_cell(:director, :count)
131
+ assert_equal "3", render_cell(:director, :count) # cached.
132
+ end
133
+ end
134
+ end
135
+
136
+ context "cache_key" do
137
+ setup do
138
+ @cell = cell(:director)
139
+ end
140
+
141
+ should "respond to cache_key" do
142
+ assert_equal "cells/director/count", @cell.cache_key(:count)
143
+ assert_equal @cell.cache_key(:count), ::Cell::Base.cache_key_for(:director, :count)
144
+ end
145
+
146
+ should "order options lexically" do
147
+ assert_equal "cells/director/count/a=1/b=2", @cell.cache_key(:count, :b => 2, :a => 1)
148
+ end
149
+ end
150
+
151
+ context "expire_cache_key" do
152
+ setup do
153
+ DirectorCell.class_eval do
154
+ cache :count
155
+ def count
156
+ render :text => @@count += 1
157
+ end
158
+ end
159
+ DirectorCell.count = 0
160
+
161
+ @key = cell(:director).cache_key(:count)
162
+ render_cell(:director, :count)
163
+ assert_equal "1", ::Cell::Base.cache_store.read(@key)
164
+ end
165
+
166
+ should "delete the view from cache" do
167
+ ::Cell::Base.expire_cache_key(@key)
168
+ assert_not ::Cell::Base.cache_store.read(@key)
169
+ end
170
+
171
+ should "be available in controllers for sweepers" do
172
+ MusicianController.new.expire_cell_state(:director, :count)
173
+ assert_not ::Cell::Base.cache_store.read(@key)
174
+ end
175
+
176
+ should "accept cache options" do
177
+ key = cell(:director).cache_key(:count, :volume => 9)
178
+ assert ::Cell::Base.cache_store.write(key, 'ONE!')
179
+
180
+ MusicianController.new.expire_cell_state(:director, :count, :volume => 9)
181
+ assert_not ::Cell::Base.cache_store.read(key)
182
+ end
183
+ end
184
+
185
+ def test_find_family_view_for_state_with_caching
186
+ # test environment: --------------------------------------
187
+ BassistCell.instance_variable_set :@state2view_cache, {}
188
+ assert_equal({}, BassistCell.state2view_cache)
189
+
190
+ BassistCell.instance_eval do
191
+ self.default_template_format = :html
192
+
193
+ def play; render; end
194
+ end
195
+
196
+
197
+ cell = cell(:bassist)
198
+ cell.class.instance_eval do
199
+ def cache_configured?; false; end
200
+ end
201
+ cell.render_state :play
202
+ # in development/test environment, no view name caching should happen,
203
+ # if perform_caching is false.
204
+ assert_equal({}, BassistCell.state2view_cache)
205
+
206
+ # production environment: --------------------------------
207
+ cell = BassistCell.new(@controller)
208
+ cell.class.instance_eval do
209
+ def cache_configured?; true; end
210
+ end
211
+
212
+ cell.render_state :play
213
+ assert BassistCell.state2view_cache["play/html"]
214
+ end
215
+ end
@@ -0,0 +1,52 @@
1
+ # encoding: utf-8
2
+ require File.join(File.dirname(__FILE__), '/../test_helper')
3
+
4
+ class ProducerCell < Cell::Base
5
+ helper ::Cells::Helpers::CaptureHelper
6
+
7
+ def logger(*args); puts args.inspect; end
8
+ end
9
+
10
+ class RailsCaptureTest < ActionController::TestCase
11
+ context "A Rails controller rendering cells" do
12
+ setup do
13
+ @routes = ActionDispatch::Routing::RouteSet.new
14
+ @routes.draw do
15
+ |map| match ':action', :to => MusicianController
16
+ end
17
+ @controller = MusicianController.new
18
+ end
19
+
20
+ should "see content from global_capture" do
21
+ @controller.class_eval do
22
+ def featured
23
+ render :inline => '<h3><%= @recorded %></h3>' << render_cell(:producer, :capture)
24
+ end
25
+ end
26
+
27
+ ProducerCell.class_eval do
28
+ def capture; render; end
29
+ end
30
+
31
+ get 'featured'
32
+ assert_equal '<h3>DummDoo</h3> DummDoo', @response.body
33
+ end
34
+
35
+
36
+ should "see yieldable content from global_content_for" do
37
+ @controller.class_eval do
38
+ def featured
39
+ render_cell(:producer, :content_for)
40
+ render :inline => '<pre><%= yield :recorded %></pre>'
41
+ end
42
+ end
43
+
44
+ ProducerCell.class_eval do
45
+ def content_for; render; end
46
+ end
47
+
48
+ get 'featured'
49
+ assert_equal "\n<pre>DummDooDiiDoo</pre>", @response.body
50
+ end
51
+ end
52
+ end
@@ -0,0 +1,88 @@
1
+ require File.join(File.dirname(__FILE__), '/../test_helper')
2
+
3
+
4
+ class RailsCellsTest < ActiveSupport::TestCase
5
+ context "A rails cell" do
6
+ should "respond to view_paths" do
7
+ assert_kind_of ActionView::PathSet, Cell::Rails.view_paths, "must be a PathSet for proper template caching/reloading (see issue#2)"
8
+ end
9
+
10
+ should "respond to view_paths=" do
11
+ swap( Cell::Base, :view_paths => ['you', 'are', 'here']) do
12
+ assert_kind_of ActionView::PathSet, Cell::Base.view_paths, "must not wipe out the PathSet"
13
+ end
14
+ end
15
+
16
+
17
+ context "invoking defaultize_render_options_for" do
18
+ should "set default values" do
19
+ cell(:bassist).class.default_template_format = :html ### FIXME: remove and get it working.
20
+
21
+ options = cell(:bassist).defaultize_render_options_for({}, :play)
22
+
23
+ assert_equal :html, options[:template_format]
24
+ assert_equal :play, options[:view]
25
+ end
26
+
27
+ should "allow overriding defaults" do
28
+ assert cell(:bassist).defaultize_render_options_for({:view => :slap}, :play)[:view] == :slap
29
+ end
30
+ end
31
+
32
+ context "invoking find_family_view_for_state" do
33
+ should "### use find_template" do
34
+ assert cell(:bassist).find_template("bassist/play")
35
+ assert_raises ActionView::MissingTemplate do
36
+ cell(:bassist).find_template("bassist/playyy")
37
+ end
38
+ end
39
+
40
+
41
+ should "return play.html.erb" do
42
+ assert_equal "bassist/play", cell(:bassist).find_family_view_for_state(:play).virtual_path
43
+ end
44
+
45
+ should "find inherited play.html.erb" do
46
+ assert_equal "bassist/play", cell(:bad_guitarist).find_family_view_for_state(:play).virtual_path
47
+ end
48
+
49
+ should_eventually "find the EN-version if i18n instructs" do
50
+ swap I18n, :locale => :en do
51
+ assert_equal "bassist/yell.en.html.erb", cell(:bassist).find_family_view_for_state(:yell).virtual_path
52
+ end
53
+ end
54
+
55
+
56
+ should_eventually "return an already cached family view"
57
+ end
58
+
59
+ context "delegation" do
60
+ setup do
61
+ @request = ActionController::TestRequest.new
62
+ @request.env["action_dispatch.request.request_parameters"] = {:song => "Creatures"}
63
+ @cell = cell(:bassist)
64
+ @cell.request= @request
65
+ end
66
+
67
+ should_eventually "delegate log" do
68
+ assert_nothing_raised do
69
+ cell(:bassist).class.logger.info("everything is perfect!")
70
+ end
71
+ end
72
+
73
+ should "respond to session" do
74
+ assert_kind_of Hash, @cell.session
75
+ end
76
+ end
77
+
78
+
79
+ should "precede cell ivars over controller ivars" do
80
+ @controller.instance_variable_set(:@note, "E")
81
+ BassistCell.class_eval do
82
+ def slap; @note = "A"; render; end
83
+ end
84
+ assert_equal "Boing in A", render_cell(:bassist, :slap)
85
+ end
86
+
87
+ end
88
+ end
@@ -0,0 +1,37 @@
1
+ require File.join(File.dirname(__FILE__), '/../test_helper')
2
+
3
+ require 'active_support/core_ext/object/to_query'
4
+
5
+ class RailsIntegrationTest < ActionController::TestCase
6
+
7
+ context "A Rails controller" do
8
+ setup do
9
+ @routes = ActionDispatch::Routing::RouteSet.new
10
+ @routes.draw do
11
+ |map| match ':action', :to => MusicianController
12
+ end
13
+ @controller = MusicianController.new
14
+ end
15
+
16
+ should "respond to render_cell" do
17
+ get 'promotion'
18
+ assert_equal "Doo", @response.body
19
+ end
20
+
21
+ should "respond to render_cell in the view" do
22
+ get 'featured'
23
+ assert_equal "Doo", @response.body
24
+ end
25
+
26
+ should "make params (and friends) available in a cell" do
27
+ BassistCell.class_eval do
28
+ def listen
29
+ render :text => "That's a #{params[:note]}"
30
+ end
31
+ end
32
+ get 'skills', :note => "D"
33
+ assert_equal "That's a D", @response.body
34
+ end
35
+ end
36
+
37
+ end
@@ -0,0 +1,140 @@
1
+ require File.join(File.dirname(__FILE__), '/../test_helper')
2
+ require 'builder'
3
+
4
+ class RailsRenderTest < ActiveSupport::TestCase
5
+ context "Invoking render" do
6
+
7
+ should "render a plain view" do
8
+ BassistCell.class_eval do
9
+ def play; render; end
10
+ end
11
+ assert_equal "Doo", render_cell(:bassist, :play)
12
+ end
13
+
14
+ should "also render alternative engines" do
15
+ BassistCell.class_eval do
16
+ def sing; @xm = Builder::XmlMarkup.new; render; end
17
+ end
18
+ assert_equal "", render_cell(:bassist, :sing) ### FIXME: where's the rendered xml?
19
+ end
20
+
21
+ should "accept the :template_format option" do
22
+
23
+ end
24
+
25
+ should "accept the :nothing option" do
26
+ BassistCell.class_eval do
27
+ def sleep; render :nothing => true; end
28
+ end
29
+ assert_equal "", render_cell(:bassist, :sleep)
30
+ end
31
+
32
+
33
+ should "accept the :view option" do
34
+ BassistCell.class_eval do
35
+ def solo; render :view => :play; end
36
+ end
37
+ assert_equal "Doo", render_cell(:bassist, :solo)
38
+ end
39
+
40
+ should "accept the :text options" do
41
+ BassistCell.class_eval do
42
+ def sing; render :text => "Shoobie"; end
43
+ end
44
+ assert_equal "Shoobie", render_cell(:bassist, :sing)
45
+ end
46
+
47
+ should "accept the :inline option" do
48
+ BassistCell.class_eval do
49
+ def sleep; render :inline => "<%= 'Snooore' %>"; end
50
+ end
51
+ assert_equal "Snooore", render_cell(:bassist, :sleep)
52
+ end
53
+
54
+ should "accept the :state option" do
55
+ BassistCell.class_eval do
56
+ def play; render; end
57
+ def groove; render :state => :play; end
58
+ end
59
+ assert_equal "Doo", render_cell(:bassist, :groove)
60
+ end
61
+
62
+ should "accept the :locals option" do
63
+ BassistCell.class_eval do
64
+ def ahem; render :locals => {:times => 2}; end
65
+ end
66
+ assert_equal "AhemAhem", render_cell(:bassist, :ahem)
67
+ end
68
+
69
+
70
+ # layout
71
+ should "accept the :layout option" do
72
+ BassistCell.class_eval do
73
+ def play; render :layout => 'b'; end
74
+ end
75
+ assert_equal "<b>Doo</b>", render_cell(:bassist, :play)
76
+ end
77
+
78
+ should "raise an error for a non-existent template" do
79
+ BassistCell.class_eval do
80
+ def groove; render; end
81
+ end
82
+
83
+ assert_raises ActionView::MissingTemplate do
84
+ render_cell(:bassist, :groove)
85
+ end
86
+
87
+ ### TODO: test error message sanity.
88
+ end
89
+
90
+ should "render instance variables from the cell" do
91
+ BassistCell.class_eval do
92
+ def slap
93
+ @note = "D"; render
94
+ end
95
+ end
96
+ assert_equal "Boing in D", render_cell(:bassist, :slap)
97
+ end
98
+
99
+ should "allow subsequent calls to render in the rendered view" do
100
+ BassistCell.class_eval do
101
+ def jam; @chords = [:a, :c]; render; end
102
+ def play; render; end
103
+ end
104
+ assert_equal "Doo\nDoo\n", render_cell(:bassist, :jam)
105
+ end
106
+
107
+ should "allow multiple calls to render" do
108
+ BassistCell.class_eval do
109
+ def play; render + render + render; end
110
+ end
111
+ assert_equal "DooDooDoo", render_cell(:bassist, :play)
112
+ end
113
+
114
+
115
+
116
+
117
+ # inheriting
118
+ should "inherit play.html.erb from BassistCell" do
119
+ assert_equal "Doo", render_cell(:bad_guitarist, :play)
120
+ end
121
+ end
122
+
123
+ context "A cell view" do
124
+ # rails view api
125
+ should "allow calls to params/response/..." do
126
+ BassistCell.class_eval do
127
+ def pose; render; end
128
+ end
129
+
130
+ @request.env["action_dispatch.request.request_parameters"] = {:what => 'get'}
131
+ @cell = cell(:bassist)
132
+ @cell.request = @request ### FIXME.
133
+
134
+ assert_equal "Come and get me!", @cell.render_state(:pose)
135
+ end
136
+
137
+
138
+ end
139
+
140
+ end