Skip to content

Commit 2b38412

Browse files
Add style tests (#128)
1 parent c1435bf commit 2b38412

File tree

1 file changed

+222
-0
lines changed

1 file changed

+222
-0
lines changed
Lines changed: 222 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,222 @@
1+
# SPDX-FileCopyrightText: 2024-present Unital Software <info@unital.dev>
2+
#
3+
# SPDX-License-Identifier: MIT
4+
5+
import asyncio
6+
import unittest
7+
8+
from tempe.colors import black, grey, white
9+
from tempe_components.style import StateColor, StateColorField, Style, ENABLED, DISABLED, ACTIVE
10+
11+
12+
class TestStateColor(unittest.TestCase):
13+
14+
def test_basic(self):
15+
16+
color = StateColor(enabled=black)
17+
18+
self.assertEqual(color.enabled, black)
19+
self.assertEqual(color.disabled, black)
20+
self.assertEqual(color.active, black)
21+
22+
self.assertEqual(color[ENABLED], black)
23+
self.assertEqual(color[DISABLED], black)
24+
self.assertEqual(color[ACTIVE], black)
25+
26+
color.enabled = white
27+
28+
self.assertEqual(color.enabled, white)
29+
self.assertEqual(color.disabled, white)
30+
self.assertEqual(color.active, white)
31+
32+
self.assertEqual(color[ENABLED], white)
33+
self.assertEqual(color[DISABLED], white)
34+
self.assertEqual(color[ACTIVE], white)
35+
36+
color[ENABLED] = grey
37+
38+
self.assertEqual(color.enabled, grey)
39+
self.assertEqual(color.disabled, grey)
40+
self.assertEqual(color.active, grey)
41+
42+
self.assertEqual(color[ENABLED], grey)
43+
self.assertEqual(color[DISABLED], grey)
44+
self.assertEqual(color[ACTIVE], grey)
45+
46+
def test_basic_adapted(self):
47+
48+
color = StateColor(enabled="black")
49+
50+
self.assertEqual(color.enabled, black)
51+
self.assertEqual(color.disabled, black)
52+
self.assertEqual(color.active, black)
53+
54+
self.assertEqual(color[ENABLED], black)
55+
self.assertEqual(color[DISABLED], black)
56+
self.assertEqual(color[ACTIVE], black)
57+
58+
color.enabled = "white"
59+
60+
self.assertEqual(color.enabled, white)
61+
self.assertEqual(color.disabled, white)
62+
self.assertEqual(color.active, white)
63+
64+
self.assertEqual(color[ENABLED], white)
65+
self.assertEqual(color[DISABLED], white)
66+
self.assertEqual(color[ACTIVE], white)
67+
68+
color[ENABLED] = "grey"
69+
70+
self.assertEqual(color.enabled, grey)
71+
self.assertEqual(color.disabled, grey)
72+
self.assertEqual(color.active, grey)
73+
74+
self.assertEqual(color[ENABLED], grey)
75+
self.assertEqual(color[DISABLED], grey)
76+
self.assertEqual(color[ACTIVE], grey)
77+
78+
def test_full(self):
79+
80+
color = StateColor(enabled=black, disabled="white")
81+
82+
self.assertEqual(color.enabled, black)
83+
self.assertEqual(color.disabled, white)
84+
self.assertEqual(color.active, black)
85+
86+
self.assertEqual(color[ENABLED], black)
87+
self.assertEqual(color[DISABLED], white)
88+
self.assertEqual(color[ACTIVE], black)
89+
90+
color.enabled = grey
91+
color.disabled = "black"
92+
color[ACTIVE] = white
93+
94+
self.assertEqual(color.enabled, grey)
95+
self.assertEqual(color.disabled, black)
96+
self.assertEqual(color.active, white)
97+
98+
self.assertEqual(color[ENABLED], grey)
99+
self.assertEqual(color[DISABLED], black)
100+
self.assertEqual(color[ACTIVE], white)
101+
102+
def test_empty(self):
103+
104+
color = StateColor()
105+
106+
with self.assertRaises(AttributeError):
107+
color.enabled
108+
109+
with self.assertRaises(AttributeError):
110+
color.disabled
111+
112+
with self.assertRaises(AttributeError):
113+
color.active
114+
115+
color.enabled = black
116+
117+
self.assertEqual(color.enabled, black)
118+
self.assertEqual(color.disabled, black)
119+
self.assertEqual(color.active, black)
120+
121+
self.assertEqual(color[ENABLED], black)
122+
self.assertEqual(color[DISABLED], black)
123+
self.assertEqual(color[ACTIVE], black)
124+
125+
126+
def test_bad(self):
127+
128+
color = StateColor()
129+
130+
with self.assertRaises(ValueError):
131+
color.enabled = (1,)
132+
133+
134+
class TestStyle(unittest.TestCase):
135+
136+
async def update_waiter(self, data, callback):
137+
await data.updated.wait()
138+
callback(data)
139+
140+
async def update_later(self, data, update, delay=0.01):
141+
await asyncio.sleep(delay)
142+
data.update(update)
143+
144+
async def cancel_task_later(self, task, delay=1.0):
145+
await asyncio.sleep(delay)
146+
task.cancel()
147+
148+
def test_basic(self):
149+
style = Style(
150+
background=StateColor(),
151+
border=StateColor(),
152+
radius=0,
153+
text=StateColor(),
154+
font=None,
155+
)
156+
157+
try:
158+
self.assertEqual(style.radius, 0)
159+
finally:
160+
style.close()
161+
162+
def test_inherited(self):
163+
bg_color = StateColor()
164+
parent = Style(
165+
background=bg_color,
166+
border=StateColor(),
167+
radius=0,
168+
text=StateColor(),
169+
font=None,
170+
)
171+
style = Style(
172+
parent=parent,
173+
radius=2,
174+
)
175+
try:
176+
self.assertEqual(style.radius, 2)
177+
self.assertEqual(style.background, bg_color)
178+
179+
new_color = StateColor()
180+
style.background = new_color
181+
182+
self.assertEqual(style.background, new_color)
183+
self.assertEqual(parent.background, bg_color)
184+
finally:
185+
parent.close()
186+
style.close()
187+
188+
def test_updates(self):
189+
bg_color = StateColor()
190+
parent = Style(
191+
background=bg_color,
192+
border=StateColor(),
193+
radius=0,
194+
text=StateColor(),
195+
font=None,
196+
)
197+
style = Style(
198+
parent=parent,
199+
radius=2,
200+
)
201+
202+
result = []
203+
204+
def test_changed(data):
205+
result.append(data.test)
206+
207+
obs = asyncio.create_task(aobserve(data, test_changed))
208+
209+
async def test():
210+
await asyncio.gather(
211+
asyncio.wait_for(obs, 10),
212+
self.update_later(data, {'test': 1}, 0.01),
213+
self.update_later(data, {'test': 2}, 0.05),
214+
self.cancel_task_later(obs, 0.1)
215+
)
216+
217+
try:
218+
asyncio.run(test())
219+
finally:
220+
data.close()
221+
222+
self.assertEqual(result, [1, 2])

0 commit comments

Comments
 (0)