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