flok 0.0.103 → 0.0.105
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/drivers/chrome/config.yml +2 -0
- data/app/drivers/chrome/src/about.js +14 -0
- data/app/drivers/chrome/src/guid.js +9 -0
- data/app/drivers/chrome/src/net.js +25 -3
- data/app/kern/mod/about.js +19 -0
- data/app/kern/mod/hook.js +2 -2
- data/app/kern/mod/udid.js +9 -0
- data/app/kern/services/rest.rb +67 -8
- data/bin/flok +14 -0
- data/docs/mod/about.md +19 -0
- data/docs/mod/net.md +9 -4
- data/docs/mod/ui.md +1 -1
- data/docs/services/rest.md +24 -2
- data/docs/services/vm.md +4 -0
- data/docs/user_handbook/hooks.md +61 -5
- data/lib/flok/hooks_compiler.rb +6 -0
- data/lib/flok/user_compiler.rb +33 -5
- data/lib/flok/user_hook_generators/goto.rb +25 -3
- data/lib/flok/user_hook_generators/pop.rb +99 -0
- data/lib/flok/user_hook_generators/push.rb +119 -0
- data/lib/flok/version.rb +1 -1
- data/spec/iface/driver/about_spec.rb +14 -0
- data/spec/iface/driver/net_spec.rb +91 -2
- data/spec/iface/driver/ping_spec.rb +1 -0
- data/spec/kern/about_spec.rb +30 -0
- data/spec/kern/assets/hook_entry_points/controller0a_push.rb +31 -0
- data/spec/kern/assets/hook_entry_points/controller0b.rb +17 -0
- data/spec/kern/assets/hook_entry_points/controller0bc.rb +27 -0
- data/spec/kern/assets/hook_entry_points/controller_0b_pop.rb +18 -0
- data/spec/kern/assets/hook_entry_points/controller_0b_pop2.rb +66 -0
- data/spec/kern/assets/hook_entry_points/controller_0b_push.rb +15 -0
- data/spec/kern/assets/hook_entry_points/controller_0b_push2.rb +55 -0
- data/spec/kern/assets/rest_service/controller1b.rb +47 -0
- data/spec/kern/hook_entry_points_and_manifest_spec.rb +174 -0
- data/spec/kern/{hook_user_generators_spec.rb → hook_goto_user_generators_spec.rb} +145 -7
- data/spec/kern/hook_pop_user_generators_spec.rb +292 -0
- data/spec/kern/hook_push_user_generators_spec.rb +305 -0
- data/spec/kern/rest_service_spec.rb +97 -1
- data/spec/lib/helpers.rb +5 -3
- metadata +35 -5
- data/lib/flok/user_hook_generators/helpers.rb +0 -46
@@ -0,0 +1,30 @@
|
|
1
|
+
Dir.chdir File.join File.dirname(__FILE__), '../../'
|
2
|
+
require './spec/env/kern.rb'
|
3
|
+
require './spec/lib/helpers.rb'
|
4
|
+
require './spec/lib/io_extensions.rb'
|
5
|
+
require './spec/lib/rspec_extensions.rb'
|
6
|
+
|
7
|
+
RSpec.describe "kern:rtc_spec" do
|
8
|
+
include_context "kern"
|
9
|
+
|
10
|
+
it "Does set the global information when receiving the int_about_poll_cb message" do
|
11
|
+
#Compile the controller
|
12
|
+
ctx = flok_new_user File.read('./spec/kern/assets/blank.rb')
|
13
|
+
|
14
|
+
@driver.int("int_about_poll_cb", [{
|
15
|
+
"platform" => "test",
|
16
|
+
"language" => "en-us",
|
17
|
+
"udid" => "foo-bar"
|
18
|
+
}])
|
19
|
+
|
20
|
+
dump = ctx.evald %{
|
21
|
+
dump.platform = get_platform();
|
22
|
+
dump.language = get_language();
|
23
|
+
dump.udid = get_udid();
|
24
|
+
}
|
25
|
+
|
26
|
+
expect(dump["platform"]).to eq("test")
|
27
|
+
expect(dump["language"]).to eq("en-us")
|
28
|
+
expect(dump["udid"]).to eq("foo-bar")
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
controller :my_controller do
|
2
|
+
spots "hello", "world"
|
3
|
+
|
4
|
+
macro :my_macro do
|
5
|
+
on "foo", %{
|
6
|
+
}
|
7
|
+
|
8
|
+
end
|
9
|
+
|
10
|
+
action :index do
|
11
|
+
on_entry %{
|
12
|
+
on_entry_base_pointer = __base__;
|
13
|
+
}
|
14
|
+
|
15
|
+
on "hello", %{
|
16
|
+
var x = 3;
|
17
|
+
}
|
18
|
+
|
19
|
+
my_macro
|
20
|
+
end
|
21
|
+
|
22
|
+
action :other do
|
23
|
+
on "test", %{
|
24
|
+
Push("index");
|
25
|
+
}
|
26
|
+
|
27
|
+
on "holah", %{
|
28
|
+
Pop();
|
29
|
+
}
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
controller :my_controller do
|
2
|
+
action :index do
|
3
|
+
on_entry %{
|
4
|
+
my_controller_base = __base__;
|
5
|
+
}
|
6
|
+
|
7
|
+
on "next_clicked", %{
|
8
|
+
Goto("other");
|
9
|
+
}
|
10
|
+
end
|
11
|
+
|
12
|
+
action :other do
|
13
|
+
on_entry %{
|
14
|
+
other_entered = true;
|
15
|
+
}
|
16
|
+
|
17
|
+
on "next_clicked", %{
|
18
|
+
Goto("other2");
|
19
|
+
}
|
20
|
+
|
21
|
+
end
|
22
|
+
|
23
|
+
action :other2 do
|
24
|
+
on_entry %{
|
25
|
+
}
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
controller :my_controller do
|
2
|
+
spots "content"
|
3
|
+
|
4
|
+
action :index do
|
5
|
+
on_entry %{
|
6
|
+
on_entry_base_pointer = __base__;
|
7
|
+
Embed("my_controller2", "content", {});
|
8
|
+
}
|
9
|
+
|
10
|
+
on "next_clicked", %{
|
11
|
+
Push("other")
|
12
|
+
}
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
action :other do
|
17
|
+
on_entry %{
|
18
|
+
Embed("my_controller3", "content", {});
|
19
|
+
}
|
20
|
+
|
21
|
+
on "back_clicked", %{
|
22
|
+
Pop();
|
23
|
+
}
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
controller :my_controller2 do
|
28
|
+
action :index do
|
29
|
+
on_entry %{
|
30
|
+
on_entry_base_pointer2 = __base__;
|
31
|
+
}
|
32
|
+
|
33
|
+
on "next_clicked", %{
|
34
|
+
Push("other2")
|
35
|
+
}
|
36
|
+
|
37
|
+
on "olah", %{
|
38
|
+
}
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
action :other2 do
|
43
|
+
on "test", %{
|
44
|
+
}
|
45
|
+
|
46
|
+
on "next_clicked", %{
|
47
|
+
Push("index")
|
48
|
+
}
|
49
|
+
|
50
|
+
on "back_clicked", %{
|
51
|
+
Pop();
|
52
|
+
}
|
53
|
+
|
54
|
+
on "olah2", %{
|
55
|
+
}
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
|
60
|
+
controller :my_controller3 do
|
61
|
+
action :index do
|
62
|
+
on_entry %{
|
63
|
+
my_controller3_base = __base__;
|
64
|
+
}
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
controller :my_controller do
|
2
|
+
spots "content"
|
3
|
+
|
4
|
+
action :index do
|
5
|
+
on_entry %{
|
6
|
+
on_entry_base_pointer = __base__;
|
7
|
+
Embed("my_controller2", "content", {});
|
8
|
+
}
|
9
|
+
|
10
|
+
on "next_clicked", %{
|
11
|
+
Push("other")
|
12
|
+
}
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
action :other do
|
17
|
+
on_entry %{
|
18
|
+
Embed("my_controller3", "content", {});
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
controller :my_controller2 do
|
24
|
+
action :index do
|
25
|
+
on_entry %{
|
26
|
+
on_entry_base_pointer2 = __base__;
|
27
|
+
}
|
28
|
+
|
29
|
+
on "next_clicked", %{
|
30
|
+
Push("other2")
|
31
|
+
}
|
32
|
+
|
33
|
+
on "olah", %{
|
34
|
+
}
|
35
|
+
|
36
|
+
end
|
37
|
+
|
38
|
+
action :other2 do
|
39
|
+
on "test", %{
|
40
|
+
}
|
41
|
+
|
42
|
+
on "next_clicked", %{
|
43
|
+
Push("index")
|
44
|
+
}
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
|
49
|
+
controller :my_controller3 do
|
50
|
+
action :index do
|
51
|
+
on_entry %{
|
52
|
+
my_controller3_base = __base__;
|
53
|
+
}
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
controller :my_controller do
|
2
|
+
services :rest
|
3
|
+
|
4
|
+
action :my_action do
|
5
|
+
on_entry %{
|
6
|
+
var info = {
|
7
|
+
path: "test",
|
8
|
+
params: {"hello": "world"}
|
9
|
+
}
|
10
|
+
Request("rest", "get", info);
|
11
|
+
}
|
12
|
+
|
13
|
+
on "rest_res", %{
|
14
|
+
rest_res_params = params;
|
15
|
+
}
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
controller :my_controller2 do
|
20
|
+
action :my_action do
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
|
25
|
+
controller :root_controller do
|
26
|
+
spots "content"
|
27
|
+
|
28
|
+
on_entry %{
|
29
|
+
root_base = __base__;
|
30
|
+
}
|
31
|
+
|
32
|
+
action :action_a do
|
33
|
+
on_entry %{
|
34
|
+
Embed("my_controller", "content", {});
|
35
|
+
}
|
36
|
+
|
37
|
+
on "next_clicked", %{
|
38
|
+
Goto("action_b")
|
39
|
+
}
|
40
|
+
end
|
41
|
+
|
42
|
+
action :action_b do
|
43
|
+
on_entry %{
|
44
|
+
Embed("my_controller2", "content", {});
|
45
|
+
}
|
46
|
+
end
|
47
|
+
end
|
@@ -112,6 +112,9 @@ eof
|
|
112
112
|
#actions_responds_to looks like {"action1" => ["event_a", ..."], "action2" => }...
|
113
113
|
#where each action list contains all the events this action responds to
|
114
114
|
expect(hook_info["actions_responds_to"]).to eq({"index" => ["hello", "foo"], "other" => ["test"]})
|
115
|
+
if hook_info["from_action"] == "other"
|
116
|
+
expect(hook_info["handling_event_named"]).to eq("test")
|
117
|
+
end
|
115
118
|
|
116
119
|
#Variables included
|
117
120
|
next %{
|
@@ -172,6 +175,10 @@ eof
|
|
172
175
|
#where each action list contains all the events this action responds to
|
173
176
|
expect(hook_info["actions_responds_to"]).to eq({"index" => ["hello", "foo"], "other" => ["test"]})
|
174
177
|
|
178
|
+
if hook_info["from_action"] == "other"
|
179
|
+
expect(hook_info["handling_event_named"]).to eq("test")
|
180
|
+
end
|
181
|
+
|
175
182
|
#Variables included
|
176
183
|
next %{
|
177
184
|
entry_params = {
|
@@ -212,4 +219,171 @@ eof
|
|
212
219
|
expect(dump["entry_params"]["new_action"]).to eq("index")
|
213
220
|
end
|
214
221
|
|
222
|
+
it "Can hook the controller_will_push event with the correct hook entry information mentioned in the docs" do
|
223
|
+
info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0a_push.rb')
|
224
|
+
src = info[:src]
|
225
|
+
ctx = info[:ctx]
|
226
|
+
|
227
|
+
manifest = Flok::HooksManifest.new
|
228
|
+
will_pushs_found = 0
|
229
|
+
from_to_action_pairs_found = []
|
230
|
+
entry = Flok::HooksManifestEntry.new("controller_will_push") do |hook_info|
|
231
|
+
will_pushs_found += 1
|
232
|
+
#Static parameters
|
233
|
+
expect(hook_info["controller_name"]).to eq("my_controller")
|
234
|
+
expect(hook_info["might_respond_to"].to_set).to eq(["foo", "hello", "test", "holah"].to_set)
|
235
|
+
from_to_action_pairs_found << {hook_info["from_action"] => hook_info["to_action"]}
|
236
|
+
|
237
|
+
#actions_responds_to looks like {"action1" => ["event_a", ..."], "action2" => }...
|
238
|
+
#where each action list contains all the events this action responds to
|
239
|
+
expect(hook_info["actions_responds_to"]).to eq({"index" => ["hello", "foo"], "other" => ["test", "holah"]})
|
240
|
+
expect(hook_info["handling_event_named"]).to eq("test")
|
241
|
+
end
|
242
|
+
manifest << entry
|
243
|
+
|
244
|
+
#Recompile source (We do this manually as we supplied no `config/hooks.rb` file)
|
245
|
+
src = Flok::HooksCompiler.compile src, manifest
|
246
|
+
|
247
|
+
#Expect to have found one will_push entries given that there is one push request
|
248
|
+
expect(will_pushs_found).to eq(1)
|
249
|
+
|
250
|
+
#Expect to have gotten all the push to/from action pairs
|
251
|
+
expect(from_to_action_pairs_found.to_set).to eq([{"other" => "index"}].to_set)
|
252
|
+
|
253
|
+
#Re-evaluate the v8 instance
|
254
|
+
ctx = v8_flok
|
255
|
+
ctx.eval src
|
256
|
+
|
257
|
+
#Now load the controller
|
258
|
+
dump = ctx.evald %{
|
259
|
+
base = _embed("my_controller", 0, {}, null);
|
260
|
+
|
261
|
+
//Drain queue
|
262
|
+
int_dispatch([]);
|
263
|
+
}
|
264
|
+
end
|
265
|
+
|
266
|
+
it "Can hook the controller_did_push event with the correct hook entry information mentioned in the docs" do
|
267
|
+
info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0a_push.rb')
|
268
|
+
src = info[:src]
|
269
|
+
ctx = info[:ctx]
|
270
|
+
|
271
|
+
manifest = Flok::HooksManifest.new
|
272
|
+
did_pushs_found = 0
|
273
|
+
from_to_action_pairs_found = []
|
274
|
+
entry = Flok::HooksManifestEntry.new("controller_did_push") do |hook_info|
|
275
|
+
did_pushs_found += 1
|
276
|
+
#Static parameters
|
277
|
+
expect(hook_info["controller_name"]).to eq("my_controller")
|
278
|
+
expect(hook_info["might_respond_to"].to_set).to eq(["foo", "hello", "test", "holah"].to_set)
|
279
|
+
from_to_action_pairs_found << {hook_info["from_action"] => hook_info["to_action"]}
|
280
|
+
|
281
|
+
#actions_responds_to looks like {"action1" => ["event_a", ..."], "action2" => }...
|
282
|
+
#where each action list contains all the events this action responds to
|
283
|
+
expect(hook_info["actions_responds_to"]).to eq({"index" => ["hello", "foo"], "other" => ["test", "holah"]})
|
284
|
+
expect(hook_info["handling_event_named"]).to eq("test")
|
285
|
+
end
|
286
|
+
manifest << entry
|
287
|
+
|
288
|
+
#Recompile source (We do this manually as we supplied no `config/hooks.rb` file)
|
289
|
+
src = Flok::HooksCompiler.compile src, manifest
|
290
|
+
|
291
|
+
#Expect to have found one did_push entries given that there is one push request
|
292
|
+
expect(did_pushs_found).to eq(1)
|
293
|
+
|
294
|
+
#Expect to have gotten all the push to/from action pairs
|
295
|
+
expect(from_to_action_pairs_found.to_set).to eq([{"other" => "index"}].to_set)
|
296
|
+
|
297
|
+
#Re-evaluate the v8 instance
|
298
|
+
ctx = v8_flok
|
299
|
+
ctx.eval src
|
300
|
+
|
301
|
+
#Now load the controller
|
302
|
+
dump = ctx.evald %{
|
303
|
+
base = _embed("my_controller", 0, {}, null);
|
304
|
+
|
305
|
+
//Drain queue
|
306
|
+
int_dispatch([]);
|
307
|
+
}
|
308
|
+
end
|
309
|
+
|
310
|
+
it "Can hook the controller_will_pop event with the correct hook entry information mentioned in the docs" do
|
311
|
+
info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0a_push.rb')
|
312
|
+
src = info[:src]
|
313
|
+
ctx = info[:ctx]
|
314
|
+
|
315
|
+
manifest = Flok::HooksManifest.new
|
316
|
+
will_pops_found = 0
|
317
|
+
entry = Flok::HooksManifestEntry.new("controller_will_pop") do |hook_info|
|
318
|
+
will_pops_found += 1
|
319
|
+
#Static parameters
|
320
|
+
expect(hook_info["controller_name"]).to eq("my_controller")
|
321
|
+
expect(hook_info["might_respond_to"].to_set).to eq(["foo", "hello", "test", "holah"].to_set)
|
322
|
+
|
323
|
+
#actions_responds_to looks like {"action1" => ["event_a", ..."], "action2" => }...
|
324
|
+
#where each action list contains all the events this action responds to
|
325
|
+
expect(hook_info["actions_responds_to"]).to eq({"index" => ["hello", "foo"], "other" => ["test", "holah"]})
|
326
|
+
expect(hook_info["handling_event_named"]).to eq("holah")
|
327
|
+
end
|
328
|
+
manifest << entry
|
329
|
+
|
330
|
+
#Recompile source (We do this manually as we supplied no `config/hooks.rb` file)
|
331
|
+
src = Flok::HooksCompiler.compile src, manifest
|
332
|
+
|
333
|
+
#Expect to have found one will_pop entries given that there is one pop request
|
334
|
+
expect(will_pops_found).to eq(1)
|
335
|
+
|
336
|
+
#Re-evaluate the v8 instance
|
337
|
+
ctx = v8_flok
|
338
|
+
ctx.eval src
|
339
|
+
|
340
|
+
#Now load the controller
|
341
|
+
dump = ctx.evald %{
|
342
|
+
base = _embed("my_controller", 0, {}, null);
|
343
|
+
|
344
|
+
//Drain queue
|
345
|
+
int_dispatch([]);
|
346
|
+
}
|
347
|
+
end
|
348
|
+
|
349
|
+
it "Can hook the controller_did_pop event with the correct hook entry information mentioned in the docs" do
|
350
|
+
info = flok_new_user_with_src File.read('./spec/kern/assets/hook_entry_points/controller0a_push.rb')
|
351
|
+
src = info[:src]
|
352
|
+
ctx = info[:ctx]
|
353
|
+
|
354
|
+
manifest = Flok::HooksManifest.new
|
355
|
+
did_pops_found = 0
|
356
|
+
entry = Flok::HooksManifestEntry.new("controller_did_pop") do |hook_info|
|
357
|
+
did_pops_found += 1
|
358
|
+
#Static parameters
|
359
|
+
expect(hook_info["controller_name"]).to eq("my_controller")
|
360
|
+
expect(hook_info["might_respond_to"].to_set).to eq(["foo", "hello", "test", "holah"].to_set)
|
361
|
+
|
362
|
+
#actions_responds_to looks like {"action1" => ["event_a", ..."], "action2" => }...
|
363
|
+
#where each action list contains all the events this action responds to
|
364
|
+
expect(hook_info["actions_responds_to"]).to eq({"index" => ["hello", "foo"], "other" => ["test", "holah"]})
|
365
|
+
expect(hook_info["handling_event_named"]).to eq("holah")
|
366
|
+
end
|
367
|
+
manifest << entry
|
368
|
+
|
369
|
+
#Recompile source (We do this manually as we supplied no `config/hooks.rb` file)
|
370
|
+
src = Flok::HooksCompiler.compile src, manifest
|
371
|
+
|
372
|
+
#Expect to have found one did_pop entries given that there is one pop request
|
373
|
+
expect(did_pops_found).to eq(1)
|
374
|
+
|
375
|
+
#Re-evaluate the v8 instance
|
376
|
+
ctx = v8_flok
|
377
|
+
ctx.eval src
|
378
|
+
|
379
|
+
#Now load the controller
|
380
|
+
dump = ctx.evald %{
|
381
|
+
base = _embed("my_controller", 0, {}, null);
|
382
|
+
|
383
|
+
//Drain queue
|
384
|
+
int_dispatch([]);
|
385
|
+
}
|
386
|
+
end
|
387
|
+
|
388
|
+
|
215
389
|
end
|