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.


git-svn-id: svn://10.0.0.236/trunk@101412 18797224-902f-48f8-a5cc-f745e15eee43
This commit is contained in:
markh%activestate.com
2001-08-18 14:27:46 +00:00
parent f45cbae471
commit d1f00a5439
2 changed files with 11 additions and 1 deletions

View File

@@ -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)

View File

@@ -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"