[gjs/wip/ptomato/mozjs31prep: 2/3] tests: Consolidate fixture code
- From: Philip Chimento <pchimento src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gjs/wip/ptomato/mozjs31prep: 2/3] tests: Consolidate fixture code
- Date: Mon, 17 Oct 2016 06:13:02 +0000 (UTC)
commit 7c4c9d45de7c54f4cdf890f16bb1ced8ae4bfe62
Author: Philip Chimento <philip chimento gmail com>
Date: Sun Oct 16 23:02:50 2016 -0700
tests: Consolidate fixture code
gjs-tests.cpp used a similar test fixture to gjs-test-call-args.cpp, so
we consolidate the two into gjs-test-utils.h.
Makefile-test.am | 2 +-
test/gjs-test-call-args.cpp | 52 +--------
test/{gjs-tests-add-funcs.h => gjs-test-utils.h} | 18 +++-
test/gjs-tests.cpp | 127 +++++++++++-----------
4 files changed, 87 insertions(+), 112 deletions(-)
---
diff --git a/Makefile-test.am b/Makefile-test.am
index 428fc8f..e07f4aa 100644
--- a/Makefile-test.am
+++ b/Makefile-test.am
@@ -91,7 +91,7 @@ gjs_tests_LDADD = \
gjs_tests_SOURCES = \
test/gjs-tests.cpp \
- test/gjs-tests-add-funcs.h \
+ test/gjs-test-utils.h \
test/gjs-test-call-args.cpp \
test/gjs-test-coverage.cpp \
mock-js-resources.c \
diff --git a/test/gjs-test-call-args.cpp b/test/gjs-test-call-args.cpp
index ea1ffe6..cd9dccd 100644
--- a/test/gjs-test-call-args.cpp
+++ b/test/gjs-test-call-args.cpp
@@ -5,6 +5,7 @@
#include "gjs/compat.h"
#include "gjs/context.h"
#include "gjs/jsapi-util-args.h"
+#include "test/gjs-test-utils.h"
#define assert_match(str, pattern) \
G_STMT_START { \
@@ -15,13 +16,6 @@
} \
} G_STMT_END
-typedef struct {
- GjsContext *gjs_context;
- JSContext *cx;
- JSCompartment *compartment;
- char *message; /* Thrown exception message */
-} GjsUnitTestFixture;
-
typedef enum _test_enum {
ZERO,
ONE,
@@ -249,53 +243,17 @@ static JSFunctionSpec native_test_funcs[] = {
};
static void
-unit_test_error_reporter(JSContext *cx,
- const char *message,
- JSErrorReport *report)
-{
- GjsContext *gjs_context = gjs_context_get_current();
- GjsUnitTestFixture *fx =
- (GjsUnitTestFixture *) g_object_get_data(G_OBJECT(gjs_context),
- "test fixture");
- g_free(fx->message);
- fx->message = g_strdup(message);
-}
-
-static void
setup(GjsUnitTestFixture *fx,
gconstpointer unused)
{
- fx->gjs_context = gjs_context_new();
- fx->cx = (JSContext *) gjs_context_get_native_context(fx->gjs_context);
-
- /* This is for shoving private data into the error reporter callback */
- g_object_set_data(G_OBJECT(fx->gjs_context), "test fixture", fx);
- JS_SetErrorReporter(fx->cx, unit_test_error_reporter);
-
- JS_BeginRequest(fx->cx);
+ gjs_unit_test_fixture_setup(fx, unused);
JS::RootedObject global(fx->cx, gjs_get_global_object(fx->cx));
- fx->compartment = JS_EnterCompartment(fx->cx, global);
-
bool success = JS_DefineFunctions(fx->cx, global, native_test_funcs);
g_assert_true(success);
}
static void
-teardown(GjsUnitTestFixture *fx,
- gconstpointer unused)
-{
- JS_LeaveCompartment(fx->cx, fx->compartment);
- JS_EndRequest(fx->cx);
-
- g_object_unref(fx->gjs_context);
-
- if (fx->message != NULL)
- g_printerr("**\n%s\n", fx->message);
- g_free(fx->message);
-}
-
-static void
run_code(GjsUnitTestFixture *fx,
gconstpointer code)
{
@@ -334,13 +292,15 @@ run_code_expect_exception(GjsUnitTestFixture *fx,
expected_msg += 2;
assert_match(fx->message, expected_msg);
}
+ g_clear_pointer(&fx->message, g_free);
}
void
gjs_test_add_tests_for_parse_call_args(void)
{
-#define ADD_CALL_ARGS_TEST_BASE(path, code, f) \
- g_test_add("/callargs/" path, GjsUnitTestFixture, code, setup, f, teardown)
+#define ADD_CALL_ARGS_TEST_BASE(path, code, f) \
+ g_test_add("/callargs/" path, GjsUnitTestFixture, code, setup, f, \
+ gjs_unit_test_fixture_teardown)
#define ADD_CALL_ARGS_TEST(path, code) \
ADD_CALL_ARGS_TEST_BASE(path, code, run_code)
#define ADD_CALL_ARGS_TEST_XFAIL(path, code) \
diff --git a/test/gjs-tests-add-funcs.h b/test/gjs-test-utils.h
similarity index 64%
rename from test/gjs-tests-add-funcs.h
rename to test/gjs-test-utils.h
index 23ae846..92e2d9f 100644
--- a/test/gjs-tests-add-funcs.h
+++ b/test/gjs-test-utils.h
@@ -17,8 +17,22 @@
*
* Authored By: Sam Spilsbury <sam endlessm com>
*/
-#ifndef GJS_TESTS_ADD_FUNCS_H
-#define GJS_TESTS_ADD_FUNCS_H
+#ifndef GJS_TEST_UTILS_H
+#define GJS_TEST_UTILS_H
+
+typedef struct _GjsUnitTestFixture GjsUnitTestFixture;
+struct _GjsUnitTestFixture {
+ GjsContext *gjs_context;
+ JSContext *cx;
+ JSCompartment *compartment;
+ char *message; /* Thrown exception message */
+};
+
+void gjs_unit_test_fixture_setup(GjsUnitTestFixture *fx,
+ gconstpointer unused);
+
+void gjs_unit_test_fixture_teardown(GjsUnitTestFixture *fx,
+ gconstpointer unused);
void gjs_test_add_tests_for_coverage ();
diff --git a/test/gjs-tests.cpp b/test/gjs-tests.cpp
index 559f810..9644528 100644
--- a/test/gjs-tests.cpp
+++ b/test/gjs-tests.cpp
@@ -28,37 +28,50 @@
#include <util/glib.h>
#include <util/crash.h>
-#include "gjs-tests-add-funcs.h"
-
-typedef struct _GjsUnitTestFixture GjsUnitTestFixture;
-
-struct _GjsUnitTestFixture {
- JSContext *context;
- GjsContext *gjs_context;
-};
+#include "gjs-test-utils.h"
static void
test_error_reporter(JSContext *context,
const char *message,
JSErrorReport *report)
{
- g_printerr("error reported by test: %s\n", message);
+ GjsContext *gjs_context = gjs_context_get_current();
+ GjsUnitTestFixture *fx =
+ (GjsUnitTestFixture *) g_object_get_data(G_OBJECT(gjs_context),
+ "test fixture");
+ g_free(fx->message);
+ fx->message = g_strdup(message);
}
-static void
-_gjs_unit_test_fixture_begin (GjsUnitTestFixture *fixture)
+void
+gjs_unit_test_fixture_setup(GjsUnitTestFixture *fx,
+ gconstpointer unused)
{
- fixture->gjs_context = gjs_context_new ();
- fixture->context = (JSContext *) gjs_context_get_native_context (fixture->gjs_context);
- JS_BeginRequest(fixture->context);
- JS_SetErrorReporter(fixture->context, test_error_reporter);
+ fx->gjs_context = gjs_context_new();
+ fx->cx = (JSContext *) gjs_context_get_native_context(fx->gjs_context);
+
+ /* This is for shoving private data into the error reporter callback */
+ g_object_set_data(G_OBJECT(fx->gjs_context), "test fixture", fx);
+ JS_SetErrorReporter(fx->cx, test_error_reporter);
+
+ JS_BeginRequest(fx->cx);
+
+ JS::RootedObject global(fx->cx, gjs_get_global_object(fx->cx));
+ fx->compartment = JS_EnterCompartment(fx->cx, global);
}
-static void
-_gjs_unit_test_fixture_finish (GjsUnitTestFixture *fixture)
+void
+gjs_unit_test_fixture_teardown(GjsUnitTestFixture *fx,
+ gconstpointer unused)
{
- JS_EndRequest(fixture->context);
- g_object_unref(fixture->gjs_context);
+ JS_LeaveCompartment(fx->cx, fx->compartment);
+ JS_EndRequest(fx->cx);
+
+ g_object_unref(fx->gjs_context);
+
+ if (fx->message != NULL)
+ g_printerr("**\n%s\n", fx->message);
+ g_free(fx->message);
}
static void
@@ -90,64 +103,45 @@ gjstest_test_func_gjs_context_construct_eval(void)
}
static void
-gjstest_test_func_gjs_jsapi_util_string_js_string_utf8(void)
+gjstest_test_func_gjs_jsapi_util_string_js_string_utf8(GjsUnitTestFixture *fx,
+ gconstpointer unused)
{
- GjsUnitTestFixture fixture;
- JSContext *context;
- JSObject *global;
-
const char *utf8_string = "\303\211\303\226 foobar \343\203\237";
char *utf8_result;
+ JS::RootedValue js_string(fx->cx);
- _gjs_unit_test_fixture_begin(&fixture);
- context = fixture.context;
- JS::RootedValue js_string(context);
- global = gjs_get_global_object(context);
- JSCompartment *oldCompartment = JS_EnterCompartment(context, global);
-
- g_assert(gjs_string_from_utf8(context, utf8_string, -1, &js_string));
+ g_assert(gjs_string_from_utf8(fx->cx, utf8_string, -1, &js_string));
g_assert(js_string.isString());
- g_assert(gjs_string_to_utf8(context, js_string, &utf8_result));
-
- JS_LeaveCompartment(context, oldCompartment);
- _gjs_unit_test_fixture_finish(&fixture);
-
+ g_assert(gjs_string_to_utf8(fx->cx, js_string, &utf8_result));
g_assert(g_str_equal(utf8_string, utf8_result));
-
g_free(utf8_result);
}
static void
-gjstest_test_func_gjs_jsapi_util_error_throw(void)
+gjstest_test_func_gjs_jsapi_util_error_throw(GjsUnitTestFixture *fx,
+ gconstpointer unused)
{
- GjsUnitTestFixture fixture;
- JSContext *context;
- JSObject *global;
JS::Value exc, value;
char *s = NULL;
int strcmp_result;
- _gjs_unit_test_fixture_begin(&fixture);
- context = fixture.context;
- global = gjs_get_global_object(context);
- JSCompartment *oldCompartment = JS_EnterCompartment(context, global);
/* Test that we can throw */
- gjs_throw(context, "This is an exception %d", 42);
+ gjs_throw(fx->cx, "This is an exception %d", 42);
- g_assert(JS_IsExceptionPending(context));
+ g_assert(JS_IsExceptionPending(fx->cx));
exc = JS::UndefinedValue();
- JS_GetPendingException(context, &exc);
+ JS_GetPendingException(fx->cx, &exc);
g_assert(!exc.isUndefined());
value = JS::UndefinedValue();
- JS_GetProperty(context, &exc.toObject(), "message",
+ JS_GetProperty(fx->cx, &exc.toObject(), "message",
&value);
g_assert(value.isString());
- gjs_string_to_utf8(context, value, &s);
+ gjs_string_to_utf8(fx->cx, value, &s);
g_assert(s != NULL);
strcmp_result = strcmp(s, "This is an exception 42");
free(s);
@@ -155,28 +149,25 @@ gjstest_test_func_gjs_jsapi_util_error_throw(void)
g_error("Exception has wrong message '%s'", s);
/* keep this around before we clear it */
- JS::RootedValue previous(context, exc);
+ JS::RootedValue previous(fx->cx, exc);
- JS_ClearPendingException(context);
+ JS_ClearPendingException(fx->cx);
- g_assert(!JS_IsExceptionPending(context));
+ g_assert(!JS_IsExceptionPending(fx->cx));
/* Check that we don't overwrite a pending exception */
- JS_SetPendingException(context, previous);
+ JS_SetPendingException(fx->cx, previous);
- g_assert(JS_IsExceptionPending(context));
+ g_assert(JS_IsExceptionPending(fx->cx));
- gjs_throw(context, "Second different exception %s", "foo");
+ gjs_throw(fx->cx, "Second different exception %s", "foo");
- g_assert(JS_IsExceptionPending(context));
+ g_assert(JS_IsExceptionPending(fx->cx));
exc = JS::UndefinedValue();
- JS_GetPendingException(context, &exc);
+ JS_GetPendingException(fx->cx, &exc);
g_assert(!exc.isUndefined());
g_assert(&exc.toObject() == &previous.toObject());
-
- JS_LeaveCompartment(context, oldCompartment);
- _gjs_unit_test_fixture_finish(&fixture);
}
static void
@@ -278,14 +269,24 @@ main(int argc,
g_test_add_func("/gjs/context/construct/destroy", gjstest_test_func_gjs_context_construct_destroy);
g_test_add_func("/gjs/context/construct/eval", gjstest_test_func_gjs_context_construct_eval);
- g_test_add_func("/gjs/jsapi/util/error/throw", gjstest_test_func_gjs_jsapi_util_error_throw);
- g_test_add_func("/gjs/jsapi/util/string/js/string/utf8",
gjstest_test_func_gjs_jsapi_util_string_js_string_utf8);
g_test_add_func("/gjs/jsutil/strip_shebang/no_shebang",
gjstest_test_strip_shebang_no_advance_for_no_shebang);
g_test_add_func("/gjs/jsutil/strip_shebang/have_shebang",
gjstest_test_strip_shebang_advance_for_shebang);
g_test_add_func("/gjs/jsutil/strip_shebang/only_shebang",
gjstest_test_strip_shebang_return_null_for_just_shebang);
g_test_add_func("/util/glib/strv/concat/null", gjstest_test_func_util_glib_strv_concat_null);
g_test_add_func("/util/glib/strv/concat/pointers", gjstest_test_func_util_glib_strv_concat_pointers);
+#define ADD_JSAPI_UTIL_TEST(path, func) \
+ g_test_add("/gjs/jsapi/util/" path, GjsUnitTestFixture, NULL, \
+ gjs_unit_test_fixture_setup, func, \
+ gjs_unit_test_fixture_teardown)
+
+ ADD_JSAPI_UTIL_TEST("error/throw",
+ gjstest_test_func_gjs_jsapi_util_error_throw);
+ ADD_JSAPI_UTIL_TEST("string/js/string/utf8",
+ gjstest_test_func_gjs_jsapi_util_string_js_string_utf8);
+
+#undef ADD_JSAPI_UTIL_TEST
+
gjs_test_add_tests_for_coverage ();
gjs_test_add_tests_for_parse_call_args();
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]