Esempio n. 1
0
    def test_name_conflicts(self):
        # Some names like "self", "cls", "tuple", "itemgetter", and "property"
        # failed when used as field names.  Test to make sure these now work.
        T = BagType('T', ('itemgetter', 'property', 'self', 'cls', 'tuple'))
        t = T(1, 2, 3, 4, 5)
        self.assertEqual(t, (1, 2, 3, 4, 5))
        newt = t._replace(itemgetter=10, property=20, self=30, cls=40, tuple=50)
        self.assertEqual(newt, (10, 20, 30, 40, 50))

        # Broader test of all interesting names taken from the code, old
        # template, and an example
        words = {
            'Alias', 'At', 'AttributeError', 'Build', 'Bypass', 'Create', 'Encountered', 'Expected', 'Field', 'For',
            'Got', 'Helper', 'IronPython', 'Jython', 'KeyError', 'Make', 'Modify', 'Note', 'OrderedDict', 'Point',
            'Return', 'Returns', 'Type', 'TypeError', 'Used', 'Validate', 'ValueError', 'Variables', 'a', 'accessible',
            'add', 'added', 'all', 'also', 'an', 'arg_list', 'args', 'arguments', 'automatically', 'be', 'build',
            'builtins', 'but', 'by', 'cannot', 'class_namespace', 'classmethod', 'cls', 'collections', 'convert',
            'copy', 'created', 'creation', 'd', 'debugging', 'defined', 'dict', 'dictionary', 'doc', 'docstring',
            'docstrings', 'duplicate', 'effect', 'either', 'enumerate', 'environments', 'error', 'example', 'exec', 'f',
            'f_globals', 'field', 'field_names', 'fields', 'formatted', 'frame', 'function', 'functions', 'generate',
            'getter', 'got', 'greater', 'has', 'help', 'identifiers', 'indexable', 'instance', 'instantiate',
            'interning', 'introspection', 'isidentifier', 'isinstance', 'itemgetter', 'iterable', 'join', 'keyword',
            'keywords', 'kwds', 'len', 'like', 'list', 'map', 'maps', 'message', 'metadata', 'method', 'methods',
            'module', 'module_name', 'must', 'name', 'named', 'namedtuple', 'namedtuple_', 'names', 'namespace',
            'needs', 'new', 'nicely', 'num_fields', 'number', 'object', 'of', 'operator', 'option', 'p', 'particular',
            'pickle', 'pickling', 'plain', 'pop', 'positional', 'property', 'r', 'regular', 'rename', 'replace',
            'replacing', 'repr', 'repr_fmt', 'representation', 'result', 'reuse_itemgetter', 's', 'seen', 'sequence',
            'set', 'side', 'specified', 'split', 'start', 'startswith', 'step', 'str', 'string', 'strings', 'subclass',
            'sys', 'targets', 'than', 'the', 'their', 'this', 'to', 'tuple_new', 'type', 'typename', 'underscore',
            'unexpected', 'unpack', 'up', 'use', 'used', 'user', 'valid', 'values', 'variable', 'verbose', 'where',
            'which', 'work', 'x', 'y', 'z', 'zip'
        }
        sorted_words = tuple(sorted(words))
        T = BagType('T', sorted_words)
        # test __new__
        values = tuple(range(len(words)))
        t = T(*values)
        self.assertEqual(t, values)
        t = T(**dict(zip(T._attrs, values)))
        self.assertEqual(t, values)
        # test _make
        t = T._make(values)
        self.assertEqual(t, values)
        # exercise __repr__
        repr(t)
        # test _asdict
        self.assertEqual(t._asdict(), dict(zip(T._fields, values)))
        # test _replace
        t = T._make(values)
        newvalues = tuple(v * 10 for v in values)
        newt = t._replace(**dict(zip(T._fields, newvalues)))
        self.assertEqual(newt, newvalues)
        # test _fields
        self.assertEqual(T._attrs, sorted_words)
        # test __getnewargs__
        self.assertEqual(t.__getnewargs__(), values)
Esempio n. 2
0
    def test_odd_sizes(self):
        Zero = BagType("Zero", ())
        self.assertEqual(Zero(), ())
        self.assertEqual(Zero._make([]), ())
        self.assertEqual(repr(Zero()), "Zero()")
        self.assertEqual(Zero()._asdict(), {})
        self.assertEqual(Zero()._fields, ())

        Dot = BagType("Dot", ("d",))
        self.assertEqual(Dot(1), (1,))
        self.assertEqual(Dot._make([1]), (1,))
        self.assertEqual(Dot(1).d, 1)
        self.assertEqual(repr(Dot(1)), "Dot(d=1)")
        self.assertEqual(Dot(1)._asdict(), {"d": 1})
        self.assertEqual(Dot(1)._replace(d=999), (999,))
        self.assertEqual(Dot(1)._fields, ("d",))

        n = 5000 if sys.version_info >= (3, 7) else 254
        names = list(set("".join([choice(string.ascii_letters) for j in range(10)]) for i in range(n)))
        n = len(names)
        Big = BagType("Big", names)
        b = Big(*range(n))
        self.assertEqual(b, tuple(range(n)))
        self.assertEqual(Big._make(range(n)), tuple(range(n)))
        for pos, name in enumerate(names):
            self.assertEqual(getattr(b, name), pos)
        repr(b)  # make sure repr() doesn't blow-up
        d = b._asdict()
        d_expected = dict(zip(names, range(n)))
        self.assertEqual(d, d_expected)
        b2 = b._replace(**dict([(names[1], 999), (names[-5], 42)]))
        b2_expected = list(range(n))
        b2_expected[1] = 999
        b2_expected[-5] = 42
        self.assertEqual(b2, tuple(b2_expected))
        self.assertEqual(b._fields, tuple(names))
Esempio n. 3
0
    def test_odd_sizes(self):
        Zero = BagType('Zero', ())
        self.assertEqual(Zero(), ())
        self.assertEqual(Zero._make([]), ())
        self.assertEqual(repr(Zero()), 'Zero()')
        self.assertEqual(Zero()._asdict(), {})
        self.assertEqual(Zero()._fields, ())

        Dot = BagType('Dot', ('d', ))
        self.assertEqual(Dot(1), (1, ))
        self.assertEqual(Dot._make([1]), (1, ))
        self.assertEqual(Dot(1).d, 1)
        self.assertEqual(repr(Dot(1)), 'Dot(d=1)')
        self.assertEqual(Dot(1)._asdict(), {'d': 1})
        self.assertEqual(Dot(1)._replace(d=999), (999, ))
        self.assertEqual(Dot(1)._fields, ('d', ))

        n = 5000 if sys.version_info >= (3, 7) else 254
        names = list(set(''.join([choice(string.ascii_letters) for j in range(10)]) for i in range(n)))
        n = len(names)
        Big = BagType('Big', names)
        b = Big(*range(n))
        self.assertEqual(b, tuple(range(n)))
        self.assertEqual(Big._make(range(n)), tuple(range(n)))
        for pos, name in enumerate(names):
            self.assertEqual(getattr(b, name), pos)
        repr(b)  # make sure repr() doesn't blow-up
        d = b._asdict()
        d_expected = dict(zip(names, range(n)))
        self.assertEqual(d, d_expected)
        b2 = b._replace(**dict([(names[1], 999), (names[-5], 42)]))
        b2_expected = list(range(n))
        b2_expected[1] = 999
        b2_expected[-5] = 42
        self.assertEqual(b2, tuple(b2_expected))
        self.assertEqual(b._fields, tuple(names))
Esempio n. 4
0
    def test_name_conflicts(self):
        # Some names like "self", "cls", "tuple", "itemgetter", and "property"
        # failed when used as field names.  Test to make sure these now work.
        T = BagType("T", ("itemgetter", "property", "self", "cls", "tuple"))
        t = T(1, 2, 3, 4, 5)
        self.assertEqual(t, (1, 2, 3, 4, 5))
        newt = t._replace(itemgetter=10, property=20, self=30, cls=40, tuple=50)
        self.assertEqual(newt, (10, 20, 30, 40, 50))

        # Broader test of all interesting names taken from the code, old
        # template, and an example
        words = {
            "Alias",
            "At",
            "AttributeError",
            "Build",
            "Bypass",
            "Create",
            "Encountered",
            "Expected",
            "Field",
            "For",
            "Got",
            "Helper",
            "IronPython",
            "Jython",
            "KeyError",
            "Make",
            "Modify",
            "Note",
            "OrderedDict",
            "Point",
            "Return",
            "Returns",
            "Type",
            "TypeError",
            "Used",
            "Validate",
            "ValueError",
            "Variables",
            "a",
            "accessible",
            "add",
            "added",
            "all",
            "also",
            "an",
            "arg_list",
            "args",
            "arguments",
            "automatically",
            "be",
            "build",
            "builtins",
            "but",
            "by",
            "cannot",
            "class_namespace",
            "classmethod",
            "cls",
            "collections",
            "convert",
            "copy",
            "created",
            "creation",
            "d",
            "debugging",
            "defined",
            "dict",
            "dictionary",
            "doc",
            "docstring",
            "docstrings",
            "duplicate",
            "effect",
            "either",
            "enumerate",
            "environments",
            "error",
            "example",
            "exec",
            "f",
            "f_globals",
            "field",
            "field_names",
            "fields",
            "formatted",
            "frame",
            "function",
            "functions",
            "generate",
            "getter",
            "got",
            "greater",
            "has",
            "help",
            "identifiers",
            "indexable",
            "instance",
            "instantiate",
            "interning",
            "introspection",
            "isidentifier",
            "isinstance",
            "itemgetter",
            "iterable",
            "join",
            "keyword",
            "keywords",
            "kwds",
            "len",
            "like",
            "list",
            "map",
            "maps",
            "message",
            "metadata",
            "method",
            "methods",
            "module",
            "module_name",
            "must",
            "name",
            "named",
            "namedtuple",
            "namedtuple_",
            "names",
            "namespace",
            "needs",
            "new",
            "nicely",
            "num_fields",
            "number",
            "object",
            "of",
            "operator",
            "option",
            "p",
            "particular",
            "pickle",
            "pickling",
            "plain",
            "pop",
            "positional",
            "property",
            "r",
            "regular",
            "rename",
            "replace",
            "replacing",
            "repr",
            "repr_fmt",
            "representation",
            "result",
            "reuse_itemgetter",
            "s",
            "seen",
            "sequence",
            "set",
            "side",
            "specified",
            "split",
            "start",
            "startswith",
            "step",
            "str",
            "string",
            "strings",
            "subclass",
            "sys",
            "targets",
            "than",
            "the",
            "their",
            "this",
            "to",
            "tuple_new",
            "type",
            "typename",
            "underscore",
            "unexpected",
            "unpack",
            "up",
            "use",
            "used",
            "user",
            "valid",
            "values",
            "variable",
            "verbose",
            "where",
            "which",
            "work",
            "x",
            "y",
            "z",
            "zip",
        }
        sorted_words = tuple(sorted(words))
        T = BagType("T", sorted_words)
        # test __new__
        values = tuple(range(len(words)))
        t = T(*values)
        self.assertEqual(t, values)
        t = T(**dict(zip(T._attrs, values)))
        self.assertEqual(t, values)
        # test _make
        t = T._make(values)
        self.assertEqual(t, values)
        # exercise __repr__
        repr(t)
        # test _asdict
        self.assertEqual(t._asdict(), dict(zip(T._fields, values)))
        # test _replace
        t = T._make(values)
        newvalues = tuple(v * 10 for v in values)
        newt = t._replace(**dict(zip(T._fields, newvalues)))
        self.assertEqual(newt, newvalues)
        # test _fields
        self.assertEqual(T._attrs, sorted_words)
        # test __getnewargs__
        self.assertEqual(t.__getnewargs__(), values)