attr.evolve uses Attribute.alias to determine parameter names.
(self)
| 2364 | assert example.__dunder_override__ == 6 |
| 2365 | |
| 2366 | def test_evolve(self): |
| 2367 | """ |
| 2368 | attr.evolve uses Attribute.alias to determine parameter names. |
| 2369 | """ |
| 2370 | |
| 2371 | @attr.s |
| 2372 | class EvolveCase: |
| 2373 | _override = attr.ib(alias="_override") |
| 2374 | __mangled = attr.ib() |
| 2375 | __dunder__ = attr.ib() |
| 2376 | |
| 2377 | org = EvolveCase(1, 2, 3) |
| 2378 | |
| 2379 | # Previous behavior of evolve as broken for double-underscore |
| 2380 | # passthrough, and would raise here due to mis-mapping the __dunder__ |
| 2381 | # alias |
| 2382 | assert attr.evolve(org) == org |
| 2383 | |
| 2384 | # evolve uses the alias to match __init__ signature |
| 2385 | assert attr.evolve( |
| 2386 | org, |
| 2387 | _override=0, |
| 2388 | ) == EvolveCase(0, 2, 3) |
| 2389 | |
| 2390 | # and properly passes through dunders and mangles |
| 2391 | assert attr.evolve( |
| 2392 | org, |
| 2393 | EvolveCase__mangled=4, |
| 2394 | dunder__=5, |
| 2395 | ) == EvolveCase(1, 4, 5) |
| 2396 | |
| 2397 | def test_alias_is_default(self): |
| 2398 | """ |
nothing calls this directly
no test coverage detected