[gjs: 7/9] test: Split test utility function into file



commit 7b420cf3f1fce7433931e2bb4017655cc4c1d93b
Author: Philip Chimento <philip chimento gmail com>
Date:   Wed Aug 29 23:17:23 2018 -0400

    test: Split test utility function into file
    
    This utility function depends only on JSAPI so we'll split it into a
    separate file that doesn't use any GjsContext API.

 Makefile-test.am            |  2 ++
 test/gjs-test-call-args.cpp |  5 +++--
 test/gjs-test-common.cpp    | 45 +++++++++++++++++++++++++++++++++++++++++++++
 test/gjs-test-common.h      | 31 +++++++++++++++++++++++++++++++
 test/gjs-test-utils.cpp     | 23 ++---------------------
 test/gjs-test-utils.h       |  2 --
 6 files changed, 83 insertions(+), 25 deletions(-)
---
diff --git a/Makefile-test.am b/Makefile-test.am
index 58901cbd..c251f1cc 100644
--- a/Makefile-test.am
+++ b/Makefile-test.am
@@ -74,6 +74,8 @@ gjs_tests_gtester_LDADD =     \
 
 gjs_tests_gtester_SOURCES =                            \
        test/gjs-tests.cpp                              \
+       test/gjs-test-common.cpp                        \
+       test/gjs-test-common.h                          \
        test/gjs-test-utils.cpp                         \
        test/gjs-test-utils.h                           \
        test/gjs-test-call-args.cpp                     \
diff --git a/test/gjs-test-call-args.cpp b/test/gjs-test-call-args.cpp
index a2a7f799..d62d86e6 100644
--- a/test/gjs-test-call-args.cpp
+++ b/test/gjs-test-call-args.cpp
@@ -5,6 +5,7 @@
 #include "gjs/context.h"
 #include "gjs/jsapi-util-args.h"
 #include "gjs/jsapi-wrapper.h"
+#include "test/gjs-test-common.h"
 #include "test/gjs-test-utils.h"
 
 #define assert_match(str, pattern)                                            \
@@ -271,7 +272,7 @@ run_code(GjsUnitTestFixture *fx,
     JS::RootedValue ignored(fx->cx);
     bool ok = JS::Evaluate(fx->cx, options, script, strlen(script), &ignored);
 
-    g_assert_null(gjs_unit_test_exception_message(fx));
+    g_assert_null(gjs_test_get_exception_message(fx->cx));
     g_assert_true(ok);
 }
 
@@ -287,7 +288,7 @@ run_code_expect_exception(GjsUnitTestFixture *fx,
     JS::RootedValue ignored(fx->cx);
     bool ok = JS::Evaluate(fx->cx, options, script, strlen(script), &ignored);
     g_assert_false(ok);
-    GjsAutoChar message = gjs_unit_test_exception_message(fx);
+    GjsAutoChar message = gjs_test_get_exception_message(fx->cx);
     g_assert_nonnull(message);
 
     /* Cheap way to shove an expected exception message into the data argument */
diff --git a/test/gjs-test-common.cpp b/test/gjs-test-common.cpp
new file mode 100644
index 00000000..a4158e55
--- /dev/null
+++ b/test/gjs-test-common.cpp
@@ -0,0 +1,45 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright © 2018 Philip Chimento
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#include <glib.h>
+
+#include "gjs/jsapi-wrapper.h"
+#include "test/gjs-test-common.h"
+
+char* gjs_test_get_exception_message(JSContext* cx) {
+    if (!JS_IsExceptionPending(cx))
+        return nullptr;
+
+    JS::RootedValue v_exc(cx);
+    g_assert_true(JS_GetPendingException(cx, &v_exc));
+    g_assert_true(v_exc.isObject());
+
+    JS::RootedObject exc(cx, &v_exc.toObject());
+    JSErrorReport* report = JS_ErrorFromException(cx, exc);
+    g_assert_nonnull(report);
+
+    char* retval = g_strdup(report->message().c_str());
+    g_assert_nonnull(retval);
+    JS_ClearPendingException(cx);
+    return retval;
+}
diff --git a/test/gjs-test-common.h b/test/gjs-test-common.h
new file mode 100644
index 00000000..ad0c493b
--- /dev/null
+++ b/test/gjs-test-common.h
@@ -0,0 +1,31 @@
+/* -*- mode: C++; c-basic-offset: 4; indent-tabs-mode: nil; -*- */
+/*
+ * Copyright © 2018 Philip Chimento
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+ * IN THE SOFTWARE.
+ */
+
+#ifndef TEST_GJS_TEST_COMMON_H_
+#define TEST_GJS_TEST_COMMON_H_
+
+#include "gjs/jsapi-wrapper.h"
+
+char* gjs_test_get_exception_message(JSContext* cx);
+
+#endif  // TEST_GJS_TEST_COMMON_H_
diff --git a/test/gjs-test-utils.cpp b/test/gjs-test-utils.cpp
index 127d2baf..d60929d4 100644
--- a/test/gjs-test-utils.cpp
+++ b/test/gjs-test-utils.cpp
@@ -35,6 +35,7 @@
 #include "gjs/jsapi-util.h"
 #include "gjs/jsapi-wrapper.h"
 #include "gjs-test-utils.h"
+#include "test/gjs-test-common.h"
 
 void
 gjs_unit_test_fixture_setup(GjsUnitTestFixture *fx,
@@ -52,7 +53,7 @@ gjs_unit_test_fixture_setup(GjsUnitTestFixture *fx,
 void
 gjs_unit_test_destroy_context(GjsUnitTestFixture *fx)
 {
-    GjsAutoChar message = gjs_unit_test_exception_message(fx);
+    GjsAutoChar message = gjs_test_get_exception_message(fx->cx);
     if (message)
         g_printerr("**\n%s\n", message.get());
 
@@ -68,23 +69,3 @@ gjs_unit_test_fixture_teardown(GjsUnitTestFixture *fx,
 {
     gjs_unit_test_destroy_context(fx);
 }
-
-char *
-gjs_unit_test_exception_message(GjsUnitTestFixture *fx)
-{
-    if (!JS_IsExceptionPending(fx->cx))
-        return nullptr;
-
-    JS::RootedValue v_exc(fx->cx);
-    g_assert_true(JS_GetPendingException(fx->cx, &v_exc));
-    g_assert_true(v_exc.isObject());
-
-    JS::RootedObject exc(fx->cx, &v_exc.toObject());
-    JSErrorReport *report = JS_ErrorFromException(fx->cx, exc);
-    g_assert_nonnull(report);
-
-    char *retval = g_strdup(report->message().c_str());
-    g_assert_nonnull(retval);
-    JS_ClearPendingException(fx->cx);
-    return retval;
-}
diff --git a/test/gjs-test-utils.h b/test/gjs-test-utils.h
index c9ba764e..977f4276 100644
--- a/test/gjs-test-utils.h
+++ b/test/gjs-test-utils.h
@@ -44,8 +44,6 @@ void gjs_unit_test_destroy_context(GjsUnitTestFixture *fx);
 void gjs_unit_test_fixture_teardown(GjsUnitTestFixture *fx,
                                     gconstpointer      unused);
 
-char *gjs_unit_test_exception_message(GjsUnitTestFixture *fx);
-
 void gjs_test_add_tests_for_coverage ();
 
 void gjs_test_add_tests_for_parse_call_args(void);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]