1
2
3 scenario sandbox-click-on-result-toggles-color-to-green [
4 local-scope
5 trace-until 100/app
6 assume-screen 100/width, 20/height
7
8 assume-resources [
9 ¦ [lesson/recipes.mu] <- [
10 ¦ ¦ |recipe foo [|
11 ¦ ¦ | reply 4|
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 ¦ . reply 4 ╎─────────────────────────────────────────────────.
26 ¦ .] ╎0 edit copy to recipe delete .
27 ¦ . ╎foo .
28 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎4 .
29 ¦ . ╎─────────────────────────────────────────────────.
30 ¦ . ╎ .
31 ]
32
33 $clear-trace
34 assume-console [
35 ¦ left-click 5, 51
36 ]
37 run [
38 ¦ event-loop screen, console, env, resources
39 ]
40
41 screen-should-contain-in-color 2/green, [
42 ¦ . .
43 ¦ . .
44 ¦ . .
45 ¦ . .
46 ¦ . .
47 ¦ . 4 .
48 ¦ . .
49 ¦ . .
50 ]
51
52 check-trace-count-for-label-lesser-than 250, [print-character]
53
54 run [
55 ¦ cursor:char <- copy 9251/␣
56 ¦ print screen, cursor
57 ]
58 screen-should-contain [
59 ¦ . run (F4) .
60 ¦ .␣ecipe foo [ ╎ .
61 ¦ . reply 4 ╎─────────────────────────────────────────────────.
62 ¦ .] ╎0 edit copy to recipe delete .
63 ¦ . ╎foo .
64 ¦ .╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╎4 .
65 ¦ . ╎─────────────────────────────────────────────────.
66 ¦ . ╎ .
67 ]
68
69
70 assume-console [
71 ¦ left-click 2, 11
72 ¦ press backspace
73 ¦ type [3]
74 ¦ press F4
75 ]
76 run [
77 ¦ event-loop screen, console, env, resources
78 ]
79
80 screen-should-contain-in-color 1/red, [
81 ¦ . .
82 ¦ . .
83 ¦ . .
84 ¦ . .
85 ¦ . .
86 ¦ . 3 .
87 ¦ . .
88 ¦ . .
89 ]
90 ]
91
92
93 container sandbox [
94 response-starting-row-on-screen:num
95 expected-response:text
96 ]
97
98
99 before <end-save-sandbox> [
100 {
101 ¦ expected-response:text <- get *sandbox, expected-response:offset
102 ¦ break-unless expected-response
103 ¦ filename <- append filename, [.out]
104 ¦ resources <- dump resources, filename, expected-response
105 }
106 ]
107
108 before <end-restore-sandbox> [
109 {
110 ¦ filename <- append filename, [.out]
111 ¦ contents <- slurp resources, filename
112 ¦ break-unless contents
113 ¦ *curr <- put *curr, expected-response:offset, contents
114 }
115 ]
116
117
118 after <global-touch> [
119
120 {
121 ¦ sandbox-left-margin:num <- get *current-sandbox, left:offset
122 ¦ click-column:num <- get t, column:offset
123 ¦ on-sandbox-side?:bool <- greater-or-equal click-column, sandbox-left-margin
124 ¦ break-unless on-sandbox-side?
125 ¦ first-sandbox:&:sandbox <- get *env, sandbox:offset
126 ¦ break-unless first-sandbox
127 ¦ first-sandbox-begins:num <- get *first-sandbox, starting-row-on-screen:offset
128 ¦ click-row:num <- get t, row:offset
129 ¦ below-sandbox-editor?:bool <- greater-or-equal click-row, first-sandbox-begins
130 ¦ break-unless below-sandbox-editor?
131 ¦
132 ¦ sandbox:&:sandbox, sandbox-index:num <- find-click-in-sandbox-output env, click-row
133 ¦ break-unless sandbox
134 ¦
135 ¦ sandbox <- toggle-expected-response sandbox
136 ¦
137 ¦ save-sandbox resources, sandbox, sandbox-index
138 ¦
139 ¦ sandbox-right-margin:num <- get *current-sandbox, right:offset
140 ¦ row:num <- render-sandbox-response screen, sandbox, sandbox-left-margin, sandbox-right-margin
141 ¦ {
142 ¦ ¦ height:num <- screen-height screen
143 ¦ ¦ at-bottom?:bool <- greater-or-equal row, height
144 ¦ ¦ break-if at-bottom?
145 ¦ ¦ draw-horizontal screen, row, sandbox-left-margin, sandbox-right-margin
146 ¦ }
147 ¦ screen <- update-cursor screen, recipes, current-sandbox, sandbox-in-focus?, env
148 ¦ loop +next-event
149 }
150 ]
151
152 def find-click-in-sandbox-output env:&:environment, click-row:num -> sandbox:&:sandbox, sandbox-index:num [
153 local-scope
154 load-ingredients
155
156 sandbox:&:sandbox <- get *env, sandbox:offset
157 start:num <- get *sandbox, starting-row-on-screen:offset
158 clicked-on-sandboxes?:bool <- greater-or-equal click-row, start
159 assert clicked-on-sandboxes?, [extract-sandbox called on click to sandbox editor]
160
161 sandbox-index <- copy 0
162 {
163 ¦ next-sandbox:&:sandbox <- get *sandbox, next-sandbox:offset
164 ¦ break-unless next-sandbox
165 ¦ next-start:num <- get *next-sandbox, starting-row-on-screen:offset
166 ¦ found?:bool <- lesser-than click-row, next-start
167 ¦ break-if found?
168 ¦ sandbox <- copy next-sandbox
169 ¦ sandbox-index <- add sandbox-index, 1
170 ¦ loop
171 }
172
173 response-starting-row:num <- get *sandbox, response-starting-row-on-screen:offset
174 return-unless response-starting-row, 0/no-click-in-sandbox-output, 0/sandbox-index
175 click-in-response?:bool <- greater-or-equal click-row, response-starting-row
176 return-unless click-in-response?, 0/no-click-in-sandbox-output, 0/sandbox-index
177 return sandbox, sandbox-index
178 ]
179
180 def toggle-expected-response sandbox:&:sandbox -> sandbox:&:sandbox [
181 local-scope
182 load-ingredients
183 expected-response:text <- get *sandbox, expected-response:offset
184 {
185 ¦
186 ¦ break-unless expected-response
187 ¦ *sandbox <- put *sandbox, expected-response:offset, 0
188 }
189 {
190 ¦
191 ¦ break-if expected-response
192 ¦ response:text <- get *sandbox, response:offset
193 ¦ *sandbox <- put *sandbox, expected-response:offset, response
194 }
195 ]
196
197
198 after <render-sandbox-response> [
199 {
200 ¦ break-unless sandbox-response
201 ¦ *sandbox <- put *sandbox, response-starting-row-on-screen:offset, row
202 ¦ row <- render-sandbox-response screen, sandbox, left, right
203 ¦ jump +render-sandbox-end
204 }
205 ]
206
207 def render-sandbox-response screen:&:screen, sandbox:&:sandbox, left:num, right:num -> row:num, screen:&:screen [
208 local-scope
209 load-ingredients
210 sandbox-response:text <- get *sandbox, response:offset
211 expected-response:text <- get *sandbox, expected-response:offset
212 row:num <- get *sandbox response-starting-row-on-screen:offset
213 {
214 ¦ break-if expected-response
215 ¦ row <- render-text screen, sandbox-response, left, right, 245/grey, row
216 ¦ return
217 }
218 response-is-expected?:bool <- equal expected-response, sandbox-response
219 {
220 ¦ break-if response-is-expected?
221 ¦ row <- render-text screen, sandbox-response, left, right, 1/red, row
222 }
223 {
224 ¦ break-unless response-is-expected?:bool
225 ¦ row <- render-text screen, sandbox-response, left, right, 2/green, row
226 }
227 ]
228
229 before <end-render-sandbox-reset-hidden> [
230 *sandbox <- put *sandbox, response-starting-row-on-screen:offset, 0
231 ]