Skip to content

Commit c5aba49

Browse files
committed
[tests] Add new test attributeKeyValues
- check keyable attribute initialization. - check keyable attribute CRUD. - check keyable attribute linked. - check keyable attribute UID.
1 parent 50cdf12 commit c5aba49

File tree

1 file changed

+267
-0
lines changed

1 file changed

+267
-0
lines changed

tests/test_attributeKeyValues.py

Lines changed: 267 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,267 @@
1+
from meshroom.core import desc
2+
from meshroom.core.graph import Graph
3+
4+
from .utils import registerNodeDesc, unregisterNodeDesc
5+
6+
7+
class NodeWithKeyableAttributes(desc.Node):
8+
inputs = [
9+
desc.BoolParam(
10+
name="keyableBool",
11+
label="Keyable Bool",
12+
description="A keyable bool parameter.",
13+
value=True,
14+
keyable=True,
15+
keyType="viewId"
16+
),
17+
desc.IntParam(
18+
name="keyableInt",
19+
label="Keyable Integer",
20+
description="A keyable integer parameter.",
21+
value=5,
22+
range=(0, 100, 2),
23+
keyable=True,
24+
keyType="viewId"
25+
),
26+
desc.FloatParam(
27+
name="keyableFloat",
28+
label="Keyable Float",
29+
description="A keyable float parameter.",
30+
value=5.5,
31+
range=(0.0, 100.0, 2.2),
32+
keyable=True,
33+
keyType="viewId"
34+
),
35+
]
36+
37+
class TestKeyableAttribute:
38+
39+
@classmethod
40+
def setup_class(cls):
41+
registerNodeDesc(NodeWithKeyableAttributes)
42+
43+
@classmethod
44+
def teardown_class(cls):
45+
unregisterNodeDesc(NodeWithKeyableAttributes)
46+
47+
def test_initialization(self):
48+
graph = Graph("")
49+
50+
nodeA = graph.addNewNode(NodeWithKeyableAttributes.__name__)
51+
52+
# Check attribute is keyable
53+
assert nodeA.keyableBool.keyable
54+
assert nodeA.keyableInt.keyable
55+
assert nodeA.keyableFloat.keyable
56+
57+
# Check attribute key type
58+
assert nodeA.keyableBool.keyValues.keyType == "viewId"
59+
assert nodeA.keyableInt.keyValues.keyType == "viewId"
60+
assert nodeA.keyableFloat.keyValues.keyType == "viewId"
61+
62+
# Check attribute pairs empty
63+
assert nodeA.keyableBool.isDefault
64+
assert nodeA.keyableInt.isDefault
65+
assert nodeA.keyableFloat.isDefault
66+
67+
# Check attribute default value
68+
assert nodeA.keyableBool.getDefaultValue() == True
69+
assert nodeA.keyableInt.getDefaultValue() == 5
70+
assert nodeA.keyableFloat.getDefaultValue() == 5.5
71+
72+
# Check attribute serialized value
73+
assert nodeA.keyableBool.getSerializedValue() == {}
74+
assert nodeA.keyableInt.getSerializedValue() == {}
75+
assert nodeA.keyableFloat.getSerializedValue() == {}
76+
77+
# Check attribute string value
78+
assert nodeA.keyableBool.getValueStr() == "{}"
79+
assert nodeA.keyableInt.getValueStr() == "{}"
80+
assert nodeA.keyableFloat.getValueStr() == "{}"
81+
82+
83+
def test_createReadUpdateDelete(self):
84+
graph = Graph("")
85+
86+
nodeA = graph.addNewNode(NodeWithKeyableAttributes.__name__)
87+
88+
# Check attribute value at key "0", should be default value
89+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("0") == True
90+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("0") == 5
91+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("0") == 5.5
92+
93+
# Check attribute has key "0", should be False (no key)
94+
assert nodeA.keyableBool.keyValues.hasKey("0") == False
95+
assert nodeA.keyableInt.keyValues.hasKey("0") == False
96+
assert nodeA.keyableFloat.keyValues.hasKey("0") == False
97+
98+
# Add attribute (key, value) at key "0"
99+
nodeA.keyableBool.keyValues.add("0", False)
100+
nodeA.keyableInt.keyValues.add("0", 10)
101+
nodeA.keyableFloat.keyValues.add("0", 10.1)
102+
103+
# Check attribute value at key "0", should be the new value
104+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("0") == False
105+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("0") == 10
106+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("0") == 10.1
107+
108+
# Check attribute has key "0", should be True (key exists)
109+
assert nodeA.keyableBool.keyValues.hasKey("0") == True
110+
assert nodeA.keyableInt.keyValues.hasKey("0") == True
111+
assert nodeA.keyableFloat.keyValues.hasKey("0") == True
112+
113+
# Update attribute (key, value) at key "0"
114+
nodeA.keyableBool.keyValues.add("0", True)
115+
nodeA.keyableInt.keyValues.add("0", 20)
116+
nodeA.keyableFloat.keyValues.add("0", 20.2)
117+
118+
# Check attribute value at key "0", should be the new updated value
119+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("0") == True
120+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("0") == 20
121+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("0") == 20.2
122+
123+
# Check attribute has key "0", should be True (key exists)
124+
assert nodeA.keyableBool.keyValues.hasKey("0") == True
125+
assert nodeA.keyableInt.keyValues.hasKey("0") == True
126+
assert nodeA.keyableFloat.keyValues.hasKey("0") == True
127+
128+
# Remove (key, value) at key "0"
129+
nodeA.keyableBool.keyValues.remove("0")
130+
nodeA.keyableInt.keyValues.remove("0")
131+
nodeA.keyableFloat.keyValues.remove("0")
132+
133+
# Check attributes values at key "0", should be default value
134+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("0") == True
135+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("0") == 5
136+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("0") == 5.5
137+
138+
# Check attribute has key "0", should be False (no key)
139+
assert nodeA.keyableBool.keyValues.hasKey("0") == False
140+
assert nodeA.keyableInt.keyValues.hasKey("0") == False
141+
assert nodeA.keyableFloat.keyValues.hasKey("0") == False
142+
143+
144+
def test_multipleKeys(self):
145+
graph = Graph("")
146+
147+
nodeA = graph.addNewNode(NodeWithKeyableAttributes.__name__)
148+
149+
# Add attribute (key, value) at key "0"
150+
nodeA.keyableBool.keyValues.add("0", False)
151+
nodeA.keyableInt.keyValues.add("0", 1)
152+
nodeA.keyableFloat.keyValues.add("0", 1.1)
153+
154+
# Add attribute (key, value) at key "1"
155+
nodeA.keyableBool.keyValues.add("1", False)
156+
nodeA.keyableInt.keyValues.add("1", 2)
157+
nodeA.keyableFloat.keyValues.add("1", 2.2)
158+
159+
# Add attribute (key, value) at key "2"
160+
nodeA.keyableBool.keyValues.add("2", True)
161+
nodeA.keyableInt.keyValues.add("2", 3)
162+
nodeA.keyableFloat.keyValues.add("2", 3.3)
163+
164+
# Check attribute has key "0", should be True (key exists)
165+
assert nodeA.keyableBool.keyValues.hasKey("0") == True
166+
assert nodeA.keyableInt.keyValues.hasKey("0") == True
167+
assert nodeA.keyableFloat.keyValues.hasKey("0") == True
168+
169+
# Check attribute has key "1", should be True (key exists)
170+
assert nodeA.keyableBool.keyValues.hasKey("1") == True
171+
assert nodeA.keyableInt.keyValues.hasKey("1") == True
172+
assert nodeA.keyableFloat.keyValues.hasKey("1") == True
173+
174+
# Check attribute has key "2", should be True (key exists)
175+
assert nodeA.keyableBool.keyValues.hasKey("2") == True
176+
assert nodeA.keyableInt.keyValues.hasKey("2") == True
177+
assert nodeA.keyableFloat.keyValues.hasKey("2") == True
178+
179+
# Check attributes values at key "0", should be default value
180+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("0") == False
181+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("0") == 1
182+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("0") == 1.1
183+
184+
# Check attributes values at key "1", should be default value
185+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("1") == False
186+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("1") == 2
187+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("1") == 2.2
188+
189+
# Check attributes values at key "2", should be default value
190+
assert nodeA.keyableBool.keyValues.getValueAtKeyOrDefault("2") == True
191+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("2") == 3
192+
assert nodeA.keyableFloat.keyValues.getValueAtKeyOrDefault("2") == 3.3
193+
194+
# Remove (key, value) at key "1"
195+
nodeA.keyableBool.keyValues.remove("1")
196+
nodeA.keyableInt.keyValues.remove("1")
197+
nodeA.keyableFloat.keyValues.remove("1")
198+
199+
# Check attribute has key "1", should be False (no key)
200+
assert nodeA.keyableBool.keyValues.hasKey("1") == False
201+
assert nodeA.keyableInt.keyValues.hasKey("1") == False
202+
assert nodeA.keyableFloat.keyValues.hasKey("1") == False
203+
204+
205+
def test_linkAttribute(self):
206+
graph = Graph("")
207+
208+
nodeA = graph.addNewNode(NodeWithKeyableAttributes.__name__)
209+
nodeB = graph.addNewNode(NodeWithKeyableAttributes.__name__)
210+
211+
# Add some keys for nodeA.keyableInt
212+
nodeA.keyableInt.keyValues.add("0", 0)
213+
nodeA.keyableInt.keyValues.add("1", 1)
214+
nodeA.keyableInt.keyValues.add("2", 2)
215+
216+
# Add link:
217+
# nodeB.keyableInt is a link for nodeA.keyableInt
218+
graph.addEdge(nodeA.keyableInt, nodeB.keyableInt)
219+
220+
# Check link
221+
assert nodeB.keyableInt.isLink == True
222+
assert nodeB.keyableInt.keyValues == nodeA.keyableInt.keyValues
223+
224+
# Check existing (key, value) in nodeA.keyableInt and nodeB.keyableInt
225+
assert nodeA.keyableInt.keyValues.hasKey("1") == True
226+
assert nodeB.keyableInt.keyValues.hasKey("1") == True
227+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("1") == 1
228+
assert nodeB.keyableInt.keyValues.getValueAtKeyOrDefault("1") == 1
229+
230+
# Add a key to nodeB.keyableInt
231+
nodeB.keyableInt.keyValues.add("3", 3)
232+
233+
# Check new (key, value) in nodeA.keyableInt and nodeB.keyableInt
234+
assert nodeA.keyableInt.keyValues.hasKey("3") == True
235+
assert nodeB.keyableInt.keyValues.hasKey("3") == True
236+
assert nodeA.keyableInt.keyValues.getValueAtKeyOrDefault("3") == 3
237+
assert nodeB.keyableInt.keyValues.getValueAtKeyOrDefault("3") == 3
238+
239+
# Check nodeB.keyableInt serialized values
240+
assert nodeB.keyableInt.getSerializedValue() == nodeA.keyableInt.asLinkExpr()
241+
242+
243+
def test_uid(self):
244+
graph = Graph("")
245+
246+
nodeA = graph.addNewNode(NodeWithKeyableAttributes.__name__)
247+
nodeB = graph.addNewNode(NodeWithKeyableAttributes.__name__)
248+
249+
# Add some keys for nodeA.keyableInt
250+
nodeA.keyableInt.keyValues.add("0", 0)
251+
nodeA.keyableInt.keyValues.add("1", 1)
252+
nodeA.keyableInt.keyValues.add("2", 2)
253+
254+
# Add the same keys for nodeB.keyableInt
255+
# But not in the same order
256+
nodeB.keyableInt.keyValues.add("2", 2)
257+
nodeB.keyableInt.keyValues.add("0", 0)
258+
nodeB.keyableInt.keyValues.add("1", 1)
259+
260+
# Check UID, should be the same
261+
assert nodeA.keyableInt.uid() == nodeB.keyableInt.uid()
262+
263+
# Remove (key, value) at key "1" from nodeA.keyableInt
264+
nodeA.keyableInt.keyValues.remove("1")
265+
266+
# Check UID, should not be the same
267+
assert nodeA.keyableInt.uid() != nodeB.keyableInt.uid()

0 commit comments

Comments
 (0)