(self)
| 334 | }) |
| 335 | |
| 336 | def test_fromkeys(self): |
| 337 | self.assertEqual(dict.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) |
| 338 | d = {} |
| 339 | self.assertIsNot(d.fromkeys('abc'), d) |
| 340 | self.assertEqual(d.fromkeys('abc'), {'a':None, 'b':None, 'c':None}) |
| 341 | self.assertEqual(d.fromkeys((4,5),0), {4:0, 5:0}) |
| 342 | self.assertEqual(d.fromkeys([]), {}) |
| 343 | def g(): |
| 344 | yield 1 |
| 345 | self.assertEqual(d.fromkeys(g()), {1:None}) |
| 346 | self.assertRaises(TypeError, {}.fromkeys, 3) |
| 347 | class dictlike(dict): pass |
| 348 | self.assertEqual(dictlike.fromkeys('a'), {'a':None}) |
| 349 | self.assertEqual(dictlike().fromkeys('a'), {'a':None}) |
| 350 | self.assertIsInstance(dictlike.fromkeys('a'), dictlike) |
| 351 | self.assertIsInstance(dictlike().fromkeys('a'), dictlike) |
| 352 | class mydict(dict): |
| 353 | def __new__(cls): |
| 354 | return collections.UserDict() |
| 355 | ud = mydict.fromkeys('ab') |
| 356 | self.assertEqual(ud, {'a':None, 'b':None}) |
| 357 | self.assertIsInstance(ud, collections.UserDict) |
| 358 | self.assertRaises(TypeError, dict.fromkeys) |
| 359 | |
| 360 | class Exc(Exception): pass |
| 361 | |
| 362 | class baddict1(dict): |
| 363 | def __init__(self): |
| 364 | raise Exc() |
| 365 | |
| 366 | self.assertRaises(Exc, baddict1.fromkeys, [1]) |
| 367 | |
| 368 | class BadSeq(object): |
| 369 | def __iter__(self): |
| 370 | return self |
| 371 | def __next__(self): |
| 372 | raise Exc() |
| 373 | |
| 374 | self.assertRaises(Exc, dict.fromkeys, BadSeq()) |
| 375 | |
| 376 | class baddict2(dict): |
| 377 | def __setitem__(self, key, value): |
| 378 | raise Exc() |
| 379 | |
| 380 | self.assertRaises(Exc, baddict2.fromkeys, [1]) |
| 381 | |
| 382 | # test fast path for dictionary inputs |
| 383 | res = dict(zip(range(6), [0]*6)) |
| 384 | d = dict(zip(range(6), range(6))) |
| 385 | self.assertEqual(dict.fromkeys(d, 0), res) |
| 386 | # test fast path for set inputs |
| 387 | d = set(range(6)) |
| 388 | self.assertEqual(dict.fromkeys(d, 0), res) |
| 389 | # test slow path for other iterable inputs |
| 390 | d = list(range(6)) |
| 391 | self.assertEqual(dict.fromkeys(d, 0), res) |
| 392 | |
| 393 | # test fast path when object's constructor returns large non-empty dict |
nothing calls this directly
no test coverage detected