Ticket #3848: conversionsfix.2.patch

File conversionsfix.2.patch, 4.2 KB (added by echotangoecho, 7 years ago)

Add tests (just adapted the i32 and u32 conversions tests).

  • source/scriptinterface/ScriptConversions.cpp

    diff --git a/source/scriptinterface/ScriptConversions.cpp b/source/scriptinterface/ScriptConversions.cpp
    index fd75a8b497..b1a89c6c1a 100644
    a b template<> bool ScriptInterface::FromJSVal<u8>(JSContext* cx, JS::HandleValue v,  
    116116    return true;
    117117}
    118118
    119 template<> bool ScriptInterface::FromJSVal<long>(JSContext* cx, JS::HandleValue v, long& out)
     119template<> bool ScriptInterface::FromJSVal<i64>(JSContext* cx, JS::HandleValue v, i64& out)
    120120{
    121121    JSAutoRequest rq(cx);
    122122    i64 tmp;
    123123    bool ok = JS::ToInt64(cx, v, &tmp);
    124     out = (long)tmp;
     124    out = (i64)tmp;
    125125    return ok;
    126126}
    127127
    128 template<> bool ScriptInterface::FromJSVal<unsigned long>(JSContext* cx, JS::HandleValue v, unsigned long& out)
     128template<> bool ScriptInterface::FromJSVal<u64>(JSContext* cx, JS::HandleValue v, u64& out)
    129129{
    130130    JSAutoRequest rq(cx);
    131131    u64 tmp;
    132132    bool ok = JS::ToUint64(cx, v, &tmp);
    133     out = (unsigned long)tmp;
     133    out = (u64)tmp;
    134134    return ok;
    135135}
    136136
    template<> void ScriptInterface::ToJSVal<u32>(JSContext* UNUSED(cx), JS::Mutable  
    294294    ret.set(JS::NumberValue(val));
    295295}
    296296
    297 template<> void ScriptInterface::ToJSVal<long>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const long& val)
     297template<> void ScriptInterface::ToJSVal<i64>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const i64& val)
    298298{
    299299    ret.set(JS::NumberValue((int)val));
    300300}
    301301
    302 template<> void ScriptInterface::ToJSVal<unsigned long>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const unsigned long& val)
     302template<> void ScriptInterface::ToJSVal<u64>(JSContext* UNUSED(cx), JS::MutableHandleValue ret, const u64& val)
    303303{
    304304    ret.set(JS::NumberValue((int)val));
    305305}
  • source/scriptinterface/tests/test_ScriptConversions.h

    diff --git a/source/scriptinterface/tests/test_ScriptConversions.h b/source/scriptinterface/tests/test_ScriptConversions.h
    index 374f1c99a0..2aeee476b6 100644
    a b  
    1 /* Copyright (C) 2016 Wildfire Games.
     1/* Copyright (C) 2017 Wildfire Games.
    22 * This file is part of 0 A.D.
    33 *
    44 * 0 A.D. is free software: you can redistribute it and/or modify
    public:  
    141141            roundtrip<u32>(1073741824, "1073741824"); // JSVAL_INT_MAX+1
    142142        }
    143143
     144        roundtrip<i64>(0, "0");
     145        roundtrip<i64>(123, "123");
     146        roundtrip<i64>(-123, "-123");
     147        roundtrip<i64>(1073741822, "1073741822"); // JSVAL_INT_MAX-1
     148        roundtrip<i64>(1073741823, "1073741823"); // JSVAL_INT_MAX
     149        roundtrip<i64>(-1073741823, "-1073741823"); // JSVAL_INT_MIN+1
     150        roundtrip<i64>(-1073741824, "-1073741824"); // JSVAL_INT_MIN
     151        roundtrip<i64>(1073741824, "1073741824"); // JSVAL_INT_MAX+1
     152        roundtrip<i64>(-1073741825, "-1073741825"); // JSVAL_INT_MIN-1
     153
     154        roundtrip<u64>(0, "0");
     155        roundtrip<u64>(123, "123");
     156        roundtrip<u64>(1073741822, "1073741822"); // JSVAL_INT_MAX-1
     157        roundtrip<u64>(1073741823, "1073741823"); // JSVAL_INT_MAX
     158        roundtrip<u64>(1073741824, "1073741824"); // JSVAL_INT_MAX+1
     159
    144160        std::string s1 = "test";
    145161        s1[1] = '\0';
    146162        std::string s2 = "тест";
    public:  
    202218        TS_ASSERT(val6.isInt32());
    203219        TS_ASSERT(val7.isInt32());
    204220        TS_ASSERT(val8.isDouble());
     221
     222        JS::RootedValue val9(cx), val10(cx), val11(cx), val12(cx), val13(cx), val14(cx), val15(cx), val16(cx), val17(cx);
     223        ScriptInterface::ToJSVal<i64>(cx, &val9, 0);
     224        ScriptInterface::ToJSVal<i64>(cx, &val10, 2147483646); // JSVAL_INT_MAX-1
     225        ScriptInterface::ToJSVal<i64>(cx, &val11, 2147483647); // JSVAL_INT_MAX
     226        ScriptInterface::ToJSVal<i64>(cx, &val12, -2147483647); // JSVAL_INT_MIN+1
     227        ScriptInterface::ToJSVal<i64>(cx, &val13, -(i64)2147483648u); // JSVAL_INT_MIN
     228        TS_ASSERT(val9.isInt32());
     229        TS_ASSERT(val10.isInt32());
     230        TS_ASSERT(val11.isInt32());
     231        TS_ASSERT(val12.isInt32());
     232        TS_ASSERT(val13.isInt32());
     233
     234        ScriptInterface::ToJSVal<u64>(cx, &val14, 0);
     235        ScriptInterface::ToJSVal<u64>(cx, &val15, 2147483646u); // JSVAL_INT_MAX-1
     236        ScriptInterface::ToJSVal<u64>(cx, &val16, 2147483647u); // JSVAL_INT_MAX
     237        ScriptInterface::ToJSVal<u64>(cx, &val17, 2147483648u); // JSVAL_INT_MAX+1
     238        TS_ASSERT(val14.isInt32());
     239        TS_ASSERT(val15.isInt32());
     240        TS_ASSERT(val16.isInt32());
     241        TS_ASSERT(val17.isInt32());
    205242    }
    206243
    207244    void test_nonfinite()