diff options
Diffstat (limited to 'pjlib/src/pjlib-test/exception.c')
-rw-r--r-- | pjlib/src/pjlib-test/exception.c | 343 |
1 files changed, 182 insertions, 161 deletions
diff --git a/pjlib/src/pjlib-test/exception.c b/pjlib/src/pjlib-test/exception.c index 31a4a545..be0886e1 100644 --- a/pjlib/src/pjlib-test/exception.c +++ b/pjlib/src/pjlib-test/exception.c @@ -1,161 +1,182 @@ -/* $Id$ - */ -#include "test.h" - - -/** - * \page page_pjlib_exception_test Test: Exception Handling - * - * This file provides implementation of \b exception_test(). It tests the - * functionality of the exception handling API. - * - * @note This test use static ID not acquired through proper registration. - * This is not recommended, since it may create ID collissions. - * - * \section exception_test_sec Scope of the Test - * - * Some scenarios tested: - * - no exception situation - * - basic TRY/CATCH - * - multiple exception handlers - * - default handlers - * - * - * This file is <b>pjlib-test/exception.c</b> - * - * \include pjlib-test/exception.c - */ - - -#if INCLUDE_EXCEPTION_TEST - -#include <pjlib.h> - -#define ID_1 1 -#define ID_2 2 - -static int throw_id_1(void) -{ - PJ_THROW( ID_1 ); - return -1; -} - -static int throw_id_2(void) -{ - PJ_THROW( ID_2 ); - return -1; -} - - -static int test(void) -{ - PJ_USE_EXCEPTION; - int rc = 0; - - /* - * No exception situation. - */ - PJ_TRY { - rc = rc; - } - PJ_CATCH( ID_1 ) { - rc = -2; - } - PJ_DEFAULT { - rc = -3; - } - PJ_END; - - if (rc != 0) - return rc; - - - /* - * Basic TRY/CATCH - */ - PJ_TRY { - rc = throw_id_1(); - - // should not reach here. - rc = -10; - } - PJ_CATCH( ID_1 ) { - if (!rc) rc = 0; - } - PJ_DEFAULT { - int id = PJ_GET_EXCEPTION(); - PJ_LOG(3,("", "...error: got unexpected exception %d (%s)", - id, pj_exception_id_name(id))); - if (!rc) rc = -20; - } - PJ_END; - - if (rc != 0) - return rc; - - /* - * Multiple exceptions handlers - */ - PJ_TRY { - rc = throw_id_2(); - // should not reach here. - rc = -25; - } - PJ_CATCH( ID_1 ) { - if (!rc) rc = -30; - } - PJ_CATCH( ID_2 ) { - if (!rc) rc = 0; - } - PJ_DEFAULT { - if (!rc) rc = -40; - } - PJ_END; - - if (rc != 0) - return rc; - - /* - * Test default handler. - */ - PJ_TRY { - rc = throw_id_1(); - // should not reach here - rc = -50; - } - PJ_CATCH( ID_2 ) { - if (!rc) rc = -60; - } - PJ_DEFAULT { - if (!rc) rc = 0; - } - PJ_END; - - if (rc != 0) - return rc; - - return 0; -} - -int exception_test(void) -{ - int i, rc; - enum { LOOP = 10 }; - - for (i=0; i<LOOP; ++i) { - if ((rc=test()) != 0) { - PJ_LOG(3,("", "...failed at i=%d (rc=%d)", i, rc)); - return rc; - } - } - return 0; -} - -#else -/* To prevent warning about "translation unit is empty" - * when this test is disabled. - */ -int dummy_exception_test; -#endif /* INCLUDE_EXCEPTION_TEST */ - - +/* $Id$
+ */
+/*
+ * PJLIB - PJ Foundation Library
+ * (C)2003-2005 Benny Prijono <bennylp@bulukucing.org>
+ *
+ * Author:
+ * Benny Prijono <bennylp@bulukucing.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+#include "test.h"
+
+
+/**
+ * \page page_pjlib_exception_test Test: Exception Handling
+ *
+ * This file provides implementation of \b exception_test(). It tests the
+ * functionality of the exception handling API.
+ *
+ * @note This test use static ID not acquired through proper registration.
+ * This is not recommended, since it may create ID collissions.
+ *
+ * \section exception_test_sec Scope of the Test
+ *
+ * Some scenarios tested:
+ * - no exception situation
+ * - basic TRY/CATCH
+ * - multiple exception handlers
+ * - default handlers
+ *
+ *
+ * This file is <b>pjlib-test/exception.c</b>
+ *
+ * \include pjlib-test/exception.c
+ */
+
+
+#if INCLUDE_EXCEPTION_TEST
+
+#include <pjlib.h>
+
+#define ID_1 1
+#define ID_2 2
+
+static int throw_id_1(void)
+{
+ PJ_THROW( ID_1 );
+ return -1;
+}
+
+static int throw_id_2(void)
+{
+ PJ_THROW( ID_2 );
+ return -1;
+}
+
+
+static int test(void)
+{
+ PJ_USE_EXCEPTION;
+ int rc = 0;
+
+ /*
+ * No exception situation.
+ */
+ PJ_TRY {
+ rc = rc;
+ }
+ PJ_CATCH( ID_1 ) {
+ rc = -2;
+ }
+ PJ_DEFAULT {
+ rc = -3;
+ }
+ PJ_END;
+
+ if (rc != 0)
+ return rc;
+
+
+ /*
+ * Basic TRY/CATCH
+ */
+ PJ_TRY {
+ rc = throw_id_1();
+
+ // should not reach here.
+ rc = -10;
+ }
+ PJ_CATCH( ID_1 ) {
+ if (!rc) rc = 0;
+ }
+ PJ_DEFAULT {
+ int id = PJ_GET_EXCEPTION();
+ PJ_LOG(3,("", "...error: got unexpected exception %d (%s)",
+ id, pj_exception_id_name(id)));
+ if (!rc) rc = -20;
+ }
+ PJ_END;
+
+ if (rc != 0)
+ return rc;
+
+ /*
+ * Multiple exceptions handlers
+ */
+ PJ_TRY {
+ rc = throw_id_2();
+ // should not reach here.
+ rc = -25;
+ }
+ PJ_CATCH( ID_1 ) {
+ if (!rc) rc = -30;
+ }
+ PJ_CATCH( ID_2 ) {
+ if (!rc) rc = 0;
+ }
+ PJ_DEFAULT {
+ if (!rc) rc = -40;
+ }
+ PJ_END;
+
+ if (rc != 0)
+ return rc;
+
+ /*
+ * Test default handler.
+ */
+ PJ_TRY {
+ rc = throw_id_1();
+ // should not reach here
+ rc = -50;
+ }
+ PJ_CATCH( ID_2 ) {
+ if (!rc) rc = -60;
+ }
+ PJ_DEFAULT {
+ if (!rc) rc = 0;
+ }
+ PJ_END;
+
+ if (rc != 0)
+ return rc;
+
+ return 0;
+}
+
+int exception_test(void)
+{
+ int i, rc;
+ enum { LOOP = 10 };
+
+ for (i=0; i<LOOP; ++i) {
+ if ((rc=test()) != 0) {
+ PJ_LOG(3,("", "...failed at i=%d (rc=%d)", i, rc));
+ return rc;
+ }
+ }
+ return 0;
+}
+
+#else
+/* To prevent warning about "translation unit is empty"
+ * when this test is disabled.
+ */
+int dummy_exception_test;
+#endif /* INCLUDE_EXCEPTION_TEST */
+
+
|