def test_builtin_full_override(self): # check our assumptions... # and yes, the signatures below are for file rather than # dict; we need a cpy class for the test, the ConfigHint doesn't # have to be accurate however class cls(dict): __slots__ = () self.assertRaises(TypeError, basics.ConfigType, cls) raw_hint = ConfigHint(types={ "filename": "str", "mode": "r", "buffering": "int" }, typename='file', required=['filename'], positional=['filename']) # make sure it still tries to introspect, and throws typeerror. # introspection is generally wanted- if it must be skipped, the # ConfigHint must make it explicit cls.pkgcore_config_type = raw_hint self.assertRaises(TypeError, basics.ConfigType, cls) cls.pkgcore_config_type = raw_hint.clone(authorative=True) conf = basics.ConfigType(cls) self.assertEqual(conf.name, 'file') self.assertEqual(list(conf.required), ['filename']) self.assertEqual(list(conf.positional), ['filename']) self.assertEqual(sorted(conf.types), ['buffering', 'filename', 'mode'])
def test_clone(self): c = ConfigHint(types={'foo':'list', 'one':'str'}, positional=['one'], required=['one'], typename='barn', doc='orig doc') c2 = c.clone(types={'foo':'list', 'one':'str', 'two':'str'}, required=['one', 'two']) self.assertEqual(c2.types, {'foo':'list', 'one':'str', 'two':'str'}) self.assertEqual(c2.positional, c.positional) self.assertEqual(c2.required, ['one', 'two']) self.assertEqual(c2.typename, c.typename) self.assertEqual(c2.allow_unknowns, c.allow_unknowns) self.assertEqual(c2.doc, c.doc)