123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285 |
- #include <precomp.h>
- #include <api/api.h>
- #include <api/apiinit.h>
- #include <api/service/svcmgr.h>
- #include <api/timer/timerclient.h>
- #include <api/timer/timermul.h>
- #include <api/xml/xmlreader.h>
- #include <bfc/string/bigstring.h>
- #include <bfc/string/stringdict.h>
- // This is the Wasabi Library Test Application
- DECLARE_MODULE_SVCMGR
- #define TIMER_TEST_DURATION (MAX_TIMER_DELAY/1000)*4 // We should at least use (MAX_TIMER_DELAY/1000)*2 here so as to test the low speed timer cycle at least twice
- int failed = 0;
- #if defined(WASABI_COMPILE_TIMERS) || defined(WASABI_COMPILE_WND) || defined(WASABI_COMPILE_TEXTMODE)
- int exitpump = 0;
- //-------------------------------------------------------------------------------------------
- void doMessagePump() {
- exitpump = 0;
- // Despite appearances, this is portable
- MSG msg;
- while (!exitpump && GetMessage( &msg, NULL, 0, 0 ) ) {
- #ifdef WASABI_COMPILE_WND
- TranslateMessage( &msg );
- #endif
- DispatchMessage( &msg );
- }
- }
- //-------------------------------------------------------------------------------------------
- void exitMessagePump() {
- exitpump = 1;
- }
- #endif
- //-------------------------------------------------------------------------------------------
- void fail(const char *module, const char *test) {
- failed++;
- printf("\n\n*** FAILED *** : %s (%s)\n\n", module, test);
- fflush(stdout);
- }
- //-------------------------------------------------------------------------------------------
- #ifdef WASABI_COMPILE_TIMERS
- // Multiplexed timers test
- int timer[10];
- class TestTimer : public TimerClientDI {
- public:
- TestTimer() {
- for (int id = 0; id < 10; id++) {
- timer[id] = 0;
- timerclient_setTimer(id+1, id*100+100);
- }
- }
- virtual ~TestTimer() {
- for (int id = 0; id < 10; id++) {
- timerclient_killTimer(id+1);
- }
- }
- virtual void timerclient_timerCallback(int id) {
- if (id >= 1 && id <= 10) {
- timer[id-1]+=timerclient_getSkipped()+1;
- if (id == 1 || id == 10) {
- printf("\r");
- for (int i = 0; i < 10; i++) {
- if (i > 0) printf(" | ");
- printf("%d:%3d", i+1, timer[i]);
- }
- fflush(stdout);
- }
- if (id == 10 && timer[id-1] >= TIMER_TEST_DURATION)
- exitMessagePump();
- }
- }
- };
- #endif
- //-------------------------------------------------------------------------------------------
- #ifdef WASABI_COMPILE_XMLPARSER
- // Xml parser test
- enum XML_TEST_TAGS {
- XML_TEST_ROOT,
- XML_TEST_TEST1,
- XML_TEST_TEST2,
- };
- BEGIN_STRINGDICTIONARY(_XMLTESTTAGS);
- SDI("WasabiTest", XML_TEST_ROOT);
- SDI("Test1", XML_TEST_TEST1);
- SDI("Test2", XML_TEST_TEST2);
- END_STRINGDICTIONARY(_XMLTESTTAGS, xmltesttags);
- class XmlTest : public XmlReaderCallbackI {
- public:
- XmlTest() : m_failed(0), m_inroot(0), m_intest1(0), m_intest2(0) {
- BigString str;
- str += "buf:";
- str += "<WasabiTest>\n";
- str += " <Test1>success</Test1>\n";
- str += " <Test2 result=\"success\"/>\n";
- str += "</WasabiTest>\n";
- XmlReader::registerCallback("*", static_cast<api_xmlreadercallback*>(this));
- XmlReader::loadFile(str, NULL, static_cast<api_xmlreadercallback*>(this));
- XmlReader::unregisterCallback(static_cast<api_xmlreadercallback*>(this));
- }
- virtual ~XmlTest() {
- }
- virtual int xmlReaderDisplayErrors() { return 0; }
- virtual void xmlReaderOnError(const char *filename, int linenum, const char *incpath, int errcode, const char *errstr) {
- fail("XML TEST", "Parse error");
- }
- virtual void xmlReaderOnStartElementCallback(const char *xmlpath, const char *xmltag, api_xmlreaderparams *params) {
- switch (xmltesttags.getId(xmltag)) {
- case XML_TEST_ROOT:
- m_inroot++;
- printf(" <WasabiTest>\n");
- fflush(stdout);
- break;
- case XML_TEST_TEST1:
- m_intest1++;
- printf(" <Test1>\n");
- fflush(stdout);
- break;
- case XML_TEST_TEST2:
- m_intest2++;
- printf(" <Test2\n");
- int _failed = 0;
- for (int i=0;i<params->getNbItems();i++) {
- printf(" %s = \"%s\"\n", params->getItemName(i), params->getItemValue(i));
- if (i == 1) {
- if (!STRCASEEQLSAFE(params->getItemValue(i), "success")) _failed = 1;
- if (!STRCASEEQLSAFE(params->getItemName(i), "result")) _failed = 1;
- }
- }
- if (_failed) {
- m_failed = 1;
- fail("XML PARSER", "Not receiving the right params in Test2");
- }
- fflush(stdout);
- break;
- }
- }
- virtual void xmlReaderOnEndElementCallback(const char *xmlpath, const char *xmltag) {
- switch (xmltesttags.getId(xmltag)) {
- case XML_TEST_ROOT:
- m_inroot--;
- printf(" </WasabiTest>\n");
- fflush(stdout);
- break;
- case XML_TEST_TEST1:
- m_intest1--;
- printf(" </Test1>\n");
- fflush(stdout);
- break;
- case XML_TEST_TEST2:
- m_intest2--;
- printf(" />\n");
- fflush(stdout);
- break;
- }
- }
- virtual void xmlReaderOnCharacterDataCallback(const char *xmlpath, const char *xmltag, const char *str) {
- if (m_intest1) {
- printf(" Character Data reads \"%s\"\n", str);
- if (!STRCASEEQL(str, "success")) {
- m_failed = 1;
- fail("XML PARSER", "Not receiving the right character data in Test1");
- }
- fflush(stdout);
- }
- }
- int didFail() { return m_failed; }
- private:
- int m_failed;
- int m_inroot;
- int m_intest1;
- int m_intest2;
- };
- #endif
- //-------------------------------------------------------------------------------------------
- // 03F73CE0-987D-46fd-B2E3-DBB364A47F54
- static const GUID myappguid = { 0x3f73ce0, 0x987d, 0x46fd, { 0xb2, 0xe3, 0xdb, 0xb3, 0x64, 0xa4, 0x7f, 0x54 }};
- int main(int argc, char **argv) {
- printf("-------------------------------------------------------------------------------\n");
- printf("Initializing Wasabi API.\n");
- printf("-------------------------------------------------------------------------------\n");
- fflush(stdout);
- ApiInit::init((HINSTANCE)0, myappguid, "", (HWND)NULL);
- printf("\n- PASSED -\n\n");
- fflush(stdout);
- // Rudimentary svcmgr test: enumerate services
- printf("-------------------------------------------------------------------------------\n");
- printf("Testing service manager.\n");
- printf("-------------------------------------------------------------------------------\n\n");
- int n=ServiceManager::getNumServicesByGuid();
- printf("Services running : %d\n\n", n);
- fflush(stdout);
- int i;
- for (i=0;i<n;i++) {
- waServiceFactory *factory = ServiceManager::enumService(i);
- char sguid[256];
- nsGUID::toChar(factory->getGuid(), sguid);
- printf(" %d : %s (%s)\n", i, factory->getServiceName(), sguid);
- }
- if (i > 0) {
- printf("\n- PASSED -\n\n");
- } else {
- fail("SVCMGR", "service enumerator returns no service present");
- }
- fflush(stdout);
- #ifdef WASABI_COMPILE_TIMERS
- {
- DWORD ds = Std::getTickCount();
- // Multiplexed timers test
- printf("-------------------------------------------------------------------------------\n");
- printf("Testing timers for %d seconds.\n", TIMER_TEST_DURATION);
- printf("-------------------------------------------------------------------------------\n\n");
- fflush(stdout);
- TestTimer tt;
- doMessagePump();
- printf("\n");
- DWORD dt = Std::getTickCount() - ds;
- // let's assume this is a VERY VERY busy cpu, we're just trying to determine if the timers have been running...
- if (dt < (TIMER_TEST_DURATION-1)*1000 || dt > (TIMER_TEST_DURATION+1)*1000) {
- fail("TIMERS", "Test was out of range by more than 1s");
- } else {
- printf("\n- PASSED -\n\n");
- }
- fflush(stdout);
- }
- #endif
- #ifdef WASABI_COMPILE_XMLPARSER
- {
- // Multiplexed timers test
- printf("-------------------------------------------------------------------------------\n");
- printf("Testing XML parser.\n");
- printf("-------------------------------------------------------------------------------\n\n");
- fflush(stdout);
- XmlTest xt;
- if (!xt.didFail()) {
- printf("\n- PASSED -\n\n");
- fflush(stdout);
- } // else msg is already printed
- }
- #endif
- printf("-------------------------------------------------------------------------------\n");
- printf("Shutting down.\n");
- printf("-------------------------------------------------------------------------------\n");
- ApiInit::shutdown();
- printf("\n- PASSED -\n\n");
- printf("===============================================================================\n");
- printf("Result : ");
- if (failed)
- printf("*** %d FAILURE%s ***\n", failed, failed > 1 ? "S" : "");
- else
- printf("- ALL PASSED -\n");
- printf("===============================================================================\n\n");
- return 0;
- }
|