|
12 | 12 | Docstring,
|
13 | 13 | GriffeLoader,
|
14 | 14 | Module,
|
| 15 | + NameResolutionError, |
15 | 16 | module_vtree,
|
16 | 17 | temporary_inspected_module,
|
17 | 18 | temporary_pypackage,
|
@@ -443,3 +444,52 @@ class Derived(Base):
|
443 | 444 | derived_params = [p.name for p in module["Derived"].parameters]
|
444 | 445 | assert base_params == ["self", "a"]
|
445 | 446 | assert derived_params == ["self", "a", "d"]
|
| 447 | + |
| 448 | + |
| 449 | +def test_name_resolution() -> None: |
| 450 | + """Name are correctly resolved in the scope of an object.""" |
| 451 | + code = """ |
| 452 | + module_attribute = 0 |
| 453 | +
|
| 454 | + class Class: |
| 455 | + import imported |
| 456 | +
|
| 457 | + class_attribute = 0 |
| 458 | +
|
| 459 | + def __init__(self): |
| 460 | + self.instance_attribute = 0 |
| 461 | +
|
| 462 | + def method(self): |
| 463 | + local_variable = 0 |
| 464 | + """ |
| 465 | + with temporary_visited_module(code) as module: |
| 466 | + assert module.resolve("module_attribute") == "module.module_attribute" |
| 467 | + assert module.resolve("Class") == "module.Class" |
| 468 | + |
| 469 | + assert module["module_attribute"].resolve("Class") == "module.Class" |
| 470 | + with pytest.raises(NameResolutionError): |
| 471 | + module["module_attribute"].resolve("class_attribute") |
| 472 | + |
| 473 | + assert module["Class"].resolve("module_attribute") == "module.module_attribute" |
| 474 | + assert module["Class"].resolve("imported") == "imported" |
| 475 | + assert module["Class"].resolve("class_attribute") == "module.Class.class_attribute" |
| 476 | + assert module["Class"].resolve("instance_attribute") == "module.Class.instance_attribute" |
| 477 | + assert module["Class"].resolve("method") == "module.Class.method" |
| 478 | + |
| 479 | + assert module["Class.class_attribute"].resolve("module_attribute") == "module.module_attribute" |
| 480 | + assert module["Class.class_attribute"].resolve("Class") == "module.Class" |
| 481 | + assert module["Class.class_attribute"].resolve("imported") == "imported" |
| 482 | + assert module["Class.class_attribute"].resolve("instance_attribute") == "module.Class.instance_attribute" |
| 483 | + assert module["Class.class_attribute"].resolve("method") == "module.Class.method" |
| 484 | + |
| 485 | + assert module["Class.instance_attribute"].resolve("module_attribute") == "module.module_attribute" |
| 486 | + assert module["Class.instance_attribute"].resolve("Class") == "module.Class" |
| 487 | + assert module["Class.instance_attribute"].resolve("imported") == "imported" |
| 488 | + assert module["Class.instance_attribute"].resolve("class_attribute") == "module.Class.class_attribute" |
| 489 | + assert module["Class.instance_attribute"].resolve("method") == "module.Class.method" |
| 490 | + |
| 491 | + assert module["Class.method"].resolve("module_attribute") == "module.module_attribute" |
| 492 | + assert module["Class.method"].resolve("Class") == "module.Class" |
| 493 | + assert module["Class.method"].resolve("imported") == "imported" |
| 494 | + assert module["Class.method"].resolve("class_attribute") == "module.Class.class_attribute" |
| 495 | + assert module["Class.method"].resolve("instance_attribute") == "module.Class.instance_attribute" |
0 commit comments