()
| 315 | |
| 316 | |
| 317 | def test_function_changed(): |
| 318 | ch = [] |
| 319 | |
| 320 | class C(object): |
| 321 | def _dep_changed(self, dep, **kwargs): |
| 322 | ch.append(dep) |
| 323 | ch_obj = C() |
| 324 | |
| 325 | def assert_changed(*objs): |
| 326 | assert set(ch) == set(objs) |
| 327 | while ch: |
| 328 | ch.pop() |
| 329 | |
| 330 | fun1 = Function('void main(){$var1; $var2;}') |
| 331 | fun1._dependents[ch_obj] = None |
| 332 | fun1['var1'] = 'x' |
| 333 | fun1['var2'] = 'y' |
| 334 | assert_changed(fun1) |
| 335 | |
| 336 | fun1['var1'] = 'z' |
| 337 | assert_changed(fun1) |
| 338 | |
| 339 | # same value; should result in no change events |
| 340 | fun1['var1'] = 'z' |
| 341 | assert_changed() |
| 342 | |
| 343 | fun1['var1'] = 0.5 |
| 344 | var1 = fun1['var1'] |
| 345 | var1._dependents[ch_obj] = None |
| 346 | assert_changed(fun1) |
| 347 | |
| 348 | var1.name = 'xxx' |
| 349 | assert_changed(fun1, var1) |
| 350 | |
| 351 | # changing type requires code change |
| 352 | var1.value = 7 |
| 353 | assert_changed(fun1, var1) |
| 354 | |
| 355 | # changing value (but not type) requires no code changes |
| 356 | var1.value = 6 |
| 357 | assert_changed() |
| 358 | |
| 359 | # test variable disconnect |
| 360 | fun1['var1'] = Variable('var1', 7) |
| 361 | var2 = fun1['var1'] |
| 362 | var2._dependents[ch_obj] = None |
| 363 | # assert_changed(fun1) |
| 364 | # var2 is now connected |
| 365 | var2.value = (1, 2, 3, 4) |
| 366 | assert_changed(fun1, var2) |
| 367 | # ..but var1 no longer triggers fun1.changed |
| 368 | assert_changed() |
| 369 | var1.value = 0.5 |
| 370 | assert_changed(var1) |
| 371 | |
| 372 | # test expressions |
| 373 | fun2 = Function('float fn(float x){return $var1 + x;}') |
| 374 | fun3 = Function('float fn(float x){return $var1 + x;}') |
nothing calls this directly
no test coverage detected
searching dependent graphs…