Commit 7b420cf3 authored by Philip Chimento's avatar Philip Chimento 🚮

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.
parent cf57f25f
......@@ -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 \
......
......@@ -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 */
......
/* -*- 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;
}
/* -*- 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_
......@@ -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;
}
......@@ -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);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment