|
8 | 8 | from unittest import mock |
9 | 9 | from unittest.mock import MagicMock |
10 | 10 |
|
| 11 | +import pynguin.assertion.assertion as ass |
11 | 12 | import pynguin.assertion.assertiontraceobserver as ato |
| 13 | +import pynguin.utils.typetracing as tt |
12 | 14 | from pynguin.testcase.execution import ExecutionContext, TestCaseExecutor |
13 | 15 | from pynguin.testcase.statement import Statement |
14 | 16 |
|
@@ -47,3 +49,46 @@ def test_after_test_case_execution(): |
47 | 49 | trace_mock.clone.return_value = clone |
48 | 50 | observer.after_test_case_execution(MagicMock(), MagicMock(), result) |
49 | 51 | assert result.assertion_trace == clone |
| 52 | + |
| 53 | + |
| 54 | +def test_check_reference_unwraps_object_proxy(): |
| 55 | + """Regression test: _check_reference must unwrap ObjectProxy to generate assertions.""" |
| 56 | + observer = ato.RemoteAssertionTraceObserver() |
| 57 | + |
| 58 | + wrapped_value = "test_string" |
| 59 | + proxy = tt.ObjectProxy(wrapped_value) |
| 60 | + |
| 61 | + exec_ctx = MagicMock() |
| 62 | + exec_ctx.get_reference_value.return_value = proxy |
| 63 | + module_provider = MagicMock() |
| 64 | + ref = MagicMock() |
| 65 | + |
| 66 | + trace = observer._assertion_local_state.trace |
| 67 | + observer._check_reference(module_provider, exec_ctx, ref, position=0, trace=trace) |
| 68 | + |
| 69 | + assertions = list(trace.trace.get(0, [])) |
| 70 | + assert len(assertions) == 1 |
| 71 | + assert isinstance(assertions[0], ass.ObjectAssertion) |
| 72 | + assert assertions[0].object == wrapped_value |
| 73 | + |
| 74 | + |
| 75 | +def test_check_reference_unwraps_nested_object_proxy(): |
| 76 | + """Regression test: _check_reference handles nested ObjectProxy correctly.""" |
| 77 | + observer = ato.RemoteAssertionTraceObserver() |
| 78 | + |
| 79 | + inner_value = 42 |
| 80 | + inner_proxy = tt.ObjectProxy(inner_value) |
| 81 | + outer_proxy = tt.ObjectProxy(inner_proxy) |
| 82 | + |
| 83 | + exec_ctx = MagicMock() |
| 84 | + exec_ctx.get_reference_value.return_value = outer_proxy |
| 85 | + module_provider = MagicMock() |
| 86 | + ref = MagicMock() |
| 87 | + |
| 88 | + trace = observer._assertion_local_state.trace |
| 89 | + observer._check_reference(module_provider, exec_ctx, ref, position=0, trace=trace) |
| 90 | + |
| 91 | + assertions = list(trace.trace.get(0, [])) |
| 92 | + assert len(assertions) == 1 |
| 93 | + assert isinstance(assertions[0], ass.ObjectAssertion) |
| 94 | + assert assertions[0].object == inner_value |
0 commit comments