https://github.com/akkartik/mu/blob/master/edit/007-sandbox-delete.mu
1
2
3 scenario deleting-sandboxes [
4 local-scope
5 trace-until 100/app
6 assume-screen 100/width, 15/height
7 assume-resources [
8 ]
9 env:&:environment <- new-programming-environment resources, screen, []
10 render-all screen, env, render
11
12 assume-console [
13 left-click 1, 75
14 type [divide-with-remainder 11, 3]
15 press F4
16 type [add 2, 2]
17 press F4
18 ]
19 event-loop screen, console, env, resources
20 screen-should-contain [
21 . run (F4) .
22 . ╎ .
23 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
24 . ╎0 edit copy to recipe delete .
25 . ╎add 2, 2 .
26 . ╎4 .
27 . ╎─────────────────────────────────────────────────.
28 . ╎1 edit copy to recipe delete .
29 . ╎divide-with-remainder 11, 3 .
30 . ╎3 .
31 . ╎2 .
32 . ╎─────────────────────────────────────────────────.
33 . ╎ .
34 ]
35
36 assume-console [
37 left-click 7, 90
38 ]
39 run [
40 event-loop screen, console, env, resources
41 ]
42 screen-should-contain [
43 . run (F4) .
44 . ╎ .
45 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
46 . ╎0 edit copy to recipe delete .
47 . ╎add 2, 2 .
48 . ╎4 .
49 . ╎─────────────────────────────────────────────────.
50 . ╎ .
51 . ╎ .
52 ]
53
54 assume-console [
55 left-click 3, 99
56 ]
57 run [
58 event-loop screen, console, env, resources
59 ]
60 screen-should-contain [
61 . run (F4) .
62 . ╎ .
63 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
64 . ╎ .
65 . ╎ .
66 ]
67 ]
68
69 after <global-touch> [
70
71 {
72 delete?:bool <- should-attempt-delete? click-row, click-column, env
73 break-unless delete?
74 delete?, env <- try-delete-sandbox click-row, env
75 break-unless delete?
76 screen <- render-sandbox-side screen, env, render
77 screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env
78 loop +next-event
79 }
80 ]
81
82
83 def should-attempt-delete? click-row:num, click-column:num, env:&:environment -> result:bool [
84 local-scope
85 load-inputs
86
87 click-sandbox-area?:bool <- click-on-sandbox-area? click-row, click-column, env
88 return-unless click-sandbox-area?, false
89
90 first-sandbox:&:editor <- get *env, current-sandbox:offset
91 assert first-sandbox, [!!]
92 sandbox-left-margin:num <- get *first-sandbox, left:offset
93 sandbox-right-margin:num <- get *first-sandbox, right:offset
94 _, _, _, _, _, _, delete-button-left:num <- sandbox-menu-columns sandbox-left-margin, sandbox-right-margin
95 result <- within-range? click-column, delete-button-left, sandbox-right-margin
96 ]
97
98 def try-delete-sandbox click-row:num, env:&:environment -> clicked-on-delete-button?:bool, env:&:environment [
99 local-scope
100 load-inputs
101
102 sandbox:&:sandbox <- find-sandbox env, click-row
103 return-unless sandbox, false
104 clicked-on-delete-button? <- copy true
105 env <- delete-sandbox env, sandbox
106 ]
107
108 def delete-sandbox env:&:environment, sandbox:&:sandbox -> env:&:environment [
109 local-scope
110 load-inputs
111 curr-sandbox:&:sandbox <- get *env, sandbox:offset
112 first-sandbox?:bool <- equal curr-sandbox, sandbox
113 {
114
115 break-unless first-sandbox?
116 next-sandbox:&:sandbox <- get *curr-sandbox, next-sandbox:offset
117 *env <- put *env, sandbox:offset, next-sandbox
118 }
119 {
120
121 break-if first-sandbox?
122 prev-sandbox:&:sandbox <- copy curr-sandbox
123 curr-sandbox <- get *curr-sandbox, next-sandbox:offset
124 {
125 assert curr-sandbox, [sandbox not found! something is wrong.]
126 found?:bool <- equal curr-sandbox, sandbox
127 break-if found?
128 prev-sandbox <- copy curr-sandbox
129 curr-sandbox <- get *curr-sandbox, next-sandbox:offset
130 loop
131 }
132
133 next-sandbox:&:sandbox <- get *curr-sandbox, next-sandbox:offset
134 *prev-sandbox <- put *prev-sandbox, next-sandbox:offset, next-sandbox
135 }
136
137 sandbox-count:num <- get *env, number-of-sandboxes:offset
138 sandbox-count <- subtract sandbox-count, 1
139 *env <- put *env, number-of-sandboxes:offset, sandbox-count
140
141 {
142 break-if next-sandbox
143 render-from:num <- get *env, render-from:offset
144 reset-scroll?:bool <- equal render-from, sandbox-count
145 break-unless reset-scroll?
146 *env <- put *env, render-from:offset, -1
147 }
148 ]
149
150 scenario deleting-sandbox-after-scroll [
151 local-scope
152 trace-until 100/app
153 assume-screen 100/width, 10/height
154
155 assume-resources [
156 ]
157 env:&:environment <- new-programming-environment resources, screen, []
158 render-all screen, env, render
159
160 assume-console [
161 press ctrl-n
162 type [add 2, 2]
163 press F4
164 type [add 1, 1]
165 press F4
166 press page-down
167 ]
168 event-loop screen, console, env, resources
169 screen-should-contain [
170 . run (F4) .
171 . ╎─────────────────────────────────────────────────.
172 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy to recipe delete .
173 . ╎add 1, 1 .
174 . ╎2 .
175 . ╎─────────────────────────────────────────────────.
176 . ╎1 edit copy to recipe delete .
177 ]
178
179 assume-console [
180 left-click 6, 99
181 ]
182 run [
183 event-loop screen, console, env, resources
184 ]
185
186 screen-should-contain [
187 . run (F4) .
188 . ╎─────────────────────────────────────────────────.
189 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy to recipe delete .
190 . ╎add 1, 1 .
191 . ╎2 .
192 . ╎─────────────────────────────────────────────────.
193 . ╎ .
194 ]
195 ]
196
197 scenario deleting-top-sandbox-after-scroll [
198 local-scope
199 trace-until 100/app
200 assume-screen 100/width, 10/height
201
202 assume-resources [
203 ]
204 env:&:environment <- new-programming-environment resources, screen, []
205 render-all screen, env, render
206
207 assume-console [
208 press ctrl-n
209 type [add 2, 2]
210 press F4
211 type [add 1, 1]
212 press F4
213 press page-down
214 ]
215 event-loop screen, console, env, resources
216 screen-should-contain [
217 . run (F4) .
218 . ╎─────────────────────────────────────────────────.
219 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy to recipe delete .
220 . ╎add 1, 1 .
221 . ╎2 .
222 . ╎─────────────────────────────────────────────────.
223 . ╎1 edit copy to recipe delete .
224 ]
225
226 assume-console [
227 left-click 2, 99
228 ]
229 run [
230 event-loop screen, console, env, resources
231 ]
232
233 screen-should-contain [
234 . run (F4) .
235 . ╎─────────────────────────────────────────────────.
236 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy to recipe delete .
237 . ╎add 2, 2 .
238 . ╎4 .
239 . ╎─────────────────────────────────────────────────.
240 . ╎ .
241 ]
242 ]
243
244 scenario deleting-final-sandbox-after-scroll [
245 local-scope
246 trace-until 100/app
247 assume-screen 100/width, 10/height
248
249 assume-resources [
250 ]
251 env:&:environment <- new-programming-environment resources, screen, []
252 render-all screen, env, render
253
254 assume-console [
255 press ctrl-n
256 type [add 2, 2]
257 press F4
258 type [add 1, 1]
259 press F4
260 press page-down
261 press page-down
262 ]
263 event-loop screen, console, env, resources
264 screen-should-contain [
265 . run (F4) .
266 . ╎─────────────────────────────────────────────────.
267 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎1 edit copy to recipe delete .
268 . ╎add 2, 2 .
269 . ╎4 .
270 . ╎─────────────────────────────────────────────────.
271 . ╎ .
272 ]
273
274 assume-console [
275 left-click 2, 99
276 ]
277 run [
278 event-loop screen, console, env, resources
279 ]
280
281 screen-should-contain [
282 . run (F4) .
283 . ╎ .
284 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
285 . ╎0 edit copy to recipe delete .
286 . ╎add 1, 1 .
287 . ╎2 .
288 . ╎─────────────────────────────────────────────────.
289 . ╎ .
290 ]
291 ]
292
293 scenario deleting-updates-sandbox-count [
294 local-scope
295 trace-until 100/app
296 assume-screen 100/width, 10/height
297
298 assume-resources [
299 ]
300 env:&:environment <- new-programming-environment resources, screen, []
301 render-all screen, env, render
302
303 assume-console [
304 press ctrl-n
305 type [add 2, 2]
306 press F4
307 type [add 1, 1]
308 press F4
309 ]
310 event-loop screen, console, env, resources
311 screen-should-contain [
312 . run (F4) .
313 . ╎ .
314 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎─────────────────────────────────────────────────.
315 . ╎0 edit copy to recipe delete .
316 . ╎add 1, 1 .
317 . ╎2 .
318 . ╎─────────────────────────────────────────────────.
319 . ╎1 edit copy to recipe delete .
320 . ╎add 2, 2 .
321 . ╎4 .
322 ]
323
324 assume-console [
325 left-click 3, 99
326 press page-down
327 press page-down
328 ]
329 run [
330 event-loop screen, console, env, resources
331 ]
332
333 screen-should-contain [
334 . run (F4) .
335 . ╎─────────────────────────────────────────────────.
336 .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎0 edit copy to recipe delete .
337 . ╎add 2, 2 .
338 . ╎4 .
339 . ╎─────────────────────────────────────────────────.
340 . ╎ .
341 ]
342 ]