Comprehensive test about how `kw_only` works when there's multiple levels of inheritance with different `kw_only` settings.
(self)
| 1237 | assert fs["no"].kw_only is True |
| 1238 | |
| 1239 | def test_kw_only_inheritance(self): |
| 1240 | """ |
| 1241 | Comprehensive test about how `kw_only` works when there's multiple |
| 1242 | levels of inheritance with different `kw_only` settings. |
| 1243 | """ |
| 1244 | |
| 1245 | @attr.define() |
| 1246 | class A: |
| 1247 | a = attr.field() |
| 1248 | a_t = attr.field(kw_only=True) |
| 1249 | a_f = attr.field(kw_only=False) |
| 1250 | |
| 1251 | @attr.define(kw_only=True) |
| 1252 | class B(A): |
| 1253 | b = attr.field() |
| 1254 | b_t = attr.field(kw_only=True) |
| 1255 | b_f = attr.field(kw_only=False) |
| 1256 | |
| 1257 | @attr.define(kw_only=False) |
| 1258 | class C(B): |
| 1259 | c = attr.field() |
| 1260 | c_t = attr.field(kw_only=True) |
| 1261 | c_f = attr.field(kw_only=False) |
| 1262 | |
| 1263 | fs = fields_dict(A) |
| 1264 | |
| 1265 | assert fs["a"].kw_only is False |
| 1266 | assert fs["a_t"].kw_only is True |
| 1267 | assert fs["a_f"].kw_only is False |
| 1268 | |
| 1269 | fs = fields_dict(B) |
| 1270 | |
| 1271 | assert fs["a"].kw_only is False |
| 1272 | assert fs["a_t"].kw_only is True |
| 1273 | assert fs["a_f"].kw_only is False |
| 1274 | assert fs["b"].kw_only is True |
| 1275 | assert fs["b_t"].kw_only is True |
| 1276 | assert fs["b_f"].kw_only is False |
| 1277 | |
| 1278 | fs = fields_dict(C) |
| 1279 | |
| 1280 | assert fs["a"].kw_only is False |
| 1281 | assert fs["a_t"].kw_only is True |
| 1282 | assert fs["a_f"].kw_only is False |
| 1283 | assert fs["b"].kw_only is True |
| 1284 | assert fs["b_t"].kw_only is True |
| 1285 | assert fs["b_f"].kw_only is False |
| 1286 | assert fs["c"].kw_only is False |
| 1287 | assert fs["c_t"].kw_only is True |
| 1288 | assert fs["c_f"].kw_only is False |
| 1289 | |
| 1290 | def test_kw_only_inheritance_force_kw_only(self): |
| 1291 | """ |
nothing calls this directly
no test coverage detected