flok 0.0.40 → 0.0.41

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 (101) hide show
  1. checksums.yaml +4 -4
  2. data/app/drivers/chrome/src/dispatch.js +7 -2
  3. data/app/kern/dispatch.js +10 -1
  4. data/app/kern/mod/event.js +9 -0
  5. data/app/kern/pagers/pg_mem.js +21 -0
  6. data/app/kern/pagers/pg_net_sim.js +44 -0
  7. data/app/kern/pagers/pg_spec.js +23 -0
  8. data/app/kern/services/vm.rb +60 -64
  9. data/bin/flok +44 -23
  10. data/docs/callout.md +1 -1
  11. data/docs/client_api.md +5 -2
  12. data/docs/config_yml.md +41 -0
  13. data/docs/controllers.md +4 -0
  14. data/docs/datatypes.md +5 -2
  15. data/docs/debug_server.md +2 -0
  16. data/docs/dispatch.md +8 -3
  17. data/docs/known_issues.md +6 -0
  18. data/docs/mod/event.md +25 -20
  19. data/docs/mod/persist.md +1 -1
  20. data/docs/mod/speech.md +12 -0
  21. data/docs/project.md +2 -2
  22. data/docs/services/vm.md +46 -17
  23. data/docs/services/vm/pagers.md +22 -2
  24. data/lib/flok/build.rb +0 -4
  25. data/lib/flok/user_compiler.rb +123 -47
  26. data/lib/flok/user_compiler_templates/ctable.js.erb +39 -1
  27. data/lib/flok/version.rb +1 -1
  28. data/spec/env/global.rb +1 -0
  29. data/spec/env/kern.rb +5 -1
  30. data/spec/etc/cli_spec.rb +337 -322
  31. data/spec/etc/service_compiler/config0.rb +1 -1
  32. data/spec/etc/service_compiler/config0b.rb +1 -0
  33. data/spec/etc/services_compiler_spec.rb +29 -29
  34. data/spec/etc/user_compiler/controller0b.rb +9 -0
  35. data/spec/etc/user_compiler/controller0timer.rb +16 -0
  36. data/spec/etc/user_compiler_spec.rb +24 -1
  37. data/spec/iface/driver/dispatch_spec.rb +8 -2
  38. data/spec/iface/driver/persist_spec.rb +11 -0
  39. data/spec/kern/assets/controller0defer.rb +18 -0
  40. data/spec/kern/assets/controller0defer0.rb +13 -0
  41. data/spec/kern/assets/controller0defer2.rb +17 -0
  42. data/spec/kern/assets/global_on_entry.rb +8 -0
  43. data/spec/kern/assets/global_on_entry2.rb +16 -0
  44. data/spec/kern/assets/global_on_entry3.rb +17 -0
  45. data/spec/kern/assets/global_on_entry4.rb +12 -0
  46. data/spec/kern/assets/interval.rb +29 -0
  47. data/spec/kern/assets/interval2.rb +33 -0
  48. data/spec/kern/assets/interval3.rb +39 -0
  49. data/spec/kern/assets/service1.rb +4 -1
  50. data/spec/kern/assets/service_controller1.rb +11 -0
  51. data/spec/kern/assets/specimin/controller0.rb +74 -0
  52. data/spec/kern/assets/vm/config5.rb +20 -0
  53. data/spec/kern/assets/vm/config6.rb +20 -0
  54. data/spec/kern/assets/vm/controller10.rb +1 -1
  55. data/spec/kern/assets/vm/controller11.rb +1 -1
  56. data/spec/kern/assets/vm/controller12.rb +1 -1
  57. data/spec/kern/assets/vm/controller13.rb +1 -1
  58. data/spec/kern/assets/vm/controller16b.rb +28 -0
  59. data/spec/kern/assets/vm/controller18.rb +1 -1
  60. data/spec/kern/assets/vm/controller21.rb +1 -1
  61. data/spec/kern/assets/vm/controller22.rb +8 -0
  62. data/spec/kern/assets/vm/controller_exc_ewatch.rb +1 -0
  63. data/spec/kern/assets/vm/controller_exc_ewatch2.rb +30 -0
  64. data/spec/kern/assets/vm/controller_exc_ewatch3.rb +16 -0
  65. data/spec/kern/assets/vm/controller_exc_ewatch4.rb +16 -0
  66. data/spec/kern/assets/vm/macros/copy_page_c.rb +1 -0
  67. data/spec/kern/assets/vm/macros/copy_page_ch.rb +25 -0
  68. data/spec/kern/assets/vm/macros/entry_del_c.rb +1 -0
  69. data/spec/kern/assets/vm/macros/entry_del_ch.rb +20 -0
  70. data/spec/kern/assets/vm/macros/entry_insert_c.rb +1 -0
  71. data/spec/kern/assets/vm/macros/entry_insert_ch.rb +23 -0
  72. data/spec/kern/assets/vm/macros/entry_mutable_c.rb +8 -7
  73. data/spec/kern/assets/vm/macros/entry_mutable_ch.rb +34 -0
  74. data/spec/kern/assets/vm/macros/new_page_c.rb +1 -1
  75. data/spec/kern/assets/vm/macros/new_page_c2.rb +1 -1
  76. data/spec/kern/assets/vm/macros/new_page_ch.rb +7 -0
  77. data/spec/kern/assets/vm/pg_mem/config.rb +10 -0
  78. data/spec/kern/assets/vm/pg_mem/config1.rb +10 -0
  79. data/spec/kern/assets/vm/pg_mem/config2.rb +10 -0
  80. data/spec/kern/assets/vm/pg_mem/config3.rb +15 -0
  81. data/spec/kern/assets/vm/pg_mem/write.rb +23 -0
  82. data/spec/kern/assets/vm/pg_mem/write2.rb +38 -0
  83. data/spec/kern/assets/vm/pg_net_sim/config.rb +10 -0
  84. data/spec/kern/assets/vm/pg_net_sim/nothing.rb +12 -0
  85. data/spec/kern/assets/vm/pg_net_sim/pages.json +1 -0
  86. data/spec/kern/assets/vm/pg_net_sim/watch.rb +18 -0
  87. data/spec/kern/callout_spec.rb +1 -1
  88. data/spec/kern/controller_macro_spec.rb +153 -20
  89. data/spec/kern/controller_spec.rb +232 -1
  90. data/spec/kern/debug_ui_spec.rb +235 -235
  91. data/spec/kern/event_spec.rb +112 -0
  92. data/spec/kern/service_controller_spec.rb +14 -2
  93. data/spec/kern/vm_service_mem_pagers_spec.rb +117 -0
  94. data/spec/kern/vm_service_net_sim_pager_spec.rb +97 -0
  95. data/spec/kern/vm_service_spec.rb +304 -17
  96. data/spec/kern/vm_service_spec2.rb +39 -0
  97. metadata +88 -6
  98. data/app/kern/pagers/mem_pager.js +0 -2
  99. data/app/kern/pagers/pg_spec0.js +0 -20
  100. data/lib/flok/project_template/Guardfile +0 -7
  101. data/lib/flok/project_template/config/config.yml +0 -1
@@ -9,241 +9,241 @@ require './spec/lib/rspec_extensions.rb'
9
9
  RSpec.describe "kern:debug_ui_spec" do
10
10
  include_context "kern"
11
11
 
12
- #it "Can call int_debug_dump_ui and get back root view hierarchy" do
13
- ##Compile the controller
14
- #ctx = flok_new_user File.read('./spec/kern/assets/controller_bare.rb')
15
-
16
- ##Do not run anything
17
- #ctx.eval %{
18
- #int_dispatch([]);
19
- #}
20
-
21
- #@driver.int "int_debug_dump_ui", []
22
-
23
- #@driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
24
- #"type" => "spot",
25
- #"name" => "root",
26
- #"ptr" => 0,
27
- #"children" => []
28
- #}])
29
- #end
30
-
31
- #it "Can call int_debug_dump_ui for one controller correctly" do
32
- ##Compile the controller
33
- #ctx = flok_new_user File.read('./spec/kern/assets/controller_bare.rb')
34
-
35
- ##Do not run anything
36
- #ctx.eval %{
37
- #//Call embed on main root view
38
- #base = _embed("my_controller", 0, {}, null);
39
-
40
- #//Drain queue
41
- #int_dispatch([]);
42
- #}
43
-
44
- #base = ctx.eval("base")
45
-
46
- #@driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main"]])
47
- #@driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
48
- #@driver.mexpect("if_attach_view", [base+1, 0])
49
- #@driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
50
-
51
- #@driver.int "int_debug_dump_ui", []
52
- #@driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
53
- #"type" => "spot",
54
- #"name" => "root",
55
- #"ptr" => 0,
56
- #"children" => [
57
- #{
58
- #"name" => "my_controller",
59
- #"ptr" => base,
60
- #"type" => "vc",
61
- #"action" => "index",
62
- #"events" => ["test"],
63
- #"children" => [
64
- #{
65
- #"type" => "view",
66
- #"name" => "my_controller",
67
- #"ptr" => base+1,
68
- #"children" => []
69
- #}
70
- #]
71
- #}
72
- #]
73
- #}])
74
- #end
75
-
76
- #it "Can call int_debug_dump_ui for one controller correctly with spots" do
77
- ##Compile the controller
78
- #ctx = flok_new_user File.read('./spec/kern/assets/controller_spots.rb')
79
-
80
- ##Do not run anything
81
- #ctx.eval %{
82
- #//Call embed on main root view
83
- #base = _embed("my_controller", 0, {}, null);
84
-
85
- #//Drain queue
86
- #int_dispatch([]);
87
- #}
88
-
89
- #base = ctx.eval("base")
90
-
91
- #@driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "one", "two"]])
92
- #@driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
93
- #@driver.mexpect("if_attach_view", [base+1, 0])
94
- #@driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
95
-
96
- #@driver.int "int_debug_dump_ui", []
97
- #@driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
98
- #"type" => "spot",
99
- #"name" => "root",
100
- #"ptr" => 0,
101
- #"children" => [
102
- #{
103
- #"name" => "my_controller",
104
- #"ptr" => base,
105
- #"type" => "vc",
106
- #"action" => "index",
107
- #"events" => ["test", "test2"],
108
- #"children" => [
109
- #{
110
- #"type" => "view",
111
- #"name" => "my_controller",
112
- #"ptr" => base+1,
113
- #"children" => [
114
- #{"name" => "one", "type" => "spot", "children" => [], "ptr" => base+2},
115
- #{"name" => "two", "type" => "spot", "children" => [], "ptr" => base+3},
116
- #]
117
- #}
118
- #]
119
- #}
120
- #]
121
- #}])
122
- #end
123
-
124
- #it "Can call int_debug_dump_ui for one controller correctly with spots and one embedded" do
125
- ##Compile the controller
126
- #ctx = flok_new_user File.read('./spec/kern/assets/controller_spots_embed.rb')
127
-
128
- ##Do not run anything
129
- #ctx.eval %{
130
- #//Call embed on main root view
131
- #base = _embed("my_controller", 0, {}, null);
132
-
133
- #//Drain queue
134
- #int_dispatch([]);
135
- #}
136
-
137
- #base = ctx.eval("base")
138
-
139
- #@driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "one", "two"]])
140
- #@driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
141
- #@driver.mexpect("if_attach_view", [base+1, 0])
142
- #@driver.mexpect("if_init_view", ["my_other_controller", {}, base+5, ["main"]])
143
- #@driver.mexpect("if_controller_init", [base+4, base+5, "my_other_controller", {}])
144
- #@driver.mexpect("if_attach_view", [base+5, base+2])
145
- #@driver.mexpect("if_event", [base+4, "action", {"from" => nil, "to" => "index"}])
146
- #@driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
147
-
148
- #@driver.int "int_debug_dump_ui", []
149
- #@driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
150
- #"type" => "spot",
151
- #"name" => "root",
152
- #"ptr" => 0,
153
- #"children" => [
154
- #{
155
- #"name" => "my_controller",
156
- #"ptr" => base,
157
- #"type" => "vc",
158
- #"action" => "index",
159
- #"events" => ["test1"],
160
- #"children" => [
161
- #{
162
- #"type" => "view",
163
- #"name" => "my_controller",
164
- #"ptr" => base+1,
165
- #"children" => [
166
- #{"name" => "one", "type" => "spot", "children" => [
167
- #{
168
- #"name" => "my_other_controller",
169
- #"ptr" => base+4,
170
- #"type" => "vc",
171
- #"action" => "index",
172
- #"events" => ["test2"],
173
- #"children" => [
174
- #{
175
- #"type" => "view",
176
- #"ptr" => base+5,
177
- #"name" => "my_other_controller",
178
- #"children" => [],
179
- #}
180
- #]
181
- #}
182
- #], "ptr" => base+2},
183
- #{"name" => "two", "type" => "spot", "children" => [], "ptr" => base+3},
184
- #]
185
- #}
186
- #]
187
- #}
188
- #]
189
- #}])
190
- #end
191
-
192
- #it "Can call int_debug_dump_ui for one controller correctly with spots and one embedded that was later removed" do
193
- ##Compile the controller
194
- #ctx = flok_new_user File.read('./spec/kern/assets/controller_spots_embed_removed.rb')
195
-
196
- ##Do not run anything
197
- #ctx.eval %{
198
- #//Call embed on main root view
199
- #base = _embed("my_controller", 0, {}, null);
200
-
201
- #//Drain queue
202
- #int_dispatch([3, "int_event", base, "next", {}]);
203
- #}
204
-
205
- #base = ctx.eval("base")
206
-
207
- #@driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "one", "two"]])
208
- #@driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
209
- #@driver.mexpect("if_attach_view", [base+1, 0])
210
- #@driver.mexpect("if_init_view", ["my_other_controller", {}, base+5, ["main"]])
211
- #@driver.mexpect("if_controller_init", [base+4, base+5, "my_other_controller", {}])
212
- #@driver.mexpect("if_attach_view", [base+5, base+2])
213
- #@driver.mexpect("if_event", [base+4, "action", {"from" => nil, "to" => "index"}])
214
- #@driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
215
-
216
- ##Expect the view to be removed, and for our action to switch
217
- #@driver.mexpect("if_free_view", [base+5])
218
- #@driver.mexpect("if_event", [base, "action", {"from" => "index", "to" => "other"}])
219
-
220
- #@driver.int "int_debug_dump_ui", []
221
- #@driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
222
- #"type" => "spot",
223
- #"name" => "root",
224
- #"ptr" => 0,
225
- #"children" => [
226
- #{
227
- #"name" => "my_controller",
228
- #"events" => ["test2"],
229
- #"ptr" => base,
230
- #"type" => "vc",
231
- #"action" => "other",
232
- #"children" => [
233
- #{
234
- #"type" => "view",
235
- #"name" => "my_controller",
236
- #"ptr" => base+1,
237
- #"children" => [
238
- #{"name" => "one", "type" => "spot", "children" => [], "ptr" => base+2},
239
- #{"name" => "two", "type" => "spot", "children" => [], "ptr" => base+3},
240
- #]
241
- #}
242
- #]
243
- #}
244
- #]
245
- #}])
246
- #end
12
+ it "Can call int_debug_dump_ui and get back root view hierarchy" do
13
+ #Compile the controller
14
+ ctx = flok_new_user File.read('./spec/kern/assets/controller_bare.rb')
15
+
16
+ #Do not run anything
17
+ ctx.eval %{
18
+ int_dispatch([]);
19
+ }
20
+
21
+ @driver.int "int_debug_dump_ui", []
22
+
23
+ @driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
24
+ "type" => "spot",
25
+ "name" => "root",
26
+ "ptr" => 0,
27
+ "children" => []
28
+ }])
29
+ end
30
+
31
+ it "Can call int_debug_dump_ui for one controller correctly" do
32
+ #Compile the controller
33
+ ctx = flok_new_user File.read('./spec/kern/assets/controller_bare.rb')
34
+
35
+ #Do not run anything
36
+ ctx.eval %{
37
+ //Call embed on main root view
38
+ base = _embed("my_controller", 0, {}, null);
39
+
40
+ //Drain queue
41
+ int_dispatch([]);
42
+ }
43
+
44
+ base = ctx.eval("base")
45
+
46
+ @driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main"]])
47
+ @driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
48
+ @driver.mexpect("if_attach_view", [base+1, 0])
49
+ @driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
50
+
51
+ @driver.int "int_debug_dump_ui", []
52
+ @driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
53
+ "type" => "spot",
54
+ "name" => "root",
55
+ "ptr" => 0,
56
+ "children" => [
57
+ {
58
+ "name" => "my_controller",
59
+ "ptr" => base,
60
+ "type" => "vc",
61
+ "action" => "index",
62
+ "events" => ["test"],
63
+ "children" => [
64
+ {
65
+ "type" => "view",
66
+ "name" => "my_controller",
67
+ "ptr" => base+1,
68
+ "children" => []
69
+ }
70
+ ]
71
+ }
72
+ ]
73
+ }])
74
+ end
75
+
76
+ it "Can call int_debug_dump_ui for one controller correctly with spots" do
77
+ #Compile the controller
78
+ ctx = flok_new_user File.read('./spec/kern/assets/controller_spots.rb')
79
+
80
+ #Do not run anything
81
+ ctx.eval %{
82
+ //Call embed on main root view
83
+ base = _embed("my_controller", 0, {}, null);
84
+
85
+ //Drain queue
86
+ int_dispatch([]);
87
+ }
88
+
89
+ base = ctx.eval("base")
90
+
91
+ @driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "one", "two"]])
92
+ @driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
93
+ @driver.mexpect("if_attach_view", [base+1, 0])
94
+ @driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
95
+
96
+ @driver.int "int_debug_dump_ui", []
97
+ @driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
98
+ "type" => "spot",
99
+ "name" => "root",
100
+ "ptr" => 0,
101
+ "children" => [
102
+ {
103
+ "name" => "my_controller",
104
+ "ptr" => base,
105
+ "type" => "vc",
106
+ "action" => "index",
107
+ "events" => ["test", "test2"],
108
+ "children" => [
109
+ {
110
+ "type" => "view",
111
+ "name" => "my_controller",
112
+ "ptr" => base+1,
113
+ "children" => [
114
+ {"name" => "one", "type" => "spot", "children" => [], "ptr" => base+2},
115
+ {"name" => "two", "type" => "spot", "children" => [], "ptr" => base+3},
116
+ ]
117
+ }
118
+ ]
119
+ }
120
+ ]
121
+ }])
122
+ end
123
+
124
+ it "Can call int_debug_dump_ui for one controller correctly with spots and one embedded" do
125
+ #Compile the controller
126
+ ctx = flok_new_user File.read('./spec/kern/assets/controller_spots_embed.rb')
127
+
128
+ #Do not run anything
129
+ ctx.eval %{
130
+ //Call embed on main root view
131
+ base = _embed("my_controller", 0, {}, null);
132
+
133
+ //Drain queue
134
+ int_dispatch([]);
135
+ }
136
+
137
+ base = ctx.eval("base")
138
+
139
+ @driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "one", "two"]])
140
+ @driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
141
+ @driver.mexpect("if_attach_view", [base+1, 0])
142
+ @driver.mexpect("if_init_view", ["my_other_controller", {}, base+5, ["main"]])
143
+ @driver.mexpect("if_controller_init", [base+4, base+5, "my_other_controller", {}])
144
+ @driver.mexpect("if_attach_view", [base+5, base+2])
145
+ @driver.mexpect("if_event", [base+4, "action", {"from" => nil, "to" => "index"}])
146
+ @driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
147
+
148
+ @driver.int "int_debug_dump_ui", []
149
+ @driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
150
+ "type" => "spot",
151
+ "name" => "root",
152
+ "ptr" => 0,
153
+ "children" => [
154
+ {
155
+ "name" => "my_controller",
156
+ "ptr" => base,
157
+ "type" => "vc",
158
+ "action" => "index",
159
+ "events" => ["test1"],
160
+ "children" => [
161
+ {
162
+ "type" => "view",
163
+ "name" => "my_controller",
164
+ "ptr" => base+1,
165
+ "children" => [
166
+ {"name" => "one", "type" => "spot", "children" => [
167
+ {
168
+ "name" => "my_other_controller",
169
+ "ptr" => base+4,
170
+ "type" => "vc",
171
+ "action" => "index",
172
+ "events" => ["test2"],
173
+ "children" => [
174
+ {
175
+ "type" => "view",
176
+ "ptr" => base+5,
177
+ "name" => "my_other_controller",
178
+ "children" => [],
179
+ }
180
+ ]
181
+ }
182
+ ], "ptr" => base+2},
183
+ {"name" => "two", "type" => "spot", "children" => [], "ptr" => base+3},
184
+ ]
185
+ }
186
+ ]
187
+ }
188
+ ]
189
+ }])
190
+ end
191
+
192
+ it "Can call int_debug_dump_ui for one controller correctly with spots and one embedded that was later removed" do
193
+ #Compile the controller
194
+ ctx = flok_new_user File.read('./spec/kern/assets/controller_spots_embed_removed.rb')
195
+
196
+ #Do not run anything
197
+ ctx.eval %{
198
+ //Call embed on main root view
199
+ base = _embed("my_controller", 0, {}, null);
200
+
201
+ //Drain queue
202
+ int_dispatch([3, "int_event", base, "next", {}]);
203
+ }
204
+
205
+ base = ctx.eval("base")
206
+
207
+ @driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "one", "two"]])
208
+ @driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
209
+ @driver.mexpect("if_attach_view", [base+1, 0])
210
+ @driver.mexpect("if_init_view", ["my_other_controller", {}, base+5, ["main"]])
211
+ @driver.mexpect("if_controller_init", [base+4, base+5, "my_other_controller", {}])
212
+ @driver.mexpect("if_attach_view", [base+5, base+2])
213
+ @driver.mexpect("if_event", [base+4, "action", {"from" => nil, "to" => "index"}])
214
+ @driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "index"}])
215
+
216
+ #Expect the view to be removed, and for our action to switch
217
+ @driver.mexpect("if_free_view", [base+5])
218
+ @driver.mexpect("if_event", [base, "action", {"from" => "index", "to" => "other"}])
219
+
220
+ @driver.int "int_debug_dump_ui", []
221
+ @driver.mexpect("if_event", [-333, "debug_dump_ui_res", {
222
+ "type" => "spot",
223
+ "name" => "root",
224
+ "ptr" => 0,
225
+ "children" => [
226
+ {
227
+ "name" => "my_controller",
228
+ "events" => ["test2"],
229
+ "ptr" => base,
230
+ "type" => "vc",
231
+ "action" => "other",
232
+ "children" => [
233
+ {
234
+ "type" => "view",
235
+ "name" => "my_controller",
236
+ "ptr" => base+1,
237
+ "children" => [
238
+ {"name" => "one", "type" => "spot", "children" => [], "ptr" => base+2},
239
+ {"name" => "two", "type" => "spot", "children" => [], "ptr" => base+3},
240
+ ]
241
+ }
242
+ ]
243
+ }
244
+ ]
245
+ }])
246
+ end
247
247
 
248
248
  it "Can go forward and then back and have the correct hierarchy (where a parent controlls children like nav)" do
249
249
  #Compile the controller