@@ -294,11 +294,33 @@ def test_record_empty(self):
294294
295295 async def test_record_duplicate_colnames (self ):
296296 """Test that Record handles duplicate column names."""
297- r = await self .con .fetchrow ('SELECT 1 as a, 2 as a' )
298- self .assertEqual (r ['a' ], 2 )
299- self .assertEqual (r [0 ], 1 )
300- self .assertEqual (repr (r ), '<Record a=1 a=2>' )
301- self .assertEqual (list (r .items ()), [('a' , 1 ), ('a' , 2 )])
297+
298+ records_descs = [
299+ [('a' , 1 )],
300+ [('a' , 1 ), ('a' , 2 )],
301+ [('a' , 1 ), ('b' , 2 ), ('a' , 3 )],
302+ [('a' , 1 ), ('b' , 2 ), ('a' , 3 ), ('c' , 4 ), ('b' , 5 )],
303+ ]
304+
305+ for desc in records_descs :
306+ items = collections .OrderedDict (desc )
307+
308+ query = 'SELECT ' + ', ' .join (
309+ ['{} as {}' .format (p [1 ], p [0 ]) for p in desc ])
310+
311+ with self .subTest (query = query ):
312+ r = await self .con .fetchrow (query )
313+ for idx , (field , val ) in enumerate (desc ):
314+ self .assertEqual (r [idx ], val )
315+ self .assertEqual (r [field ], items [field ])
316+
317+ expected_repr = '<Record {}>' .format (
318+ ' ' .join ('{}={}' .format (p [0 ], p [1 ]) for p in desc ))
319+ self .assertEqual (repr (r ), expected_repr )
320+
321+ self .assertEqual (list (r .items ()), desc )
322+ self .assertEqual (list (r .values ()), [p [1 ] for p in desc ])
323+ self .assertEqual (list (r .keys ()), [p [0 ] for p in desc ])
302324
303325 async def test_record_isinstance (self ):
304326 """Test that Record works with isinstance."""
0 commit comments