Fix a bug in interface flattening when an attribute was set before one

on the same interface was fetched.  Added test for this case too.

Not part of the build.
This commit is contained in:
markh%activestate.com 2001-08-18 14:27:46 +00:00
Родитель 39e2126cb7
Коммит b9075a2e9b
2 изменённых файлов: 11 добавлений и 1 удалений

Просмотреть файл

@ -299,7 +299,11 @@ class Component(_XPCOMBase):
self._build_all_supported_interfaces_()
interface_name = self.__dict__['_name_to_interface_name_'].get(attr, None)
if interface_name is not None:
interface = self._interface_names_[interface_name]
interface = self._interface_names_.get(interface_name, None)
if interface is None:
iid = XPTI_GetInterfaceInfoManager().GetInfoForName(interface_name).GetIID()
self.QueryInterface(iid)
interface = self.__dict__['_interface_names_'][interface_name]
setattr(interface, attr, val)
return
raise AttributeError, "XPCOM component '%s' can not set attribute '%s'" % (self._object_name_, attr)

Просмотреть файл

@ -380,6 +380,12 @@ def test_all():
c = xpcom.components.classes[contractid].createInstance()
test_base_interface(c)
test_derived_interface(c, test_flat=1)
# We had a bug where a "set" of an attribute before a "get" failed.
# Don't let it happen again :)
c = xpcom.components.classes[contractid].createInstance()
c.boolean_value = 0
# This name is used in exceptions etc - make sure we got it from nsIClassInfo OK.
assert c._object_name_ == "Python.TestComponent"