an inout of interface pointer test that illustrates that bug 9914 is not a bug

This commit is contained in:
jband%netscape.com 1999-07-16 04:29:49 +00:00
parent 8bd1437342
commit 38990d5388
4 changed files with 76 additions and 2 deletions

View File

@ -79,6 +79,7 @@ interface nsIEcho : nsISupports {
nsISupports ReturnInterface(in nsISupports obj);
nsIJSStackFrameLocation GetStack();
void SetReceiverReturnOldReceiver(inout nsIEcho aReceiver);
};
/***************************************************************************/

View File

@ -271,6 +271,9 @@ public:
/* nsIJSStackFrameLocation GetStack (); */
NS_IMETHOD GetStack(nsIJSStackFrameLocation **_retval);
/* void SetReceiverReturnOldReceiver (inout nsIEcho aReceiver); */
NS_IMETHOD SetReceiverReturnOldReceiver(nsIEcho **aReceiver);
MyEcho();
private:
nsIEcho* mReceiver;
@ -476,7 +479,7 @@ MyEcho::GetStack(nsIJSStackFrameLocation **_retval)
{
xpc->CreateStackFrameLocation(JS_FALSE,
__FILE__,
"MyEcho::GetStack",
"MyEcho::GetStack",
__LINE__,
jsstack,
&stack);
@ -490,7 +493,24 @@ MyEcho::GetStack(nsIJSStackFrameLocation **_retval)
return NS_OK;
}
return NS_ERROR_FAILURE;
}
}
/* void SetReceiverReturnOldReceiver (inout nsIEcho aReceiver); */
NS_IMETHODIMP
MyEcho::SetReceiverReturnOldReceiver(nsIEcho **aReceiver)
{
if(!aReceiver)
return NS_ERROR_NULL_POINTER;
nsIEcho* oldReceiver = mReceiver;
mReceiver = *aReceiver;
if(mReceiver)
NS_ADDREF(mReceiver);
/* don't release the reference, that is the caller's problem */
*aReceiver = oldReceiver;
return NS_OK;
}
/***************************************************************************/
// security manager test class

View File

@ -96,6 +96,9 @@ public:
/* nsIJSStackFrameLocation GetStack (); */
NS_IMETHOD GetStack(nsIJSStackFrameLocation **_retval);
/* void SetReceiverReturnOldReceiver (inout nsIEcho aReceiver); */
NS_IMETHOD SetReceiverReturnOldReceiver(nsIEcho **aReceiver);
xpctestEcho();
private:
nsIEcho* mReceiver;
@ -315,6 +318,23 @@ xpctestEcho::GetStack(nsIJSStackFrameLocation **_retval)
return NS_ERROR_FAILURE;
}
/* void SetReceiverReturnOldReceiver (inout nsIEcho aReceiver); */
NS_IMETHODIMP
xpctestEcho::SetReceiverReturnOldReceiver(nsIEcho **aReceiver)
{
if(!aReceiver)
return NS_ERROR_NULL_POINTER;
nsIEcho* oldReceiver = mReceiver;
mReceiver = *aReceiver;
if(mReceiver)
NS_ADDREF(mReceiver);
/* don't release the reference, that is the caller's problem */
*aReceiver = oldReceiver;
return NS_OK;
}
/***************************************************************************/
// static

View File

@ -435,6 +435,39 @@ print("nsID tests - "+(all_ok ? "passed" : "failed"));
all_ok = echo.SharedString() == "a static string";
print("[shared] test - "+(all_ok ? "passed" : "failed"));
/***************************************************************************/
var e1 = new Object();
var e2 = new Object();
var v1 = new Object();
var v2 = new Object();
var v3 = new Object();
var v4 = new Object();
echo.SetReceiver(null);
all_ok = true;
v1.value = e1;
echo.SetReceiverReturnOldReceiver(v1);
all_ok = all_ok && v1.value == null;
v2.value = e2;
echo.SetReceiverReturnOldReceiver(v2);
all_ok = all_ok && v2.value == e1;
v3.value = null;
echo.SetReceiverReturnOldReceiver(v3);
all_ok = all_ok && v3.value == e2;
v4.value = e1;
echo.SetReceiverReturnOldReceiver(v4);
all_ok = all_ok && v4.value == null;
print("inout of interface tests - "+
(all_ok ? "passed" : "failed"));
echo.SetReceiver(null);
/***************************************************************************/
// Components object test...
// print(".......................................");