Add Licensing and Contributing
[clnl] / src / test / clnl-gltk / tests.lisp
1 ; Copyright 2022 Frank Duncan (frank@consxy.com) under AGPL3.  See distributed LICENSE.txt.
2 (in-package #:clnl-gltk-test)
3
4 (deftest "Simple Font"
5  "8A20F6ABDEB91C20EDA85C78AED49767AB3A70EB"
6  (gl:color 1f0 1f0 1f0)
7  (gl:translate 10 10 0)
8  (clnl-gltk:font-print "Hello World"))
9
10 (let
11  ((tb (clnl-gltk:textbox 5 5 5 1 :text "Hello")))
12  (deftest "Text Box 1"
13   "2CECA2C51025389617AA9A710B3625106009DF2E"
14   (clnl-gltk:render tb)))
15
16 (let
17  ((tb (clnl-gltk:textbox 5 5 7 2 :text "Hello")))
18  (deftest "Text Box 2"
19   "9BF11B56936F547523203EA2A81CC2DB2CB3CC19"
20   (clnl-gltk:render tb)))
21
22 (let
23  ((tb (clnl-gltk:textbox 5 5 5 2 :text (format nil "Hello~%World"))))
24  (deftest "Text Box Multiline"
25   "D805DA6096FB970B1C5B4268B76F1917DCA4AE1C"
26   (clnl-gltk:render tb)))
27
28 (let
29  ((tb (clnl-gltk:textbox 5 5 5 2 :text (format nil "Helloare~%Worlding~%fdsa"))))
30  (deftest "Text Box Multiline Clip"
31   "D805DA6096FB970B1C5B4268B76F1917DCA4AE1C"
32   (clnl-gltk:render tb)))
33
34 (let
35  ((tb (clnl-gltk:textbox 5 50 5 2 :text (format nil "Helloare~%Worlding~%fdsa") :border nil)))
36  (deftest "Text Box Borderless"
37   "8D3B592B51A60A2BBC18564E6CBAF231B0AE19DD"
38   (clnl-gltk:render tb)))
39
40 (let
41  ((tb (clnl-gltk:textbox 5 5 6 5 :text (format nil "Hi my name is~%frank") :border nil :word-wrap t)))
42  (deftest "Text Box Wrap 1"
43   "AB467A1E7195B299F2218995A05DD2E13C27DEE9"
44   (clnl-gltk:render tb)))
45
46 (let
47  ((tb (clnl-gltk:textbox 5 5 3 5 :text (format nil "Hi my name is~%frank") :border nil :word-wrap t)))
48  (deftest "Text Box Wrap 2"
49   "021D8496E23E955D4315C08540CEBAACFF626E26"
50   (clnl-gltk:render tb)))
51
52 (let
53  ((tb (clnl-gltk:textbox 5 5 2 5 :text (format nil "Hi m name is~%frank") :border nil :word-wrap t)))
54  (deftest "Text Box Wrap 3"
55   "5351DCF1D442B6313BD357B1DFB2C80ED3E0E6FB"
56   (clnl-gltk:render tb)))
57
58 (let
59  ((ib (clnl-gltk:inputbox 5 5 5)))
60  (deftest "Input Box 1"
61   "17D991E70A129C1A57F503690D364BB0975A595B"
62   (setf *inputbox* ib)
63   (clnl-gltk:render ib)))
64
65 (let
66  ((ib (clnl-gltk:inputbox 5 5 5)))
67  (clnl-gltk:key-pressed ib 65)
68  (clnl-gltk:key-pressed ib 66)
69  (clnl-gltk:key-pressed ib 67)
70  (clnl-gltk:key-pressed ib :key-left)
71  (clnl-gltk:key-pressed ib :key-left)
72  (clnl-gltk:key-pressed ib 8)
73  (clnl-gltk:key-pressed ib :key-right)
74  (deftest "Input Box 2"
75   "D03BD310CB1CF22AE7A0F143BE523F9FC6F20D73"
76   (setf *inputbox* ib)
77   (clnl-gltk:render ib)))
78
79 (let
80  ((ib (clnl-gltk:inputbox 5 5 5)))
81  (clnl-gltk:key-pressed ib 65)
82  (clnl-gltk:key-pressed ib 66)
83  (clnl-gltk:key-pressed ib 67)
84  (clnl-gltk:key-pressed ib 68)
85  (clnl-gltk:key-pressed ib :key-left)
86  (clnl-gltk:key-pressed ib 21)
87  (deftest "Input Box 3"
88   "19EA65A5299EBF16021AE01F4BB9C39945829665"
89   (setf *inputbox* ib)
90   (clnl-gltk:render ib)))
91
92 (let
93  ((ib (clnl-gltk:inputbox 5 5 5))
94   (tb (clnl-gltk:textbox 5 28 5 1)))
95  (clnl-gltk:key-pressed ib 65)
96  (clnl-gltk:key-pressed ib 66)
97  (clnl-gltk:key-pressed ib 67)
98  (clnl-gltk:key-pressed ib 68)
99  (clnl-gltk:key-pressed ib 8)
100  (setf (clnl-gltk:textbox-text tb) (clnl-gltk:value ib))
101  (clnl-gltk:clear ib)
102  (deftest "Input Box / Text Box"
103   "3456140503547591726C56C3E5A2956CBAB066F9"
104   (setf *inputbox* ib)
105   (clnl-gltk:render tb)
106   (clnl-gltk:render ib)))
107
108 (let
109  ((ib (clnl-gltk:inputbox 5 5 1))
110   (tb (clnl-gltk:textbox 5 28 1 1)))
111  (clnl-gltk:resize ib (truncate (- 100 12) clnl-gltk:*font-width*) 1)
112  (clnl-gltk:resize tb (truncate (- 100 12) clnl-gltk:*font-width*) (truncate (- 100 40) clnl-gltk:*font-height*))
113  (deftest "Resize Input Box / Text Box"
114   "A005D7F79A462A12CC4C8FA2D4E08D9705EE653D"
115   (setf *inputbox* ib)
116   (clnl-gltk:render tb)
117   (clnl-gltk:render ib)))
118
119 (defvar *button-base-sum* "57FE772A7F3F06632F7CAB6EDCED93D1D98EFE17")
120 (defvar *button-hover-sum* "0471DF593568AC35F0F91FCB0CF8B7C95CE76FAA")
121
122 (let
123  ((but (clnl-gltk:button 5 5 40 30 "test" (lambda () (format t "This button was pressed~%")))))
124  (deftest "Button 1"
125   *button-base-sum*
126   (clnl-gltk:render but)))
127
128 (let
129  ((but (clnl-gltk:button 5 5 40 30 "te" (lambda () (format t "This button was pressed~%")))))
130  (deftest "Button 2"
131   "12595E272032268A6BD31DAE25405DFBBC18537E"
132   (clnl-gltk:render but)))
133
134 (let
135  ((checksum "8C3017E28B5F4DA4832193DB1ECB9F1C2D8B9B81"))
136  (let
137   ((but (clnl-gltk:button 5 5 40 30 "te..." (lambda () (format t "This button was pressed~%")))))
138   (deftest "Button 3a"
139    checksum
140    (clnl-gltk:render but)))
141
142  (let
143   ((but (clnl-gltk:button 5 5 40 30 "testing" (lambda () (format t "This button was pressed~%")))))
144   (deftest "Button 3b"
145    checksum
146    (clnl-gltk:render but))))
147
148 (let
149  ((but (clnl-gltk:button 5 5 40 30 "test" nil)))
150  (clnl-gltk:mousemove but 10 10)
151  (deftest "Button Hover 1"
152   *button-hover-sum*
153   (clnl-gltk:render but)))
154
155 (let
156  ((but (clnl-gltk:button 5 5 40 30 "test" nil)))
157  (clnl-gltk:mousemove but 10 10)
158  (clnl-gltk:mousemove but 50 50)
159  (deftest "Button Hover 2"
160   *button-base-sum*
161   (clnl-gltk:render but)))
162
163 (let
164  ((but (clnl-gltk:button 5 5 40 30 "test" nil)))
165  (clnl-gltk:mousemove but 10 10)
166  (clnl-gltk:mousedown but 10 10)
167  (deftest "Button Down"
168   "CF9AB21372A9D72ECDE1351B6C834DE8E020DC67"
169   (clnl-gltk:render but)))
170
171 (let
172  ((but (clnl-gltk:button 5 5 40 30 "test" nil)))
173  (clnl-gltk:mousemove but 10 10)
174  (clnl-gltk:mousedown but 10 10)
175  (clnl-gltk:mousemove but 50 50)
176  (deftest "Button Down Moved"
177   "C2A2F8B8B1C70BE32A35D050DC9AB03F310EB44D"
178   (clnl-gltk:render but)))
179
180 (let*
181  ((clicked nil)
182   (but (clnl-gltk:button 5 5 40 30 "test" (lambda () (setf clicked t)))))
183  (clnl-gltk:mousemove but 10 10)
184  (clnl-gltk:mousedown but 10 10)
185  (clnl-gltk:mouseup but 10 10)
186  (deftest "Button Clicked"
187   *button-hover-sum*
188   (clnl-gltk:render but)
189   (when (not clicked) (fail-test))))
190
191 (let*
192  ((clicked nil)
193   (but (clnl-gltk:button 5 5 40 30 "test" (lambda () (setf clicked t)))))
194  (clnl-gltk:mousemove but 10 10)
195  (clnl-gltk:mousedown but 10 10)
196  (clnl-gltk:mousemove but 50 50)
197  (clnl-gltk:mouseup but 50 50)
198  (deftest "Button Clicked Abort"
199   *button-base-sum*
200   (clnl-gltk:render but)
201   (when clicked (fail-test))))
202
203 (let
204  ((but (clnl-gltk:button 20 20 50 40 "test" nil)))
205  (clnl-gltk:resize but 40 30)
206  (clnl-gltk:reposition but 5 5)
207  (deftest "Button Reize/Reposition"
208   *button-base-sum*
209   (clnl-gltk:render but)))
210
211 (let*
212  ((but nil))
213  (setf but (clnl-gltk:button 20 20 60 40 "test" (lambda () (clnl-gltk:toggle but)) :forever t))
214  (deftest "Button Forever 1"
215   "C7F4CC201EF3DDB4474D537CA6F1D7462F5822D1"
216   (clnl-gltk:render but)))
217
218 (let*
219  ((but nil))
220  (setf but (clnl-gltk:button 20 20 60 40 "test" (lambda () (clnl-gltk:toggle but)) :forever t))
221  (clnl-gltk:mousemove but 30 30)
222  (clnl-gltk:mousedown but 30 30)
223  (clnl-gltk:mouseup but 30 30)
224  (deftest "Button Forever - Toggle mouse on"
225   "AAD25A1A35FFC0306C0257450530B19421BB1B97"
226   (clnl-gltk:render but)))
227
228 (let*
229  ((but nil))
230  (setf but (clnl-gltk:button 20 20 60 40 "test" (lambda () (clnl-gltk:toggle but)) :forever t))
231  (clnl-gltk:mousemove but 30 30)
232  (clnl-gltk:mousedown but 30 30)
233  (clnl-gltk:mouseup but 30 30)
234  (clnl-gltk:mousemove but 10 10)
235  (deftest "Button Forever - Toggle mouse off"
236   "CE0153ACE89F075279C24FB28A9538730B307048"
237   (clnl-gltk:render but)))
238
239 (let*
240  ((but nil))
241  (setf but (clnl-gltk:button 20 20 60 40 "test" (lambda () (clnl-gltk:toggle but)) :forever t))
242  (clnl-gltk:mousemove but 30 30)
243  (clnl-gltk:mousedown but 30 30)
244  (clnl-gltk:mouseup but 30 30)
245  (clnl-gltk:mousedown but 30 30)
246  (clnl-gltk:mouseup but 30 30)
247  (clnl-gltk:mousemove but 10 10)
248  (deftest "Button Forever - Toggle twice"
249   "C7F4CC201EF3DDB4474D537CA6F1D7462F5822D1"
250   (clnl-gltk:render but)))
251
252 (let*
253  ((but nil))
254  (setf but (clnl-gltk:button 20 20 60 40 "test" (lambda () (clnl-gltk:toggle but t)) :forever t))
255  (clnl-gltk:mousemove but 30 30)
256  (clnl-gltk:mousedown but 30 30)
257  (clnl-gltk:mouseup but 30 30)
258  (clnl-gltk:mousedown but 30 30)
259  (clnl-gltk:mouseup but 30 30)
260  (clnl-gltk:mousemove but 10 10)
261  (deftest "Button Forever - Toggle state T"
262   "CE0153ACE89F075279C24FB28A9538730B307048"
263   (clnl-gltk:render but)))
264
265 (defvar *switch-on* "CA21940F7F585E98B70F54165FA9617E8720B084")
266 (defvar *switch-off* "25F8B2D544795DC953FF3F880F4762FEEFCCEF04")
267 (defvar *switch-hover* "9643E58C1E160530B3B4467DE121C83F445EE444")
268
269 (let
270  ((switch (clnl-gltk:switch 5 5 80 "test" (lambda (state) (format t "The new state is: ~A~%" state)) t)))
271  (deftest "Switch 1"
272   *switch-on*
273   (setf *mouse-reactor* switch)
274   (clnl-gltk:render switch)))
275
276 (let
277  ((switch (clnl-gltk:switch 5 5 80 "test" (lambda (state) (format t "The new state is: ~A~%" state)))))
278  (deftest "Switch 2"
279   *switch-off*
280   (clnl-gltk:render switch)))
281
282 (let
283  ((switch (clnl-gltk:switch 5 5 80 "testing switch" (lambda (state) (format t "The new state is: ~A~%" state)))))
284  (deftest "Switch 3"
285   "C7362964BB4CB6C1C89AABFAD956C65A42823296"
286   (clnl-gltk:render switch)))
287
288 (let
289  ((switch (clnl-gltk:switch 5 5 80 "test" (lambda (state) (format t "The new state is: ~A~%" state)))))
290  (clnl-gltk:mousemove switch 30 30)
291  (deftest "Switch Hover"
292   *switch-hover*
293   (clnl-gltk:render switch)))
294
295 (let
296  ((switch (clnl-gltk:switch 5 5 80 "test" (lambda (state) (format t "The new state is: ~A~%" state)))))
297  (clnl-gltk:mousemove switch 30 30)
298  (clnl-gltk:mousemove switch 50 50)
299  (deftest "Switch Hover 2"
300   *switch-off*
301   (clnl-gltk:render switch)))
302
303 (let*
304  ((on nil)
305   (switch (clnl-gltk:switch 5 5 80 "test" (lambda (state) (setf on state)))))
306  (clnl-gltk:mousedown switch 30 30)
307  (deftest "Switch Click"
308   *switch-on*
309   (clnl-gltk:render switch)
310   (when (not on) (fail-test))))
311
312 (let
313  ((slider (clnl-gltk:slider 5 5 80 "test" (lambda (val) (format t "The new val is: ~A~%" val)) 0 100 5 100)))
314  (deftest "Slider 1"
315   "87CCD09486DBA9A0115034E454B28658121EE6DE"
316   (setf *mouse-reactor* slider)
317   (clnl-gltk:render slider)))