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?, 0/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, 0/false
104 clicked-on-delete-button? <- copy 1/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
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "localhost"+testport+"/", nil)
indexHandler(w, req)
resp := w.Result()
if resp.StatusCode != http.StatusOK {
t.Errorf(fmt.Sprintf("%v", resp.StatusCode))
}
})
}
func Test_apiBaseHandler(t *testing.T) {
initTestConf()
t.Run("apiBaseHandler", func(t *testing.T) {
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "localhost"+testport+"/api", nil)
apiBaseHandler(w, req)
resp := w.Result()
if resp.StatusCode != http.StatusOK {
t.Errorf(fmt.Sprintf("%v", resp.StatusCode))
}
})
}
func Test_apiFormatHandler(t *testing.T) {
initTestConf()
t.Run("apiFormatHandler", func(t *testing.T) {
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "localhost"+testport+"/api/plain", nil)
apiFormatHandler(w, req)
resp := w.Result()
if resp.StatusCode != http.StatusOK {
t.Errorf(fmt.Sprintf("%v", resp.StatusCode))
}
})
}
func Test_apiEndpointHandler(t *testing.T) {
initTestConf()
t.Run("apiEndpointHandler", func(t *testing.T) {
w := httptest.NewRecorder()
req := httptest.NewRequest("GET", "localhost"+testport+"/api/plain/users", nil)
apiEndpointHandler(w, req)
resp := w.Result()
if resp.StatusCode != http.StatusOK {
t.Errorf(fmt.Sprintf("%v", resp.StatusCode))
}
})
}
func Test_apiTagsBaseHandler(t *testing.T