https://github.com/akkartik/mu/blob/master/edit/010-sandbox-trace.mu
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 null/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 ]