flok 0.0.36 → 0.0.38

Sign up to get free protection for your applications and to get access to all the features.
Files changed (106) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +1 -0
  3. data/app/drivers/chrome/build_context.rb +1 -1
  4. data/app/drivers/chrome/config.yml +10 -0
  5. data/app/drivers/chrome/pipe.rb +24 -1
  6. data/app/drivers/chrome/src/persist.js +29 -0
  7. data/app/drivers/chrome/src/sockio.js +3 -1
  8. data/app/drivers/chrome/src/vendor/store2.js +3 -0
  9. data/app/kern/callout.js +55 -0
  10. data/app/kern/controller.js +3 -0
  11. data/app/kern/crc32.js +22 -0
  12. data/app/kern/dispatch.js +16 -0
  13. data/app/kern/mod/event.js +3 -0
  14. data/app/kern/mod/persist.js +1 -0
  15. data/app/kern/mod/timer.js +5 -0
  16. data/app/kern/pagers/mem_pager.js +2 -0
  17. data/app/kern/pagers/sockio_pager.js +66 -0
  18. data/app/kern/pagers/spec0.js +35 -0
  19. data/app/kern/pagers/spec1.js +24 -0
  20. data/app/kern/pagers/spec2.js +31 -0
  21. data/app/kern/services/test.rb +7 -0
  22. data/app/kern/services/vm.rb +141 -0
  23. data/app/kern/spec_helper.js +5 -0
  24. data/bin/flok +27 -5
  25. data/docs/callout.md +8 -0
  26. data/docs/client_api.md +1 -1
  27. data/docs/compilation.md +14 -8
  28. data/docs/controllers.md +2 -1
  29. data/docs/datatypes.md +3 -1
  30. data/docs/environmentals.md +6 -0
  31. data/docs/interactive.md +6 -1
  32. data/docs/kernel_api.md +3 -0
  33. data/docs/mod/event.md +5 -1
  34. data/docs/mod/persist.md +14 -31
  35. data/docs/mod/timer.md +4 -2
  36. data/docs/project.md +16 -5
  37. data/docs/scheduling.md +1 -0
  38. data/docs/services.md +141 -56
  39. data/docs/services/vm.md +128 -0
  40. data/docs/services/vm/pagers.md +46 -0
  41. data/lib/flok/build.rb +11 -16
  42. data/lib/flok/platform.rb +29 -6
  43. data/lib/flok/project_template/app/scripts/script.js +3 -0
  44. data/lib/flok/project_template/app/services/service.rb +1 -0
  45. data/lib/flok/project_template/config/config.yml +1 -0
  46. data/lib/flok/project_template/config/platforms/chrome/config.yml +1 -0
  47. data/lib/flok/project_template/config/services.rb +1 -0
  48. data/lib/flok/service_compiler_templates/services.js.erb +78 -9
  49. data/lib/flok/services_compiler.rb +117 -20
  50. data/lib/flok/user_compiler.rb +14 -6
  51. data/lib/flok/user_compiler_templates/ctable.js.erb +10 -0
  52. data/lib/flok/version.rb +1 -1
  53. data/spec/env/etc.rb +1 -1
  54. data/spec/env/global.rb +2 -0
  55. data/spec/env/iface.rb +20 -4
  56. data/spec/env/kern.rb +8 -3
  57. data/spec/etc/cli_spec.rb +319 -165
  58. data/spec/etc/lib/assets/config.yml +3 -0
  59. data/spec/etc/lib/platform_spec.rb +14 -10
  60. data/spec/etc/lib/project_spec.rb +22 -0
  61. data/spec/etc/service_compiler/config0.rb +1 -0
  62. data/spec/etc/service_compiler/config1.rb +1 -0
  63. data/spec/etc/service_compiler/config2.rb +3 -0
  64. data/spec/etc/service_compiler/service0.rb +22 -6
  65. data/spec/etc/service_compiler/service1.rb +26 -0
  66. data/spec/etc/service_compiler/service_bad_type.rb +20 -0
  67. data/spec/etc/services_compiler_spec.rb +35 -16
  68. data/spec/etc/user_compiler/data.js +2 -0
  69. data/spec/etc/user_compiler_spec.rb +7 -1
  70. data/spec/iface/driver/persist_spec.rb +106 -0
  71. data/spec/iface/driver/pipe_spec.rb +5 -0
  72. data/spec/iface/kern/ping_spec.rb +4 -3
  73. data/spec/kern/assets/blank.rb +0 -0
  74. data/spec/kern/assets/service0.rb +24 -0
  75. data/spec/kern/assets/service1.rb +22 -0
  76. data/spec/kern/assets/service2.rb +27 -0
  77. data/spec/kern/assets/service_config0.rb +2 -0
  78. data/spec/kern/assets/service_config1.rb +2 -0
  79. data/spec/kern/assets/service_controller0.rb +13 -0
  80. data/spec/kern/assets/service_controller1.rb +32 -0
  81. data/spec/kern/assets/service_controller2.rb +38 -0
  82. data/spec/kern/assets/service_controller3.rb +38 -0
  83. data/spec/kern/assets/vm/config0.rb +2 -0
  84. data/spec/kern/assets/vm/config1.rb +12 -0
  85. data/spec/kern/assets/vm/config2.rb +12 -0
  86. data/spec/kern/assets/vm/config3.rb +12 -0
  87. data/spec/kern/assets/vm/controller0.rb +8 -0
  88. data/spec/kern/assets/vm/controller1.rb +18 -0
  89. data/spec/kern/assets/vm/controller2.rb +18 -0
  90. data/spec/kern/assets/vm/controller3.rb +20 -0
  91. data/spec/kern/assets/vm/controller4.rb +22 -0
  92. data/spec/kern/assets/vm/controller5.rb +22 -0
  93. data/spec/kern/assets/vm/controller6.rb +21 -0
  94. data/spec/kern/assets/vm/service0.rb +24 -0
  95. data/spec/kern/assets/vm/service_controller0.rb +7 -0
  96. data/spec/kern/callout_spec.rb +153 -0
  97. data/spec/kern/functions_spec.rb +29 -0
  98. data/spec/kern/service_controller_spec.rb +213 -0
  99. data/spec/kern/vm_service_spec.rb +195 -0
  100. metadata +98 -12
  101. data/app/kern/services/rest.rb +0 -310
  102. data/app/kern/services/timer.rb +0 -30
  103. data/docs/services/timer.md +0 -21
  104. data/spec/kern/assets/rest_service.rb +0 -20
  105. data/spec/kern/assets/timer_service.rb +0 -19
  106. data/spec/kern/timer_service_spec.rb +0 -40
@@ -1,310 +0,0 @@
1
- service("rest") do
2
- on_init %{
3
- //Code inserted here is put into the global space, add initialization
4
- //procedures, functions that need to be called, etc.
5
- //
6
- //You may use the function respond(info) within here to
7
-
8
- //Store the in-progress requests as a list of hashes
9
- //that contain an array in the order of [event_pointer, evenct_name]
10
- var service_rest_tp_to_einfo = {}
11
-
12
- function service_rest_callback(tp, success, info) {
13
- ////Lookup event info
14
- var einfo = service_rest_tp_to_einfo[tp];
15
-
16
- ////Send info back to service
17
- int_event(einfo[0], einfo[1], {success: success, info: info});
18
-
19
- //Remove entries in telepointer table and rest service info
20
- tel_del(tp);
21
- delete service_rest_tp_to_einfo[tp];
22
- }
23
-
24
- /*
25
- * Secure Hash Algorithm (SHA512)
26
- * http://www.happycode.info/
27
- */
28
-
29
- function SHA512(str) {
30
- function int64(msint_32, lsint_32) {
31
- this.highOrder = msint_32;
32
- this.lowOrder = lsint_32;
33
- }
34
-
35
- var H = [new int64(0x6a09e667, 0xf3bcc908), new int64(0xbb67ae85, 0x84caa73b),
36
- new int64(0x3c6ef372, 0xfe94f82b), new int64(0xa54ff53a, 0x5f1d36f1),
37
- new int64(0x510e527f, 0xade682d1), new int64(0x9b05688c, 0x2b3e6c1f),
38
- new int64(0x1f83d9ab, 0xfb41bd6b), new int64(0x5be0cd19, 0x137e2179)];
39
-
40
- var K = [new int64(0x428a2f98, 0xd728ae22), new int64(0x71374491, 0x23ef65cd),
41
- new int64(0xb5c0fbcf, 0xec4d3b2f), new int64(0xe9b5dba5, 0x8189dbbc),
42
- new int64(0x3956c25b, 0xf348b538), new int64(0x59f111f1, 0xb605d019),
43
- new int64(0x923f82a4, 0xaf194f9b), new int64(0xab1c5ed5, 0xda6d8118),
44
- new int64(0xd807aa98, 0xa3030242), new int64(0x12835b01, 0x45706fbe),
45
- new int64(0x243185be, 0x4ee4b28c), new int64(0x550c7dc3, 0xd5ffb4e2),
46
- new int64(0x72be5d74, 0xf27b896f), new int64(0x80deb1fe, 0x3b1696b1),
47
- new int64(0x9bdc06a7, 0x25c71235), new int64(0xc19bf174, 0xcf692694),
48
- new int64(0xe49b69c1, 0x9ef14ad2), new int64(0xefbe4786, 0x384f25e3),
49
- new int64(0x0fc19dc6, 0x8b8cd5b5), new int64(0x240ca1cc, 0x77ac9c65),
50
- new int64(0x2de92c6f, 0x592b0275), new int64(0x4a7484aa, 0x6ea6e483),
51
- new int64(0x5cb0a9dc, 0xbd41fbd4), new int64(0x76f988da, 0x831153b5),
52
- new int64(0x983e5152, 0xee66dfab), new int64(0xa831c66d, 0x2db43210),
53
- new int64(0xb00327c8, 0x98fb213f), new int64(0xbf597fc7, 0xbeef0ee4),
54
- new int64(0xc6e00bf3, 0x3da88fc2), new int64(0xd5a79147, 0x930aa725),
55
- new int64(0x06ca6351, 0xe003826f), new int64(0x14292967, 0x0a0e6e70),
56
- new int64(0x27b70a85, 0x46d22ffc), new int64(0x2e1b2138, 0x5c26c926),
57
- new int64(0x4d2c6dfc, 0x5ac42aed), new int64(0x53380d13, 0x9d95b3df),
58
- new int64(0x650a7354, 0x8baf63de), new int64(0x766a0abb, 0x3c77b2a8),
59
- new int64(0x81c2c92e, 0x47edaee6), new int64(0x92722c85, 0x1482353b),
60
- new int64(0xa2bfe8a1, 0x4cf10364), new int64(0xa81a664b, 0xbc423001),
61
- new int64(0xc24b8b70, 0xd0f89791), new int64(0xc76c51a3, 0x0654be30),
62
- new int64(0xd192e819, 0xd6ef5218), new int64(0xd6990624, 0x5565a910),
63
- new int64(0xf40e3585, 0x5771202a), new int64(0x106aa070, 0x32bbd1b8),
64
- new int64(0x19a4c116, 0xb8d2d0c8), new int64(0x1e376c08, 0x5141ab53),
65
- new int64(0x2748774c, 0xdf8eeb99), new int64(0x34b0bcb5, 0xe19b48a8),
66
- new int64(0x391c0cb3, 0xc5c95a63), new int64(0x4ed8aa4a, 0xe3418acb),
67
- new int64(0x5b9cca4f, 0x7763e373), new int64(0x682e6ff3, 0xd6b2b8a3),
68
- new int64(0x748f82ee, 0x5defb2fc), new int64(0x78a5636f, 0x43172f60),
69
- new int64(0x84c87814, 0xa1f0ab72), new int64(0x8cc70208, 0x1a6439ec),
70
- new int64(0x90befffa, 0x23631e28), new int64(0xa4506ceb, 0xde82bde9),
71
- new int64(0xbef9a3f7, 0xb2c67915), new int64(0xc67178f2, 0xe372532b),
72
- new int64(0xca273ece, 0xea26619c), new int64(0xd186b8c7, 0x21c0c207),
73
- new int64(0xeada7dd6, 0xcde0eb1e), new int64(0xf57d4f7f, 0xee6ed178),
74
- new int64(0x06f067aa, 0x72176fba), new int64(0x0a637dc5, 0xa2c898a6),
75
- new int64(0x113f9804, 0xbef90dae), new int64(0x1b710b35, 0x131c471b),
76
- new int64(0x28db77f5, 0x23047d84), new int64(0x32caab7b, 0x40c72493),
77
- new int64(0x3c9ebe0a, 0x15c9bebc), new int64(0x431d67c4, 0x9c100d4c),
78
- new int64(0x4cc5d4be, 0xcb3e42b6), new int64(0x597f299c, 0xfc657e2a),
79
- new int64(0x5fcb6fab, 0x3ad6faec), new int64(0x6c44198c, 0x4a475817)];
80
-
81
- var W = new Array(64);
82
- var a, b, c, d, e, f, g, h, i, j;
83
- var T1, T2;
84
- var charsize = 8;
85
-
86
- function utf8_encode(str) {
87
- return unescape(encodeURIComponent(str));
88
- }
89
-
90
- function str2binb(str) {
91
- var bin = [];
92
- var mask = (1 << charsize) - 1;
93
- var len = str.length * charsize;
94
-
95
- for (var i = 0; i < len; i += charsize) {
96
- bin[i >> 5] |= (str.charCodeAt(i / charsize) & mask) << (32 - charsize - (i % 32));
97
- }
98
-
99
- return bin;
100
- }
101
-
102
- function binb2hex(binarray) {
103
- var hex_tab = "0123456789abcdef";
104
- var str = "";
105
- var length = binarray.length * 4;
106
- var srcByte;
107
-
108
- for (var i = 0; i < length; i += 1) {
109
- srcByte = binarray[i >> 2] >> ((3 - (i % 4)) * 8);
110
- str += hex_tab.charAt((srcByte >> 4) & 0xF) + hex_tab.charAt(srcByte & 0xF);
111
- }
112
-
113
- return str;
114
- }
115
-
116
- function safe_add_2(x, y) {
117
- var lsw, msw, lowOrder, highOrder;
118
-
119
- lsw = (x.lowOrder & 0xFFFF) + (y.lowOrder & 0xFFFF);
120
- msw = (x.lowOrder >>> 16) + (y.lowOrder >>> 16) + (lsw >>> 16);
121
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
122
-
123
- lsw = (x.highOrder & 0xFFFF) + (y.highOrder & 0xFFFF) + (msw >>> 16);
124
- msw = (x.highOrder >>> 16) + (y.highOrder >>> 16) + (lsw >>> 16);
125
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
126
-
127
- return new int64(highOrder, lowOrder);
128
- }
129
-
130
- function safe_add_4(a, b, c, d) {
131
- var lsw, msw, lowOrder, highOrder;
132
-
133
- lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF);
134
- msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (lsw >>> 16);
135
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
136
-
137
- lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (msw >>> 16);
138
- msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (lsw >>> 16);
139
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
140
-
141
- return new int64(highOrder, lowOrder);
142
- }
143
-
144
- function safe_add_5(a, b, c, d, e) {
145
- var lsw, msw, lowOrder, highOrder;
146
-
147
- lsw = (a.lowOrder & 0xFFFF) + (b.lowOrder & 0xFFFF) + (c.lowOrder & 0xFFFF) + (d.lowOrder & 0xFFFF) + (e.lowOrder & 0xFFFF);
148
- msw = (a.lowOrder >>> 16) + (b.lowOrder >>> 16) + (c.lowOrder >>> 16) + (d.lowOrder >>> 16) + (e.lowOrder >>> 16) + (lsw >>> 16);
149
- lowOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
150
-
151
- lsw = (a.highOrder & 0xFFFF) + (b.highOrder & 0xFFFF) + (c.highOrder & 0xFFFF) + (d.highOrder & 0xFFFF) + (e.highOrder & 0xFFFF) + (msw >>> 16);
152
- msw = (a.highOrder >>> 16) + (b.highOrder >>> 16) + (c.highOrder >>> 16) + (d.highOrder >>> 16) + (e.highOrder >>> 16) + (lsw >>> 16);
153
- highOrder = ((msw & 0xFFFF) << 16) | (lsw & 0xFFFF);
154
-
155
- return new int64(highOrder, lowOrder);
156
- }
157
-
158
- function maj(x, y, z) {
159
- return new int64(
160
- (x.highOrder & y.highOrder) ^ (x.highOrder & z.highOrder) ^ (y.highOrder & z.highOrder),
161
- (x.lowOrder & y.lowOrder) ^ (x.lowOrder & z.lowOrder) ^ (y.lowOrder & z.lowOrder)
162
- );
163
- }
164
-
165
- function ch(x, y, z) {
166
- return new int64(
167
- (x.highOrder & y.highOrder) ^ (~x.highOrder & z.highOrder),
168
- (x.lowOrder & y.lowOrder) ^ (~x.lowOrder & z.lowOrder)
169
- );
170
- }
171
-
172
- function rotr(x, n) {
173
- if (n <= 32) {
174
- return new int64(
175
- (x.highOrder >>> n) | (x.lowOrder << (32 - n)),
176
- (x.lowOrder >>> n) | (x.highOrder << (32 - n))
177
- );
178
- } else {
179
- return new int64(
180
- (x.lowOrder >>> n) | (x.highOrder << (32 - n)),
181
- (x.highOrder >>> n) | (x.lowOrder << (32 - n))
182
- );
183
- }
184
- }
185
-
186
- function sigma0(x) {
187
- var rotr28 = rotr(x, 28);
188
- var rotr34 = rotr(x, 34);
189
- var rotr39 = rotr(x, 39);
190
-
191
- return new int64(
192
- rotr28.highOrder ^ rotr34.highOrder ^ rotr39.highOrder,
193
- rotr28.lowOrder ^ rotr34.lowOrder ^ rotr39.lowOrder
194
- );
195
- }
196
-
197
- function sigma1(x) {
198
- var rotr14 = rotr(x, 14);
199
- var rotr18 = rotr(x, 18);
200
- var rotr41 = rotr(x, 41);
201
-
202
- return new int64(
203
- rotr14.highOrder ^ rotr18.highOrder ^ rotr41.highOrder,
204
- rotr14.lowOrder ^ rotr18.lowOrder ^ rotr41.lowOrder
205
- );
206
- }
207
-
208
- function gamma0(x) {
209
- var rotr1 = rotr(x, 1), rotr8 = rotr(x, 8), shr7 = shr(x, 7);
210
-
211
- return new int64(
212
- rotr1.highOrder ^ rotr8.highOrder ^ shr7.highOrder,
213
- rotr1.lowOrder ^ rotr8.lowOrder ^ shr7.lowOrder
214
- );
215
- }
216
-
217
- function gamma1(x) {
218
- var rotr19 = rotr(x, 19);
219
- var rotr61 = rotr(x, 61);
220
- var shr6 = shr(x, 6);
221
-
222
- return new int64(
223
- rotr19.highOrder ^ rotr61.highOrder ^ shr6.highOrder,
224
- rotr19.lowOrder ^ rotr61.lowOrder ^ shr6.lowOrder
225
- );
226
- }
227
-
228
- function shr(x, n) {
229
- if (n <= 32) {
230
- return new int64(
231
- x.highOrder >>> n,
232
- x.lowOrder >>> n | (x.highOrder << (32 - n))
233
- );
234
- } else {
235
- return new int64(
236
- 0,
237
- x.highOrder << (32 - n)
238
- );
239
- }
240
- }
241
-
242
- str = utf8_encode(str);
243
- strlen = str.length*charsize;
244
- str = str2binb(str);
245
-
246
- str[strlen >> 5] |= 0x80 << (24 - strlen % 32);
247
- str[(((strlen + 128) >> 10) << 5) + 31] = strlen;
248
-
249
- for (var i = 0; i < str.length; i += 32) {
250
- a = H[0];
251
- b = H[1];
252
- c = H[2];
253
- d = H[3];
254
- e = H[4];
255
- f = H[5];
256
- g = H[6];
257
- h = H[7];
258
-
259
- for (var j = 0; j < 80; j++) {
260
- if (j < 16) {
261
- W[j] = new int64(str[j*2 + i], str[j*2 + i + 1]);
262
- } else {
263
- W[j] = safe_add_4(gamma1(W[j - 2]), W[j - 7], gamma0(W[j - 15]), W[j - 16]);
264
- }
265
-
266
- T1 = safe_add_5(h, sigma1(e), ch(e, f, g), K[j], W[j]);
267
- T2 = safe_add_2(sigma0(a), maj(a, b, c));
268
- h = g;
269
- g = f;
270
- f = e;
271
- e = safe_add_2(d, T1);
272
- d = c;
273
- c = b;
274
- b = a;
275
- a = safe_add_2(T1, T2);
276
- }
277
-
278
- H[0] = safe_add_2(a, H[0]);
279
- H[1] = safe_add_2(b, H[1]);
280
- H[2] = safe_add_2(c, H[2]);
281
- H[3] = safe_add_2(d, H[3]);
282
- H[4] = safe_add_2(e, H[4]);
283
- H[5] = safe_add_2(f, H[5]);
284
- H[6] = safe_add_2(g, H[6]);
285
- H[7] = safe_add_2(h, H[7]);
286
- }
287
-
288
- var binarray = [];
289
- for (var i = 0; i < H.length; i++) {
290
- binarray.push(H[i].highOrder);
291
- binarray.push(H[i].lowOrder);
292
- }
293
- return binb2hex(binarray);
294
- }
295
- }
296
-
297
- on_request %{
298
- //Code that handles a payload goes here.
299
- //You have access to `info`, `ep`, and `ename` which was given in the ServiceRequest macro
300
-
301
- //Create a GET request that will respond to the telepointer
302
- var tp = tel_reg(service_rest_callback);
303
-
304
- //Now register the event information to respond to when a callback is received
305
- service_rest_tp_to_einfo[tp] = [ep, ename]
306
-
307
- //Start the request
308
- SEND("net", "if_net_req", "GET", info.url, info.params, tp)
309
- }
310
- end
@@ -1,30 +0,0 @@
1
- service("timer") do
2
- on_init %{
3
- //Entries in the timer event table are stored as an array of arrays, each array
4
- //contains [N, bp, event_name]
5
-
6
- var timer_evt = [];
7
- //Call an event N times per second
8
- function reg_timer_ev(n, bp, ename) {
9
- timer_evt.push([n, bp, ename]);
10
- }
11
-
12
- //Timer position
13
- var ttick = 0;
14
- function int_timer() {
15
- ttick += 1;
16
-
17
- for (var i = 0; i < timer_evt.length; ++i) {
18
- if (ttick % timer_evt[i][0] == 0) {
19
- var bp = timer_evt[i][1];
20
- var ename = timer_evt[i][2];
21
- int_event(bp, ename, {});
22
- }
23
- }
24
- }
25
- }
26
-
27
- on_request %{
28
- timer_evt.push([info.ticks, ep, ename]);
29
- }
30
- end
@@ -1,21 +0,0 @@
1
- #Timer service
2
- This service manages the `int_timer` function (which is a little different than how most modules work). When an `int_timer` request
3
- comes in, the timer service dispatches it to an apprpriate controller event handler.
4
-
5
- Timer service mantains an `timer_evt` which contains an array of arrays for interval timers that will be called (recurring) periodically.
6
- The elements of `timer_evt` are an array with the following information: `[tps, base_pointer, event_name]`. When `int_timer` is called,
7
- it will send events to all entries in `timer_evt` which have a `ticks` that is a modulo of `ttick`; the global tick counter.
8
-
9
- ###Info to start a request
10
- ```js
11
- var info = {
12
- ticks: 4,
13
- }
14
- ```
15
- `ticks` the number of ticks to wait between fires.
16
-
17
- When you receive a request back, you will receive
18
- ```js
19
- {
20
- }
21
- ```
@@ -1,20 +0,0 @@
1
- controller :my_controller do
2
- spots "hello", "world"
3
-
4
- action :my_action do
5
- on_entry %{
6
- }
7
-
8
- on "start_request", %{
9
- var payload = {
10
- url: "http://test.services.fittr.com/ping",
11
- params: {},
12
- };
13
- Request("rest", payload, "request_response");
14
- }
15
-
16
- on "request_response", %{
17
- response = params;
18
- }
19
- end
20
- end
@@ -1,19 +0,0 @@
1
- controller :my_controller do
2
- spots "hello", "world"
3
-
4
- action :my_action do
5
- on_entry %{
6
- }
7
-
8
- on "start_request", %{
9
- var payload = {
10
- ticks: 4
11
- };
12
- Request("timer", payload, "tick");
13
- }
14
-
15
- on "tick", %{
16
- did_tick = true;
17
- }
18
- end
19
- end
@@ -1,40 +0,0 @@
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:timer_service_spec" do
8
- include_context "kern"
9
-
10
- #Can initialize a controller via embed and have the correct if_dispatch messages
11
- it "Can initiate a controller via _embed" do
12
- #Compile the controller
13
- ctx = flok_new_user File.read('./spec/kern/assets/timer_service.rb')
14
-
15
- #Run the embed function
16
- ctx.eval %{
17
- //Call embed on main root view
18
- base = _embed("my_controller", 0, {}, null);
19
-
20
- //Drain queue with a test event
21
- int_dispatch([3, "int_event", base, "start_request", {}]);
22
- }
23
-
24
- base = ctx.eval("base")
25
-
26
- @driver.mexpect("if_init_view", ["my_controller", {}, base+1, ["main", "hello", "world"]])
27
- @driver.mexpect("if_controller_init", [base, base+1, "my_controller", {}])
28
- @driver.mexpect("if_attach_view", [base+1, 0])
29
- @driver.mexpect("if_event", [base, "action", {"from" => nil, "to" => "my_action"}])
30
-
31
- #Emulate the if_timer driver
32
- @driver.int("int_timer")
33
- @driver.int("int_timer")
34
- @driver.int("int_timer")
35
- @driver.int("int_timer")
36
-
37
- response = ctx.eval("did_tick")
38
- expect(response).to eq(true)
39
- end
40
- end