зеркало из https://github.com/mozilla/pjs.git
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:
Родитель
39e2126cb7
Коммит
b9075a2e9b
|
@ -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"
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче