view modules/js/test/main.cpp @ 612:18ec7f4fc3de

Js: new style, closes #685
author David Demelier <markand@malikania.fr>
date Mon, 21 Aug 2017 11:08:49 +0200
parents f48bb09bccc7
children 266f32919d0a
line wrap: on
line source

/*
 * main.cpp -- test Duktape extras
 *
 * Copyright (c) 2016 David Demelier <markand@malikania.fr>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 */

#define BOOST_TEST_MODULE "Duktape"
#include <boost/test/unit_test.hpp>

#include <duktape.hpp>

/*
 * Standard exceptions.
 * --------------------------------------------------------
 */

BOOST_AUTO_TEST_SUITE(standard_exceptions)

BOOST_AUTO_TEST_CASE(error)
{
    dukx_unique_context ctx;

    duk_push_c_function(ctx, [] (duk_context* ctx) -> duk_idx_t {
        return dukx_throw(ctx, dukx_error("error thrown"));
    }, 0);
    duk_put_global_string(ctx, "f");
    duk_peval_string(ctx,
        "try {"
        "  f();"
        "} catch (ex) {"
        "  name = ex.name;"
        "  message = ex.message;"
        "  instance = (ex instanceof Error);"
        "}"
    );

    duk_get_global_string(ctx, "name");
    BOOST_REQUIRE_EQUAL("Error", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "message");
    BOOST_REQUIRE_EQUAL("error thrown", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "instance");
    BOOST_REQUIRE(duk_get_boolean(ctx, -1));
}

BOOST_AUTO_TEST_CASE(eval_error)
{
    dukx_unique_context ctx;

    duk_push_c_function(ctx, [] (duk_context* ctx) -> duk_idx_t {
        return dukx_throw(ctx, dukx_eval_error("error thrown"));
    }, 0);
    duk_put_global_string(ctx, "f");
    duk_peval_string(ctx,
        "try {"
        "  f();"
        "} catch (ex) {"
        "  name = ex.name;"
        "  message = ex.message;"
        "  instance = (ex instanceof EvalError);"
        "}"
    );

    duk_get_global_string(ctx, "name");
    BOOST_REQUIRE_EQUAL("EvalError", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "message");
    BOOST_REQUIRE_EQUAL("error thrown", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "instance");
    BOOST_REQUIRE(duk_get_boolean(ctx, -1));
}

BOOST_AUTO_TEST_CASE(range_error)
{
    dukx_unique_context ctx;

    duk_push_c_function(ctx, [] (duk_context* ctx) -> duk_idx_t {
        return dukx_throw(ctx, dukx_range_error("error thrown"));
    }, 0);
    duk_put_global_string(ctx, "f");
    duk_peval_string(ctx,
        "try {"
        "  f();"
        "} catch (ex) {"
        "  name = ex.name;"
        "  message = ex.message;"
        "  instance = (ex instanceof RangeError);"
        "}"
    );

    duk_get_global_string(ctx, "name");
    BOOST_REQUIRE_EQUAL("RangeError", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "message");
    BOOST_REQUIRE_EQUAL("error thrown", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "instance");
    BOOST_REQUIRE(duk_get_boolean(ctx, -1));
}

BOOST_AUTO_TEST_CASE(reference_error)
{
    dukx_unique_context ctx;

    duk_push_c_function(ctx, [] (duk_context* ctx) -> duk_idx_t {
        return dukx_throw(ctx, dukx_reference_error("error thrown"));
    }, 0);
    duk_put_global_string(ctx, "f");
    duk_peval_string(ctx,
        "try {"
        "  f();"
        "} catch (ex) {"
        "  name = ex.name;"
        "  message = ex.message;"
        "  instance = (ex instanceof ReferenceError);"
        "}"
    );

    duk_get_global_string(ctx, "name");
    BOOST_REQUIRE_EQUAL("ReferenceError", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "message");
    BOOST_REQUIRE_EQUAL("error thrown", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "instance");
    BOOST_REQUIRE(duk_get_boolean(ctx, -1));
}

BOOST_AUTO_TEST_CASE(syntax_error)
{
    dukx_unique_context ctx;

    duk_push_c_function(ctx, [] (duk_context* ctx) -> duk_idx_t {
        return dukx_throw(ctx, dukx_syntax_error("error thrown"));
    }, 0);
    duk_put_global_string(ctx, "f");
    duk_peval_string(ctx,
        "try {"
        "  f();"
        "} catch (ex) {"
        "  name = ex.name;"
        "  message = ex.message;"
        "  instance = (ex instanceof SyntaxError);"
        "}"
    );

    duk_get_global_string(ctx, "name");
    BOOST_REQUIRE_EQUAL("SyntaxError", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "message");
    BOOST_REQUIRE_EQUAL("error thrown", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "instance");
    BOOST_REQUIRE(duk_get_boolean(ctx, -1));
}

BOOST_AUTO_TEST_CASE(type_error)
{
    dukx_unique_context ctx;

    duk_push_c_function(ctx, [] (duk_context* ctx) -> duk_idx_t {
        return dukx_throw(ctx, dukx_type_error("error thrown"));
    }, 0);
    duk_put_global_string(ctx, "f");
    duk_peval_string(ctx,
        "try {"
        "  f();"
        "} catch (ex) {"
        "  name = ex.name;"
        "  message = ex.message;"
        "  instance = (ex instanceof TypeError);"
        "}"
    );

    duk_get_global_string(ctx, "name");
    BOOST_REQUIRE_EQUAL("TypeError", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "message");
    BOOST_REQUIRE_EQUAL("error thrown", dukx_get_std_string(ctx, -1));
    duk_get_global_string(ctx, "instance");
    BOOST_REQUIRE(duk_get_boolean(ctx, -1));
}

BOOST_AUTO_TEST_CASE(uriError)
{
}

BOOST_AUTO_TEST_SUITE_END()