Issue 1818: collections.namedtuple() to support automatic renaming of invalid fieldnames.

This commit is contained in:
Raymond Hettinger 2009-02-10 01:24:05 +00:00
parent c5eba1e4f7
commit 322daea7c3
4 changed files with 36 additions and 3 deletions

View file

@ -44,6 +44,17 @@ class TestNamedTuple(unittest.TestCase):
self.assertRaises(TypeError, Point._make, [11]) # catch too few args
self.assertRaises(TypeError, Point._make, [11, 22, 33]) # catch too many args
def test_name_fixer(self):
for spec, renamed in [
[('efg', 'g%hi'), ('efg', '_2')], # field with non-alpha char
[('abc', 'class'), ('abc', '_2')], # field has keyword
[('8efg', '9ghi'), ('_1', '_2')], # field starts with digit
[('abc', '_efg'), ('abc', '_2')], # field with leading underscore
[('abc', 'efg', 'efg', 'ghi'), ('abc', 'efg', '_3', 'ghi')], # duplicate field
[('abc', '', 'x'), ('abc', '_2', 'x')], # fieldname is a space
]:
self.assertEqual(namedtuple('NT', spec, rename=True)._fields, renamed)
def test_instance(self):
Point = namedtuple('Point', 'x y')
p = Point(11, 22)