Mozilla/mozilla/modules/libtest/src/nsTestQueryApi.cpp
nisheeth%netscape.com 9499876f5c Adding files created by Ori Kravitz (orik@mercury.co.il) for exposing
interfaces for testing the layout engine.


git-svn-id: svn://10.0.0.236/trunk@10627 18797224-902f-48f8-a5cc-f745e15eee43
1998-09-21 22:16:41 +00:00

471 lines
8.6 KiB
C++

#include "nsITestQueryApi.h"
#include "nsTestQueryApi.h"
#include "layprobe.h"
static NS_DEFINE_IID(kISupportsIID, NS_ISUPPORTS_IID);
static NS_DEFINE_IID(kIFactoryIID, NS_IFACTORY_IID);
static NS_DEFINE_IID(kITestQueryApiIID, NS_ITESTQUERYAPI_IID);
static NS_DEFINE_CID(kITestQueryApiCID, NS_TESTQUERYAPI_CID);
//
// nsTestQueryApi Class Declaration
/////////////////////////////////////
class nsTestQueryApi: public nsITestQueryApi
{
private:
nsrefcnt mRefCnt;
public:
// Constructor and Destuctor
nsTestQueryApi();
~nsTestQueryApi();
// nsISupports methods
NS_IMETHOD QueryInterface(const nsIID &aIID,
void **aResult);
NS_IMETHOD_(nsrefcnt) AddRef(void);
NS_IMETHOD_(nsrefcnt) Release(void);
// nsITestQueryApi methods
NS_IMETHOD GetFrames(
XP_List** lppList
);
NS_IMETHOD FrameGetStringProperty(
MWContext* FrameID,
char* PropertyName,
char** lpszPropVal
);
NS_IMETHOD FrameGetNumProperty(
MWContext* FrameID,
char* PropertyName,
int32* lpPropVal
);
NS_IMETHOD FrameGetElements(
XP_List* lppList,
MWContext* FrameID,
int16 ElementLAPIType,
char* ElementName
);
NS_IMETHOD FrameGetElementFromPoint(
LO_Element** OUT_lppElement,
MWContext* FrameID,
int xPos,
int yPos
);
NS_IMETHOD GetFirstElement (
LO_Element** OUT_lppElement,
MWContext* FrameID
);
NS_IMETHOD GetNextElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
);
NS_IMETHOD GetPrevElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
);
NS_IMETHOD GetChildElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
);
NS_IMETHOD ElementGetStringProperty(
MWContext* FrameID,
LO_Element* ElementID,
char* PropertyName,
char** lpszPropVal
);
NS_IMETHOD ElementGetNumProperty(
MWContext* FrameID,
LO_Element* ElementID,
char* PropertyName,
int32* lpPropVal
);
NS_IMETHOD GetParnetElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
);
};
//
// nsITestQueryApi Factory Declaration
/////////////////////////////////////////
class nsTestQueryApiFactory: public nsIFactory
{
private:
nsrefcnt mRefCnt;
public:
nsTestQueryApiFactory();
~nsTestQueryApiFactory();
// nsISupports methods
NS_IMETHOD QueryInterface(const nsIID &aIID,
void **aResult);
NS_IMETHOD_(nsrefcnt) AddRef(void);
NS_IMETHOD_(nsrefcnt) Release(void);
// nsIFactory methods
NS_IMETHOD CreateInstance(nsISupports *aOuter,
const nsIID &aIID,
void **aResult);
NS_IMETHOD LockFactory(PRBool aLock);
};
///////////////////////////////////////////////
// nsTestQueryApi Implementation //
///////////////////////////////////////////////
nsTestQueryApi::nsTestQueryApi()
{
mRefCnt = 0;
}
nsTestQueryApi::~nsTestQueryApi()
{
assert(mRefCnt == 0);
}
NS_METHOD nsTestQueryApi::QueryInterface(const nsIID &aIID,
void **aResult)
{
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
// Always NULL result, in case of failure
*aResult = NULL;
if (aIID.Equals(kISupportsIID))
{
*aResult = (void *) this;
}
else if (aIID.Equals(kITestQueryApiIID))
{
*aResult = (void *) this;
}
if (aResult != NULL)
return NS_ERROR_NO_INTERFACE;
AddRef();
return NS_OK;
}
nsrefcnt nsTestQueryApi::AddRef()
{
return ++mRefCnt;
}
nsrefcnt nsTestQueryApi::Release()
{
if (--mRefCnt == 0)
{
delete this;
return 0; // Don't access mRefCnt after deleting!
}
return mRefCnt;
}
NS_METHOD nsTestQueryApi::GetFrames(
XP_List** lppList
)
{
if (LAPIGetFrames(lppList))
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::FrameGetStringProperty(
MWContext* FrameID,
char* PropertyName,
char** lpszPropVal
)
{
if (LAPIFrameGetStringProperty(FrameID, PropertyName, lpszPropVal))
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::FrameGetNumProperty(
MWContext* FrameID,
char* PropertyName,
int32* lpPropVal
)
{
if (LAPIFrameGetNumProperty(FrameID, PropertyName, lpPropVal))
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::FrameGetElements(
XP_List* OUT_lpFList,
MWContext* FrameID,
int16 ElementLAPIType,
char* ElementName
)
{
if (!OUT_lpFList)
return NS_ERROR_NULL_POINTER;
if (LAPIFrameGetElements(OUT_lpFList, FrameID, ElementLAPIType, ElementName))
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::FrameGetElementFromPoint(
LO_Element** OUT_lppElement,
MWContext* FrameID,
int xPos,
int yPos
)
{
(*OUT_lppElement) = LAPIFrameGetElementFromPoint(FrameID, xPos, yPos);
if ((*OUT_lppElement))
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::GetFirstElement (
LO_Element** OUT_lppElement,
MWContext * FrameID
)
{
(*OUT_lppElement) = LAPIGetFirstElement(FrameID);
if (*OUT_lppElement != NULL)
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::GetNextElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
)
{
(*OUT_lppElement) = LAPIGetNextElement(FrameID, ElementID);
if (*OUT_lppElement != NULL)
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::GetPrevElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
)
{
(*OUT_lppElement) = LAPIGetPrevElement(FrameID, ElementID);
if (*OUT_lppElement != NULL)
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::GetChildElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
)
{
(*OUT_lppElement) = LAPIGetChildElement(FrameID, ElementID);
if (*OUT_lppElement != NULL)
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::GetParnetElement (
LO_Element** OUT_lppElement,
MWContext* FrameID,
LO_Element* ElementID
)
{
(*OUT_lppElement) = LAPIGetParentElement(FrameID, ElementID);
if (*OUT_lppElement != NULL)
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::ElementGetStringProperty(
MWContext* FrameID,
LO_Element* ElementID,
char* PropertyName,
char** lpszPropVal
)
{
if (LAPIElementGetStringProperty(FrameID, ElementID, PropertyName, lpszPropVal))
return NS_OK;
else
return LAPIGetLastError();
}
NS_METHOD nsTestQueryApi::ElementGetNumProperty(
MWContext* FrameID,
LO_Element* ElementID,
char* PropertyName,
int32* lpPropVal
)
{
if (LAPIElementGetNumProperty(FrameID, ElementID, PropertyName, lpPropVal))
return NS_OK;
else
return LAPIGetLastError();
}
////////////////////////////////////////////////
// nsITestQueryApi Factory Implementation //
////////////////////////////////////////////////
nsTestQueryApiFactory::nsTestQueryApiFactory()
{
mRefCnt = 0;
}
nsTestQueryApiFactory::~nsTestQueryApiFactory()
{
assert(mRefCnt == 0);
}
NS_METHOD nsTestQueryApiFactory::QueryInterface(const nsIID &aIID,
void **aResult)
{
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
// Always NULL result, in case of failure
*aResult = NULL;
if (aIID.Equals(kISupportsIID))
{
*aResult = (void *) this;
}
else if (aIID.Equals(kIFactoryIID))
{
*aResult = (void *) this;
}
if (*aResult == NULL)
return NS_ERROR_NO_INTERFACE;
AddRef(); // Increase reference count for caller
return NS_OK;
}
nsrefcnt nsTestQueryApiFactory::AddRef()
{
return ++mRefCnt;
}
nsrefcnt nsTestQueryApiFactory::Release()
{
if (--mRefCnt == 0)
{
delete this;
return 0; // Don't access mRefCnt after deleting!
}
return mRefCnt;
}
NS_METHOD nsTestQueryApiFactory::CreateInstance(nsISupports *aOuter,
const nsIID &aIID,
void **aResult)
{
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
*aResult = NULL;
nsISupports *inst = new nsTestQueryApi();
if (inst == NULL)
return NS_ERROR_OUT_OF_MEMORY;
nsresult res = inst->QueryInterface(aIID, aResult);
if (res != NS_OK)
delete inst; // We didn't get the right interface, so clean up
return res;
}
NS_METHOD nsTestQueryApiFactory::LockFactory(PRBool aLock)
{
return NS_ERROR_NOT_IMPLEMENTED;
}
nsresult GetTestQueryApiFactory(nsIFactory **aResult)
{
if (aResult == NULL)
return NS_ERROR_NULL_POINTER;
*aResult = NULL;
nsISupports *inst = new nsTestQueryApiFactory();
if (inst == NULL)
return NS_ERROR_OUT_OF_MEMORY;
nsresult res = inst->QueryInterface(kIFactoryIID, (void**)aResult);
if (res != NS_OK)
delete inst; // We didn't get the right interface, so clean up
return res;
}