1
2
3 scenario sandbox-click-on-code-toggles-app-trace [
4 local-scope
5 trace-until 100/app
6 assume-screen 100/width, 10/height
7
8 assume-resources [
9 ¦ [lesson/recipes.mu] <- [
10 ¦ ¦ |recipe foo [|
11 ¦ ¦ | stash [abc]|
12 ¦ ¦ |]|
13 ¦ ]
14 ]
15 env:&:environment <- new-programming-environment resources, screen, [foo]
16 render-all screen, env, render
17
18 assume-console [
19 ¦ press F4
20 ]
21 event-loop screen, console, env, resources
22 screen-should-contain [
23 ¦ . run (F4) .
24 ¦ .recipe foo [ ╎ .
25 ¦ . stash [abc] ╎─────────────────────────────────────────────────.
26 ¦ .] ╎0 edit copy to recipe delete .
27 ¦ . ╎foo .
28 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
29 ¦ . ╎ .
30 ]
31
32 assume-console [
33 ¦ left-click 4, 51
34 ]
35 run [
36 ¦ event-loop screen, console, env, resources
37 ¦ cursor:char <- copy 9251/␣
38 ¦ print screen, cursor
39 ]
40
41 screen-should-contain [
42 ¦ . run (F4) .
43 ¦ .␣ecipe foo [ ╎ .
44 ¦ . stash [abc] ╎─────────────────────────────────────────────────.
45 ¦ .] ╎0 edit copy to recipe delete .
46 ¦ . ╎foo .
47 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎abc .
48 ]
49 screen-should-contain-in-color 245/grey, [
50 ¦ . .
51 ¦ . ╎ .
52 ¦ . ╎─────────────────────────────────────────────────.
53 ¦ . ╎ .
54 ¦ . ╎ .
55 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎abc .
56 ]
57
58 assume-console [
59 ¦ left-click 4, 55
60 ]
61 run [
62 ¦ event-loop screen, console, env, resources
63 ¦ print screen, cursor
64 ]
65
66 screen-should-contain [
67 ¦ . run (F4) .
68 ¦ .␣ecipe foo [ ╎ .
69 ¦ . stash [abc] ╎─────────────────────────────────────────────────.
70 ¦ .] ╎0 edit copy to recipe delete .
71 ¦ . ╎foo .
72 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
73 ¦ . ╎ .
74 ]
75 ]
76
77 scenario sandbox-shows-app-trace-and-result [
78 local-scope
79 trace-until 100/app
80 assume-screen 100/width, 10/height
81
82 assume-resources [
83 ¦ [lesson/recipes.mu] <- [
84 ¦ ¦ |recipe foo [|
85 ¦ ¦ | stash [abc]|
86 ¦ ¦ | reply 4|
87 ¦ ¦ |]|
88 ¦ ]
89 ]
90 env:&:environment <- new-programming-environment resources, screen, [foo]
91 render-all screen, env, render
92
93 assume-console [
94 ¦ press F4
95 ]
96 event-loop screen, console, env, resources
97 screen-should-contain [
98 ¦ . run (F4) .
99 ¦ .recipe foo [ ╎ .
100 ¦ . stash [abc] ╎─────────────────────────────────────────────────.
101 ¦ . reply 4 ╎0 edit copy to recipe delete .
102 ¦ .] ╎foo .
103 ¦ . ╎4 .
104 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
105 ¦ . ╎ .
106 ]
107
108 assume-console [
109 ¦ left-click 4, 51
110 ]
111 run [
112 ¦ event-loop screen, console, env, resources
113 ]
114
115 screen-should-contain [
116 ¦ . run (F4) .
117 ¦ .recipe foo [ ╎ .
118 ¦ . stash [abc] ╎─────────────────────────────────────────────────.
119 ¦ . reply 4 ╎0 edit copy to recipe delete .
120 ¦ .] ╎foo .
121 ¦ . ╎abc .
122 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎8 instructions run .
123 ¦ . ╎4 .
124 ¦ . ╎─────────────────────────────────────────────────.
125 ¦ . ╎ .
126 ]
127 ]
128
129 scenario clicking-on-app-trace-does-nothing [
130 local-scope
131 trace-until 100/app
132 assume-screen 100/width, 10/height
133 assume-resources [
134 ]
135 env:&:environment <- new-programming-environment resources, screen, [stash 123456789]
136 render-all screen, env, render
137
138 assume-console [
139 ¦ press F4
140 ¦ left-click 4, 51
141 ]
142 event-loop screen, console, env, resources
143 screen-should-contain [
144 ¦ . run (F4) .
145 ¦ . ╎ .
146 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
147 ¦ . ╎0 edit copy to recipe delete .
148 ¦ . ╎stash 123456789 .
149 ¦ . ╎123456789 .
150 ]
151
152 assume-console [
153 ¦ left-click 5, 57
154 ]
155 run [
156 ¦ event-loop screen, console, env, resources
157 ]
158
159 screen-should-contain [
160 ¦ . run (F4) .
161 ¦ . ╎ .
162 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
163 ¦ . ╎0 edit copy to recipe delete .
164 ¦ . ╎stash 123456789 .
165 ¦ . ╎123456789 .
166 ]
167 ]
168
169 container sandbox [
170 trace:text
171 display-trace?:bool
172 ]
173
174
175 def! update-sandbox sandbox:&:sandbox, env:&:environment, idx:num -> sandbox:&:sandbox, env:&:environment [
176 local-scope
177 load-inputs
178 data:text <- get *sandbox, data:offset
179 response:text, _, fake-screen:&:screen, trace:text <- run-sandboxed data
180 *sandbox <- put *sandbox, response:offset, response
181 *sandbox <- put *sandbox, screen:offset, fake-screen
182 *sandbox <- put *sandbox, trace:offset, trace
183 ]
184
185
186 after <global-touch> [
187
188 {
189 ¦ sandbox-left-margin:num <- get *current-sandbox, left:offset
190 ¦ click-column:num <- get t, column:offset
191 ¦ on-sandbox-side?:bool <- greater-or-equal click-column, sandbox-left-margin
192 ¦ break-unless on-sandbox-side?
193 ¦ first-sandbox:&:sandbox <- get *env, sandbox:offset
194 ¦ break-unless first-sandbox
195 ¦ first-sandbox-begins:num <- get *first-sandbox, starting-row-on-screen:offset
196 ¦ click-row:num <- get t, row:offset
197 ¦ below-sandbox-editor?:bool <- greater-or-equal click-row, first-sandbox-begins
198 ¦ break-unless below-sandbox-editor?
199 ¦
200 ¦ sandbox:&:sandbox <- find-click-in-sandbox-code env, click-row
201 ¦ break-unless sandbox
202 ¦
203 ¦ x:bool <- get *sandbox, display-trace?:offset
204 ¦ x <- not x
205 ¦ *sandbox <- put *sandbox, display-trace?:offset, x
206 ¦ screen <- render-sandbox-side screen, env, render
207 ¦ screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env
208 ¦ loop +next-event
209 }
210 ]
211
212 def find-click-in-sandbox-code env:&:environment, click-row:num -> sandbox:&:sandbox [
213 local-scope
214 load-inputs
215
216 sandbox <- get *env, sandbox:offset
217 start:num <- get *sandbox, starting-row-on-screen:offset
218 clicked-on-sandboxes?:bool <- greater-or-equal click-row, start
219 assert clicked-on-sandboxes?, [extract-sandbox called on click to sandbox editor]
220
221 {
222 ¦ next-sandbox:&:sandbox <- get *sandbox, next-sandbox:offset
223 ¦ break-unless next-sandbox
224 ¦ next-start:num <- get *next-sandbox, starting-row-on-screen:offset
225 ¦ found?:bool <- lesser-than click-row, next-start
226 ¦ break-if found?
227 ¦ sandbox <- copy next-sandbox
228 ¦ loop
229 }
230
231 code-ending-row:num <- get *sandbox, code-ending-row-on-screen:offset
232 click-above-response?:bool <- lesser-than click-row, code-ending-row
233 start:num <- get *sandbox, starting-row-on-screen:offset
234 click-below-menu?:bool <- greater-than click-row, start
235 click-on-sandbox-code?:bool <- and click-above-response?, click-below-menu?
236 {
237 ¦ break-if click-on-sandbox-code?
238 ¦ return 0/no-click-in-sandbox-output
239 }
240 return sandbox
241 ]
242
243
244 after <render-sandbox-results> [
245 {
246 ¦ display-trace?:bool <- get *sandbox, display-trace?:offset
247 ¦ break-unless display-trace?
248 ¦ sandbox-trace:text <- get *sandbox, trace:offset
249 ¦ break-unless sandbox-trace
250 ¦ row, screen <- render-text screen, sandbox-trace, left, right, 245/grey, row
251 }
252 <render-sandbox-trace-done>
253 ]