flok 0.0.103 → 0.0.105

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.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/app/drivers/chrome/config.yml +2 -0
  3. data/app/drivers/chrome/src/about.js +14 -0
  4. data/app/drivers/chrome/src/guid.js +9 -0
  5. data/app/drivers/chrome/src/net.js +25 -3
  6. data/app/kern/mod/about.js +19 -0
  7. data/app/kern/mod/hook.js +2 -2
  8. data/app/kern/mod/udid.js +9 -0
  9. data/app/kern/services/rest.rb +67 -8
  10. data/bin/flok +14 -0
  11. data/docs/mod/about.md +19 -0
  12. data/docs/mod/net.md +9 -4
  13. data/docs/mod/ui.md +1 -1
  14. data/docs/services/rest.md +24 -2
  15. data/docs/services/vm.md +4 -0
  16. data/docs/user_handbook/hooks.md +61 -5
  17. data/lib/flok/hooks_compiler.rb +6 -0
  18. data/lib/flok/user_compiler.rb +33 -5
  19. data/lib/flok/user_hook_generators/goto.rb +25 -3
  20. data/lib/flok/user_hook_generators/pop.rb +99 -0
  21. data/lib/flok/user_hook_generators/push.rb +119 -0
  22. data/lib/flok/version.rb +1 -1
  23. data/spec/iface/driver/about_spec.rb +14 -0
  24. data/spec/iface/driver/net_spec.rb +91 -2
  25. data/spec/iface/driver/ping_spec.rb +1 -0
  26. data/spec/kern/about_spec.rb +30 -0
  27. data/spec/kern/assets/hook_entry_points/controller0a_push.rb +31 -0
  28. data/spec/kern/assets/hook_entry_points/controller0b.rb +17 -0
  29. data/spec/kern/assets/hook_entry_points/controller0bc.rb +27 -0
  30. data/spec/kern/assets/hook_entry_points/controller_0b_pop.rb +18 -0
  31. data/spec/kern/assets/hook_entry_points/controller_0b_pop2.rb +66 -0
  32. data/spec/kern/assets/hook_entry_points/controller_0b_push.rb +15 -0
  33. data/spec/kern/assets/hook_entry_points/controller_0b_push2.rb +55 -0
  34. data/spec/kern/assets/rest_service/controller1b.rb +47 -0
  35. data/spec/kern/hook_entry_points_and_manifest_spec.rb +174 -0
  36. data/spec/kern/{hook_user_generators_spec.rb → hook_goto_user_generators_spec.rb} +145 -7
  37. data/spec/kern/hook_pop_user_generators_spec.rb +292 -0
  38. data/spec/kern/hook_push_user_generators_spec.rb +305 -0
  39. data/spec/kern/rest_service_spec.rb +97 -1
  40. data/spec/lib/helpers.rb +5 -3
  41. metadata +35 -5
  42. data/lib/flok/user_hook_generators/helpers.rb +0 -46
@@ -9,7 +9,7 @@ require './spec/lib/rspec_extensions.rb'
9
9
  require './lib/flok/hooks_compiler.rb'
10
10
  require 'zlib'
11
11
 
12
- RSpec.describe "kern:hook_user_geenrators_spec" do
12
+ RSpec.describe "kern:hook_goto_user_generators_spec" do
13
13
  include Zlib
14
14
  include_context "kern"
15
15
 
@@ -58,6 +58,31 @@ RSpec.describe "kern:hook_user_geenrators_spec" do
58
58
  expect { @driver.ignore_up_to("if_hook_event", 0) }.to raise_error(/Waited for/) # At this point, we should have not received any events for if_hook_event, as we are not selecting the embedded controller
59
59
  end
60
60
 
61
+ it "Can use the :goto hook generator for a controller with the triggered_by constraint for various actions" do
62
+ #Hook source code
63
+ hooks_src = %{
64
+ hook :goto => :goto do
65
+ triggered_by "back_clicked"
66
+ end
67
+ }
68
+
69
+ #Get a new js context with the controllers source and the hooks source
70
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0.rb'), nil, nil, hooks_src
71
+ File.write File.expand_path("~/Downloads/src.txt"), info[:src]
72
+ ctx = info[:ctx]
73
+
74
+ #Run the embed function
75
+ dump = ctx.evald %{
76
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
77
+ int_dispatch([]); // Dispatch any events the are pending
78
+ dump.my_other_controller_base = my_other_controller_base; // Grab the base address of 'my_other_controller'
79
+ }
80
+
81
+ @driver.int "int_event", [ dump["my_other_controller_base"], "back_clicked", {} ]
82
+ @driver.ignore_up_to("if_hook_event", 0)
83
+ end
84
+
85
+
61
86
  it "Can use the :goto hook generator for a controller with the to_action_responds_to constraint for various actions" do
62
87
  #Hook source code
63
88
  hooks_src = %{
@@ -136,6 +161,120 @@ RSpec.describe "kern:hook_user_geenrators_spec" do
136
161
  expect { @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0 }.not_to raise_error
137
162
  end
138
163
 
164
+ it "Can use the :goto hook generator for a controller with the to_action constraint for various actions" do
165
+ #Hook source code
166
+ hooks_src = %{
167
+ hook :goto => :goto do
168
+ to_action "other"
169
+ end
170
+ }
171
+
172
+ #Get a new js context with the controllers source and the hooks source
173
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0bc.rb'), nil, nil, hooks_src
174
+ File.write File.expand_path("~/Downloads/src.txt"), info[:src]
175
+ ctx = info[:ctx]
176
+
177
+ #Run the embed function
178
+ dump = ctx.evald %{
179
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
180
+ int_dispatch([]); // Dispatch any events the are pending
181
+ dump.my_controller_base = my_controller_base;
182
+ }
183
+
184
+ #Should raise a hook at this time
185
+ expect { @driver.ignore_up_to("if_hook_event", 0) }.to raise_error(/Waited for/)
186
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
187
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
188
+
189
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
190
+ expect { @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0 }.to raise_error /Waited/
191
+ end
192
+
193
+ it "Can use the :goto hook generator for a controller with the to_action constraint for multiple actions" do
194
+ #Hook source code
195
+ hooks_src = %{
196
+ hook :goto => :goto do
197
+ to_action "other", "other2"
198
+ end
199
+ }
200
+
201
+ #Get a new js context with the controllers source and the hooks source
202
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0bc.rb'), nil, nil, hooks_src
203
+ File.write File.expand_path("~/Downloads/src.txt"), info[:src]
204
+ ctx = info[:ctx]
205
+
206
+ #Run the embed function
207
+ dump = ctx.evald %{
208
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
209
+ int_dispatch([]); // Dispatch any events the are pending
210
+ dump.my_controller_base = my_controller_base;
211
+ }
212
+
213
+ #Should raise a hook at this time
214
+ expect { @driver.ignore_up_to("if_hook_event", 0) }.to raise_error(/Waited for/)
215
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
216
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
217
+
218
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
219
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
220
+ end
221
+
222
+
223
+ it "Can use the :goto hook generator for a controller with the from_action constraint for various actions" do
224
+ #Hook source code
225
+ hooks_src = %{
226
+ hook :goto => :goto do
227
+ from_action "index"
228
+ end
229
+ }
230
+
231
+ #Get a new js context with the controllers source and the hooks source
232
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0b.rb'), nil, nil, hooks_src
233
+ File.write File.expand_path("~/Downloads/src.txt"), info[:src]
234
+ ctx = info[:ctx]
235
+
236
+ #Run the embed function
237
+ dump = ctx.evald %{
238
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
239
+ int_dispatch([]); // Dispatch any events the are pending
240
+ dump.my_controller_base = my_controller_base;
241
+ }
242
+
243
+ #Should raise a hook at this time
244
+ expect { @driver.ignore_up_to("if_hook_event", 0) }.to raise_error(/Waited for/)
245
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
246
+ expect { @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0 }.not_to raise_error
247
+ end
248
+
249
+ it "Can use the :goto hook generator for a controller with the from_action constraint for multiple actions" do
250
+ #Hook source code
251
+ hooks_src = %{
252
+ hook :goto => :goto do
253
+ from_action "index", "other"
254
+ end
255
+ }
256
+
257
+ #Get a new js context with the controllers source and the hooks source
258
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0bc.rb'), nil, nil, hooks_src
259
+ File.write File.expand_path("~/Downloads/src.txt"), info[:src]
260
+ ctx = info[:ctx]
261
+
262
+ #Run the embed function
263
+ dump = ctx.evald %{
264
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
265
+ int_dispatch([]); // Dispatch any events the are pending
266
+ dump.my_controller_base = my_controller_base;
267
+ }
268
+
269
+ #Should raise a hook at this time
270
+ expect { @driver.ignore_up_to("if_hook_event", 0) }.to raise_error(/Waited for/)
271
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
272
+ @driver.int "int_event", [ dump["my_controller_base"], "next_clicked", {} ]
273
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
274
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
275
+ end
276
+
277
+
139
278
  it "Can use goto to embed a pre and post selectors which will be returned in the hooking response" do
140
279
  #Hook source code
141
280
  hooks_src = %{
@@ -179,12 +318,11 @@ RSpec.describe "kern:hook_user_geenrators_spec" do
179
318
  @driver.ignore_up_to("if_hook_event", 0)
180
319
  hook_res = @driver.get "if_hook_event", 0
181
320
 
182
- expect(hook_res[1]).to eq({
183
- "views" => {
184
- "foo" => my_other_controller_base,
185
- "foo2" => new_controller_base
186
- }
187
- })
321
+ expect(hook_res[1]["views"]).to eq({
322
+ "foo" => my_other_controller_base,
323
+ "foo2" => new_controller_base
324
+ }
325
+ )
188
326
  end
189
327
 
190
328
  it "The goto does not free views via the module until after the completion event is received" do
@@ -0,0 +1,292 @@
1
+ #Relating to the conversion of the user's ./config/hooks.rb file into the equivalent HooksManifestEntrie(s) (This may cross-over into
2
+ #the HooksCompiler itself because we need to test side-effects)
3
+
4
+ Dir.chdir File.join File.dirname(__FILE__), '../../'
5
+ require './spec/env/kern.rb'
6
+ require './spec/lib/helpers.rb'
7
+ require './spec/lib/io_extensions.rb'
8
+ require './spec/lib/rspec_extensions.rb'
9
+ require './lib/flok/hooks_compiler.rb'
10
+ require 'zlib'
11
+
12
+ RSpec.describe "kern:hook_pop_user_generators_spec" do
13
+ include Zlib
14
+ include_context "kern"
15
+
16
+ it "Can use the :pop hook generator for all controllers (no matchers)" do
17
+ hooks_src = %{
18
+ hook :pop => :pop do
19
+ #Select all
20
+ end
21
+ }
22
+
23
+ #Just expect this not to blow up
24
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop.rb'), nil, nil, hooks_src
25
+ ctx = info[:ctx]
26
+
27
+ #Run the embed function
28
+ dump = ctx.evald %{
29
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
30
+ int_dispatch([]); // Dispatch any events the are pending
31
+ dump.on_entry_base_pointer = on_entry_base_pointer;
32
+ }
33
+
34
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "next_clicked", {} ]
35
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "back_clicked", {} ]
36
+
37
+ @driver.ignore_up_to("if_hook_event", 0)
38
+ @driver.get "if_hook_event", 0
39
+ end
40
+
41
+ it "Can use the :pop hook generator for one specific controller by name" do
42
+ hooks_src = %{
43
+ hook :pop => :pop do
44
+ controller "my_controller"
45
+ end
46
+ }
47
+
48
+ #Just expect this not to blow up
49
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
50
+ ctx = info[:ctx]
51
+
52
+ #Run the embed function
53
+ dump = ctx.evald %{
54
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
55
+ int_dispatch([]); // Dispatch any events the are pending
56
+ dump.on_entry_base_pointer = on_entry_base_pointer;
57
+ dump.on_entry_base_pointer2 = on_entry_base_pointer2;
58
+ }
59
+
60
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "next_clicked", {} ]
61
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "next_clicked", {} ]
62
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "back_clicked", {} ]
63
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "back_clicked", {} ]
64
+
65
+ @driver.ignore_up_to("if_hook_event", 0)
66
+ @driver.get "if_hook_event", 0
67
+ expect {@driver.ignore_up_to("if_hook_event", 0)}.to raise_error /Waited/
68
+ end
69
+
70
+ it "Can use the :pop hook generator for one action that responds to something (coming from thing)" do
71
+ hooks_src = %{
72
+ hook :pop => :pop do
73
+ from_action_responds_to? "olah2"
74
+ end
75
+ }
76
+
77
+ #Just expect this not to blow up
78
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
79
+ ctx = info[:ctx]
80
+
81
+ #Run the embed function
82
+ dump = ctx.evald %{
83
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
84
+ int_dispatch([]); // Dispatch any events the are pending
85
+ dump.on_entry_base_pointer = on_entry_base_pointer;
86
+ dump.on_entry_base_pointer2 = on_entry_base_pointer2;
87
+ }
88
+
89
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "next_clicked", {} ]
90
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "next_clicked", {} ]
91
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "back_clicked", {} ]
92
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "back_clicked", {} ]
93
+
94
+ @driver.ignore_up_to("if_hook_event", 0)
95
+ res = @driver.get "if_hook_event", 0
96
+ expect {@driver.ignore_up_to("if_hook_event", 0)}.to raise_error /Waited/
97
+ end
98
+
99
+ it "Can use the :pop hook generator for a controller with the triggered_by constraint for various actions" do
100
+ #Hook source code
101
+ hooks_src = %{
102
+ hook :pop => :pop do
103
+ triggered_by "back_clicked"
104
+ end
105
+ }
106
+
107
+ #Get a new js context with the controllers source and the hooks source
108
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
109
+ File.write File.expand_path("~/Downloads/src.txt"), info[:src]
110
+ ctx = info[:ctx]
111
+ #Run the embed function
112
+ dump = ctx.evald %{
113
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
114
+ int_dispatch([]); // Dispatch any events the are pending
115
+ dump.on_entry_base_pointer = on_entry_base_pointer; // Grab the base address of 'my_other_controller'
116
+ }
117
+
118
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "next_clicked", {} ]
119
+ expect { @driver.ignore_up_to("if_hook_event", 0)}.to raise_error /Waited/
120
+
121
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "back_clicked", {} ]
122
+ @driver.ignore_up_to("if_hook_event", 0)
123
+ end
124
+
125
+
126
+ it "can hook into a particualr action we are poping from" do
127
+ hooks_src = %{
128
+ hook :pop => :pop do
129
+ from_action "other2"
130
+ end
131
+ }
132
+
133
+ #Just expect this not to blow up
134
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
135
+ ctx = info[:ctx]
136
+
137
+ #Run the embed function
138
+ dump = ctx.evald %{
139
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
140
+ int_dispatch([]); // Dispatch any events the are pending
141
+ dump.on_entry_base_pointer = on_entry_base_pointer;
142
+ dump.on_entry_base_pointer2 = on_entry_base_pointer2;
143
+ }
144
+
145
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "next_clicked", {} ]
146
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "next_clicked", {} ]
147
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "back_clicked", {} ]
148
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "back_clicked", {} ]
149
+
150
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
151
+ expect {@driver.ignore_up_to("if_hook_event", 0)}.to raise_error /Waited/
152
+ end
153
+
154
+ it "can hook into multiple actions we are poping from" do
155
+ hooks_src = %{
156
+ hook :pop => :pop do
157
+ from_action "other2", "other"
158
+ end
159
+ }
160
+
161
+ #Just expect this not to blow up
162
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
163
+ ctx = info[:ctx]
164
+
165
+ #Run the embed function
166
+ dump = ctx.evald %{
167
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
168
+ int_dispatch([]); // Dispatch any events the are pending
169
+ dump.on_entry_base_pointer = on_entry_base_pointer;
170
+ dump.on_entry_base_pointer2 = on_entry_base_pointer2;
171
+ }
172
+
173
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "next_clicked", {} ]
174
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "next_clicked", {} ]
175
+ @driver.int "int_event", [ dump["on_entry_base_pointer"], "back_clicked", {} ]
176
+ @driver.int "int_event", [ dump["on_entry_base_pointer2"], "back_clicked", {} ]
177
+
178
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
179
+ @driver.ignore_up_to("if_hook_event", 0); @driver.get "if_hook_event", 0
180
+ end
181
+
182
+
183
+ it "Can use pop to embed a pre and post selectors which will be returned in the hooking response" do
184
+ #Hook source code
185
+ hooks_src = %{
186
+ hook :pop => :pop do
187
+ controller "my_controller"
188
+ from_action "other"
189
+
190
+ before_views({
191
+ "my_controller3" => {
192
+ "__leaf__" => "foo"
193
+ }
194
+ })
195
+
196
+ after_views({
197
+ "." => {
198
+ "__leaf__" => "foo2"
199
+ }
200
+ })
201
+
202
+ end
203
+ }
204
+
205
+ #Just expect this not to blow up
206
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
207
+ ctx = info[:ctx]
208
+
209
+ #Run the embed function
210
+ ctx.evald %{
211
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
212
+ int_dispatch([]); // Dispatch any events the are pending
213
+ }
214
+
215
+
216
+ on_entry_base_pointer = ctx.eval("on_entry_base_pointer")
217
+ on_entry_base_pointer2 = ctx.eval("on_entry_base_pointer2")
218
+
219
+ @driver.int "int_event", [ on_entry_base_pointer, "next_clicked", {} ]
220
+ on_entry_base_pointer3 = ctx.eval("my_controller3_base")
221
+ @driver.int "int_event", [ on_entry_base_pointer, "back_clicked", {} ]
222
+
223
+ @driver.ignore_up_to("if_hook_event", 0)
224
+ hook_res = @driver.get "if_hook_event", 0
225
+
226
+ expect(hook_res[1]).to eq({
227
+ "views" => {
228
+ "foo2" => on_entry_base_pointer2,
229
+ "foo" => on_entry_base_pointer3
230
+ }
231
+ })
232
+ end
233
+
234
+ it "Does not dump the views until *after* the callback is received" do
235
+ #Hook source code
236
+ hooks_src = %{
237
+ hook :pop => :pop do
238
+ controller "my_controller"
239
+ from_action "other"
240
+
241
+ before_views({
242
+ "my_controller3" => {
243
+ "__leaf__" => "foo"
244
+ }
245
+ })
246
+
247
+ after_views({
248
+ "." => {
249
+ "__leaf__" => "foo2"
250
+ }
251
+ })
252
+
253
+ end
254
+ }
255
+
256
+ #Just expect this not to blow up
257
+ info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller_0b_pop2.rb'), nil, nil, hooks_src
258
+ ctx = info[:ctx]
259
+
260
+ #Run the embed function
261
+ ctx.evald %{
262
+ dump.base = _embed("my_controller", 0, {}, null); // Embed the controller
263
+ int_dispatch([]); // Dispatch any events the are pending
264
+ }
265
+
266
+
267
+ on_entry_base_pointer = ctx.eval("on_entry_base_pointer")
268
+ on_entry_base_pointer2 = ctx.eval("on_entry_base_pointer2")
269
+
270
+ @driver.int "int_event", [ on_entry_base_pointer, "next_clicked", {} ]
271
+ on_entry_base_pointer3 = ctx.eval("my_controller3_base")
272
+ @driver.int "int_event", [ on_entry_base_pointer, "back_clicked", {} ]
273
+
274
+ #Should not have gotten a free view at this point because we popped an intercepted segue
275
+ #So it should wait for the completion callback to release the views
276
+ expect {@driver.ignore_up_to("if_free_view", 0)}.to raise_error /Waited/
277
+
278
+ @driver.ignore_up_to("if_hook_event", 0)
279
+ hook_res = @driver.get "if_hook_event", 0
280
+
281
+ expect(hook_res[1]["views"]).to eq({
282
+ "foo2" => on_entry_base_pointer2,
283
+ "foo" => on_entry_base_pointer3
284
+ })
285
+
286
+ #This should cause the views to be dumped
287
+ @driver.int "int_event", [hook_res[1]["cep"], "", {}]
288
+ @driver.ignore_up_to("if_free_view", 0)
289
+ res = @driver.get("if_free_view", 0)
290
+ expect(res).to eq([on_entry_base_pointer3+1])
291
+ end
292
+ end