mirror of
https://github.com/mozilla/gecko-dev.git
synced 2025-02-02 12:07:52 +00:00
an inout of interface pointer test that illustrates that bug 9914 is not a bug
This commit is contained in:
parent
8bd1437342
commit
38990d5388
@ -79,6 +79,7 @@ interface nsIEcho : nsISupports {
|
||||
nsISupports ReturnInterface(in nsISupports obj);
|
||||
|
||||
nsIJSStackFrameLocation GetStack();
|
||||
void SetReceiverReturnOldReceiver(inout nsIEcho aReceiver);
|
||||
};
|
||||
|
||||
/***************************************************************************/
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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(".......................................");
|
||||
|
Loading…
x
Reference in New Issue
Block a user