Changeset 54773 in webkit


Ignore:
Timestamp:
Feb 15, 2010 4:08:42 AM (14 years ago)
Author:
eric@webkit.org
Message:

2010-02-15 Jedrzej Nowacki <jedrzej.nowacki@nokia.com>

Reviewed by Simon Hausmann.

Fix QScriptValue::toIntXX methods.

More ECMA Script compliance.

[Qt] QScriptValue::toIntXX returns incorrect values
https://bugs.webkit.org/show_bug.cgi?id=34847

  • qt/api/qscriptvalue_p.h: (QScriptValuePrivate::toInteger): (QScriptValuePrivate::toInt32): (QScriptValuePrivate::toUInt32): (QScriptValuePrivate::toUInt16):
  • qt/tests/qscriptvalue/tst_qscriptvalue.h:
  • qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp: (tst_QScriptValue::toInteger_initData): (tst_QScriptValue::toInteger_makeData): (tst_QScriptValue::toInteger_test): (tst_QScriptValue::toInt32_initData): (tst_QScriptValue::toInt32_makeData): (tst_QScriptValue::toInt32_test): (tst_QScriptValue::toUInt32_initData): (tst_QScriptValue::toUInt32_makeData): (tst_QScriptValue::toUInt32_test): (tst_QScriptValue::toUInt16_initData): (tst_QScriptValue::toUInt16_makeData): (tst_QScriptValue::toUInt16_test):
Location:
trunk/JavaScriptCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/JavaScriptCore/ChangeLog

    r54765 r54773  
     12010-02-15  Jedrzej Nowacki  <jedrzej.nowacki@nokia.com>
     2
     3        Reviewed by Simon Hausmann.
     4
     5        Fix QScriptValue::toIntXX methods.
     6
     7        More ECMA Script compliance.
     8
     9        [Qt] QScriptValue::toIntXX returns incorrect values
     10        https://bugs.webkit.org/show_bug.cgi?id=34847
     11
     12        * qt/api/qscriptvalue_p.h:
     13        (QScriptValuePrivate::toInteger):
     14        (QScriptValuePrivate::toInt32):
     15        (QScriptValuePrivate::toUInt32):
     16        (QScriptValuePrivate::toUInt16):
     17        * qt/tests/qscriptvalue/tst_qscriptvalue.h:
     18        * qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp:
     19        (tst_QScriptValue::toInteger_initData):
     20        (tst_QScriptValue::toInteger_makeData):
     21        (tst_QScriptValue::toInteger_test):
     22        (tst_QScriptValue::toInt32_initData):
     23        (tst_QScriptValue::toInt32_makeData):
     24        (tst_QScriptValue::toInt32_test):
     25        (tst_QScriptValue::toUInt32_initData):
     26        (tst_QScriptValue::toUInt32_makeData):
     27        (tst_QScriptValue::toUInt32_test):
     28        (tst_QScriptValue::toUInt16_initData):
     29        (tst_QScriptValue::toUInt16_makeData):
     30        (tst_QScriptValue::toUInt16_test):
     31
    1322010-02-14  Laszlo Gombos  <laszlo.1.gombos@nokia.com>
    233
  • trunk/JavaScriptCore/qt/api/qscriptvalue_p.h

    r54605 r54773  
    526526qsreal QScriptValuePrivate::toInteger() const
    527527{
    528     // TODO it is not true implementation!
    529     return toNumber();
     528    qsreal result = toNumber();
     529    if (qIsNaN(result))
     530        return 0;
     531    if (qIsInf(result))
     532        return result;
     533    return (result > 0) ? qFloor(result) : -1 * qFloor(-result);
    530534}
    531535
    532536qint32 QScriptValuePrivate::toInt32() const
    533537{
    534     // TODO it is not true implementation!
    535     return toNumber();
     538    qsreal result = toInteger();
     539    // Orginaly it should look like that (result == 0 || qIsInf(result) || qIsNaN(result)), but
     540    // some of these operation are invoked in toInteger subcall.
     541    if (qIsInf(result))
     542        return 0;
     543    return result;
    536544}
    537545
    538546quint32 QScriptValuePrivate::toUInt32() const
    539547{
    540     // TODO it is not true implementation!
    541     return toNumber();
     548    qsreal result = toInteger();
     549    // Orginaly it should look like that (result == 0 || qIsInf(result) || qIsNaN(result)), but
     550    // some of these operation are invoked in toInteger subcall.
     551    if (qIsInf(result))
     552        return 0;
     553    return result;
    542554}
    543555
    544556quint16 QScriptValuePrivate::toUInt16() const
    545557{
    546     // TODO it is not true implementation!
    547     return toNumber();
     558    return toInt32();
    548559}
    549560
  • trunk/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue.h

    r54605 r54773  
    8686    void toBoolean();
    8787
     88    void toInteger_data();
     89    void toInteger();
     90
     91    void toInt32_data();
     92    void toInt32();
     93
     94    void toUInt32_data();
     95    void toUInt32();
     96
     97    void toUInt16_data();
     98    void toUInt16();
     99
    88100private:
    89101    typedef void (tst_QScriptValue::*InitDataFunction)();
     
    147159    void toBoolean_test(const char*, const QScriptValue&);
    148160
     161    void toInteger_initData();
     162    void toInteger_makeData(const char*);
     163    void toInteger_test(const char*, const QScriptValue&);
     164
     165    void toInt32_initData();
     166    void toInt32_makeData(const char*);
     167    void toInt32_test(const char*, const QScriptValue&);
     168
     169    void toUInt32_initData();
     170    void toUInt32_makeData(const char*);
     171    void toUInt32_test(const char*, const QScriptValue&);
     172
     173    void toUInt16_initData();
     174    void toUInt16_makeData(const char*);
     175    void toUInt16_test(const char*, const QScriptValue&);
     176
    149177private:
    150178    QScriptEngine* engine;
  • trunk/JavaScriptCore/qt/tests/qscriptvalue/tst_qscriptvalue_generated.cpp

    r54605 r54773  
    941941
    942942DEFINE_TEST_FUNCTION(toBoolean)
     943
     944
     945void tst_QScriptValue::toInteger_initData()
     946{
     947    QTest::addColumn<qsreal>("expected");
     948    initScriptValues();
     949}
     950
     951void tst_QScriptValue::toInteger_makeData(const char* expr)
     952{
     953    static QHash<QString, qsreal> toInteger;
     954    if (toInteger.isEmpty()) {
     955        toInteger.insert("QScriptValue()", 0);
     956        toInteger.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
     957        toInteger.insert("QScriptValue(QScriptValue::NullValue)", 0);
     958        toInteger.insert("QScriptValue(true)", 1);
     959        toInteger.insert("QScriptValue(false)", 0);
     960        toInteger.insert("QScriptValue(int(122))", 122);
     961        toInteger.insert("QScriptValue(uint(124))", 124);
     962        toInteger.insert("QScriptValue(0)", 0);
     963        toInteger.insert("QScriptValue(0.0)", 0);
     964        toInteger.insert("QScriptValue(123.0)", 123);
     965        toInteger.insert("QScriptValue(6.37e-8)", 0);
     966        toInteger.insert("QScriptValue(-6.37e-8)", 0);
     967        toInteger.insert("QScriptValue(0x43211234)", 1126240820);
     968        toInteger.insert("QScriptValue(0x10000)", 65536);
     969        toInteger.insert("QScriptValue(0x10001)", 65537);
     970        toInteger.insert("QScriptValue(qSNaN())", 0);
     971        toInteger.insert("QScriptValue(qQNaN())", 0);
     972        toInteger.insert("QScriptValue(qInf())", qInf());
     973        toInteger.insert("QScriptValue(-qInf())", qInf());
     974        toInteger.insert("QScriptValue(\"NaN\")", 0);
     975        toInteger.insert("QScriptValue(\"Infinity\")", qInf());
     976        toInteger.insert("QScriptValue(\"-Infinity\")", qInf());
     977        toInteger.insert("QScriptValue(\"ciao\")", 0);
     978        toInteger.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
     979        toInteger.insert("QScriptValue(QString(\"\"))", 0);
     980        toInteger.insert("QScriptValue(QString())", 0);
     981        toInteger.insert("QScriptValue(QString(\"0\"))", 0);
     982        toInteger.insert("QScriptValue(QString(\"123\"))", 123);
     983        toInteger.insert("QScriptValue(QString(\"12.4\"))", 12);
     984        toInteger.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
     985        toInteger.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
     986        toInteger.insert("QScriptValue(0, true)", 1);
     987        toInteger.insert("QScriptValue(0, false)", 0);
     988        toInteger.insert("QScriptValue(0, int(122))", 122);
     989        toInteger.insert("QScriptValue(0, uint(124))", 124);
     990        toInteger.insert("QScriptValue(0, 0)", 0);
     991        toInteger.insert("QScriptValue(0, 0.0)", 0);
     992        toInteger.insert("QScriptValue(0, 123.0)", 123);
     993        toInteger.insert("QScriptValue(0, 6.37e-8)", 0);
     994        toInteger.insert("QScriptValue(0, -6.37e-8)", 0);
     995        toInteger.insert("QScriptValue(0, 0x43211234)", 1126240820);
     996        toInteger.insert("QScriptValue(0, 0x10000)", 65536);
     997        toInteger.insert("QScriptValue(0, 0x10001)", 65537);
     998        toInteger.insert("QScriptValue(0, qSNaN())", 0);
     999        toInteger.insert("QScriptValue(0, qQNaN())", 0);
     1000        toInteger.insert("QScriptValue(0, qInf())", qInf());
     1001        toInteger.insert("QScriptValue(0, -qInf())", qInf());
     1002        toInteger.insert("QScriptValue(0, \"NaN\")", 0);
     1003        toInteger.insert("QScriptValue(0, \"Infinity\")", qInf());
     1004        toInteger.insert("QScriptValue(0, \"-Infinity\")", qInf());
     1005        toInteger.insert("QScriptValue(0, \"ciao\")", 0);
     1006        toInteger.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
     1007        toInteger.insert("QScriptValue(0, QString(\"\"))", 0);
     1008        toInteger.insert("QScriptValue(0, QString())", 0);
     1009        toInteger.insert("QScriptValue(0, QString(\"0\"))", 0);
     1010        toInteger.insert("QScriptValue(0, QString(\"123\"))", 123);
     1011        toInteger.insert("QScriptValue(0, QString(\"12.3\"))", 12);
     1012        toInteger.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
     1013        toInteger.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
     1014        toInteger.insert("QScriptValue(engine, true)", 1);
     1015        toInteger.insert("QScriptValue(engine, false)", 0);
     1016        toInteger.insert("QScriptValue(engine, int(122))", 122);
     1017        toInteger.insert("QScriptValue(engine, uint(124))", 124);
     1018        toInteger.insert("QScriptValue(engine, 0)", 0);
     1019        toInteger.insert("QScriptValue(engine, 0.0)", 0);
     1020        toInteger.insert("QScriptValue(engine, 123.0)", 123);
     1021        toInteger.insert("QScriptValue(engine, 6.37e-8)", 0);
     1022        toInteger.insert("QScriptValue(engine, -6.37e-8)", 0);
     1023        toInteger.insert("QScriptValue(engine, 0x43211234)", 1126240820);
     1024        toInteger.insert("QScriptValue(engine, 0x10000)", 65536);
     1025        toInteger.insert("QScriptValue(engine, 0x10001)", 65537);
     1026        toInteger.insert("QScriptValue(engine, qSNaN())", 0);
     1027        toInteger.insert("QScriptValue(engine, qQNaN())", 0);
     1028        toInteger.insert("QScriptValue(engine, qInf())", qInf());
     1029        toInteger.insert("QScriptValue(engine, -qInf())", qInf());
     1030        toInteger.insert("QScriptValue(engine, \"NaN\")", 0);
     1031        toInteger.insert("QScriptValue(engine, \"Infinity\")", qInf());
     1032        toInteger.insert("QScriptValue(engine, \"-Infinity\")", qInf());
     1033        toInteger.insert("QScriptValue(engine, \"ciao\")", 0);
     1034        toInteger.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
     1035        toInteger.insert("QScriptValue(engine, QString(\"\"))", 0);
     1036        toInteger.insert("QScriptValue(engine, QString())", 0);
     1037        toInteger.insert("QScriptValue(engine, QString(\"0\"))", 0);
     1038        toInteger.insert("QScriptValue(engine, QString(\"123\"))", 123);
     1039        toInteger.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
     1040        toInteger.insert("engine->evaluate(\"[]\")", 0);
     1041        toInteger.insert("engine->evaluate(\"{}\")", 0);
     1042        toInteger.insert("engine->evaluate(\"Object.prototype\")", 0);
     1043        toInteger.insert("engine->evaluate(\"Date.prototype\")", 0);
     1044        toInteger.insert("engine->evaluate(\"Array.prototype\")", 0);
     1045        toInteger.insert("engine->evaluate(\"Function.prototype\")", 0);
     1046        toInteger.insert("engine->evaluate(\"Error.prototype\")", 0);
     1047        toInteger.insert("engine->evaluate(\"Object\")", 0);
     1048        toInteger.insert("engine->evaluate(\"Array\")", 0);
     1049        toInteger.insert("engine->evaluate(\"Number\")", 0);
     1050        toInteger.insert("engine->evaluate(\"Function\")", 0);
     1051        toInteger.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
     1052        toInteger.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
     1053        toInteger.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
     1054        toInteger.insert("engine->evaluate(\"/foo/\")", 0);
     1055        toInteger.insert("engine->evaluate(\"new Object()\")", 0);
     1056        toInteger.insert("engine->evaluate(\"new Array()\")", 0);
     1057        toInteger.insert("engine->evaluate(\"new Error()\")", 0);
     1058    }
     1059    newRow(expr) << toInteger.value(expr);
     1060}
     1061
     1062void tst_QScriptValue::toInteger_test(const char*, const QScriptValue& value)
     1063{
     1064    QFETCH(qsreal, expected);
     1065    if (qIsInf(expected)) {
     1066        QVERIFY(qIsInf(value.toInteger()));
     1067        return;
     1068    }
     1069    QCOMPARE(value.toInteger(), expected);
     1070}
     1071
     1072DEFINE_TEST_FUNCTION(toInteger)
     1073
     1074
     1075void tst_QScriptValue::toInt32_initData()
     1076{
     1077    QTest::addColumn<qint32>("expected");
     1078    initScriptValues();
     1079}
     1080
     1081void tst_QScriptValue::toInt32_makeData(const char* expr)
     1082{
     1083    static QHash<QString, qint32> toInt32;
     1084    if (toInt32.isEmpty()) {
     1085        toInt32.insert("QScriptValue()", 0);
     1086        toInt32.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
     1087        toInt32.insert("QScriptValue(QScriptValue::NullValue)", 0);
     1088        toInt32.insert("QScriptValue(true)", 1);
     1089        toInt32.insert("QScriptValue(false)", 0);
     1090        toInt32.insert("QScriptValue(int(122))", 122);
     1091        toInt32.insert("QScriptValue(uint(124))", 124);
     1092        toInt32.insert("QScriptValue(0)", 0);
     1093        toInt32.insert("QScriptValue(0.0)", 0);
     1094        toInt32.insert("QScriptValue(123.0)", 123);
     1095        toInt32.insert("QScriptValue(6.37e-8)", 0);
     1096        toInt32.insert("QScriptValue(-6.37e-8)", 0);
     1097        toInt32.insert("QScriptValue(0x43211234)", 1126240820);
     1098        toInt32.insert("QScriptValue(0x10000)", 65536);
     1099        toInt32.insert("QScriptValue(0x10001)", 65537);
     1100        toInt32.insert("QScriptValue(qSNaN())", 0);
     1101        toInt32.insert("QScriptValue(qQNaN())", 0);
     1102        toInt32.insert("QScriptValue(qInf())", 0);
     1103        toInt32.insert("QScriptValue(-qInf())", 0);
     1104        toInt32.insert("QScriptValue(\"NaN\")", 0);
     1105        toInt32.insert("QScriptValue(\"Infinity\")", 0);
     1106        toInt32.insert("QScriptValue(\"-Infinity\")", 0);
     1107        toInt32.insert("QScriptValue(\"ciao\")", 0);
     1108        toInt32.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
     1109        toInt32.insert("QScriptValue(QString(\"\"))", 0);
     1110        toInt32.insert("QScriptValue(QString())", 0);
     1111        toInt32.insert("QScriptValue(QString(\"0\"))", 0);
     1112        toInt32.insert("QScriptValue(QString(\"123\"))", 123);
     1113        toInt32.insert("QScriptValue(QString(\"12.4\"))", 12);
     1114        toInt32.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
     1115        toInt32.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
     1116        toInt32.insert("QScriptValue(0, true)", 1);
     1117        toInt32.insert("QScriptValue(0, false)", 0);
     1118        toInt32.insert("QScriptValue(0, int(122))", 122);
     1119        toInt32.insert("QScriptValue(0, uint(124))", 124);
     1120        toInt32.insert("QScriptValue(0, 0)", 0);
     1121        toInt32.insert("QScriptValue(0, 0.0)", 0);
     1122        toInt32.insert("QScriptValue(0, 123.0)", 123);
     1123        toInt32.insert("QScriptValue(0, 6.37e-8)", 0);
     1124        toInt32.insert("QScriptValue(0, -6.37e-8)", 0);
     1125        toInt32.insert("QScriptValue(0, 0x43211234)", 1126240820);
     1126        toInt32.insert("QScriptValue(0, 0x10000)", 65536);
     1127        toInt32.insert("QScriptValue(0, 0x10001)", 65537);
     1128        toInt32.insert("QScriptValue(0, qSNaN())", 0);
     1129        toInt32.insert("QScriptValue(0, qQNaN())", 0);
     1130        toInt32.insert("QScriptValue(0, qInf())", 0);
     1131        toInt32.insert("QScriptValue(0, -qInf())", 0);
     1132        toInt32.insert("QScriptValue(0, \"NaN\")", 0);
     1133        toInt32.insert("QScriptValue(0, \"Infinity\")", 0);
     1134        toInt32.insert("QScriptValue(0, \"-Infinity\")", 0);
     1135        toInt32.insert("QScriptValue(0, \"ciao\")", 0);
     1136        toInt32.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
     1137        toInt32.insert("QScriptValue(0, QString(\"\"))", 0);
     1138        toInt32.insert("QScriptValue(0, QString())", 0);
     1139        toInt32.insert("QScriptValue(0, QString(\"0\"))", 0);
     1140        toInt32.insert("QScriptValue(0, QString(\"123\"))", 123);
     1141        toInt32.insert("QScriptValue(0, QString(\"12.3\"))", 12);
     1142        toInt32.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
     1143        toInt32.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
     1144        toInt32.insert("QScriptValue(engine, true)", 1);
     1145        toInt32.insert("QScriptValue(engine, false)", 0);
     1146        toInt32.insert("QScriptValue(engine, int(122))", 122);
     1147        toInt32.insert("QScriptValue(engine, uint(124))", 124);
     1148        toInt32.insert("QScriptValue(engine, 0)", 0);
     1149        toInt32.insert("QScriptValue(engine, 0.0)", 0);
     1150        toInt32.insert("QScriptValue(engine, 123.0)", 123);
     1151        toInt32.insert("QScriptValue(engine, 6.37e-8)", 0);
     1152        toInt32.insert("QScriptValue(engine, -6.37e-8)", 0);
     1153        toInt32.insert("QScriptValue(engine, 0x43211234)", 1126240820);
     1154        toInt32.insert("QScriptValue(engine, 0x10000)", 65536);
     1155        toInt32.insert("QScriptValue(engine, 0x10001)", 65537);
     1156        toInt32.insert("QScriptValue(engine, qSNaN())", 0);
     1157        toInt32.insert("QScriptValue(engine, qQNaN())", 0);
     1158        toInt32.insert("QScriptValue(engine, qInf())", 0);
     1159        toInt32.insert("QScriptValue(engine, -qInf())", 0);
     1160        toInt32.insert("QScriptValue(engine, \"NaN\")", 0);
     1161        toInt32.insert("QScriptValue(engine, \"Infinity\")", 0);
     1162        toInt32.insert("QScriptValue(engine, \"-Infinity\")", 0);
     1163        toInt32.insert("QScriptValue(engine, \"ciao\")", 0);
     1164        toInt32.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
     1165        toInt32.insert("QScriptValue(engine, QString(\"\"))", 0);
     1166        toInt32.insert("QScriptValue(engine, QString())", 0);
     1167        toInt32.insert("QScriptValue(engine, QString(\"0\"))", 0);
     1168        toInt32.insert("QScriptValue(engine, QString(\"123\"))", 123);
     1169        toInt32.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
     1170        toInt32.insert("engine->evaluate(\"[]\")", 0);
     1171        toInt32.insert("engine->evaluate(\"{}\")", 0);
     1172        toInt32.insert("engine->evaluate(\"Object.prototype\")", 0);
     1173        toInt32.insert("engine->evaluate(\"Date.prototype\")", 0);
     1174        toInt32.insert("engine->evaluate(\"Array.prototype\")", 0);
     1175        toInt32.insert("engine->evaluate(\"Function.prototype\")", 0);
     1176        toInt32.insert("engine->evaluate(\"Error.prototype\")", 0);
     1177        toInt32.insert("engine->evaluate(\"Object\")", 0);
     1178        toInt32.insert("engine->evaluate(\"Array\")", 0);
     1179        toInt32.insert("engine->evaluate(\"Number\")", 0);
     1180        toInt32.insert("engine->evaluate(\"Function\")", 0);
     1181        toInt32.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
     1182        toInt32.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
     1183        toInt32.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
     1184        toInt32.insert("engine->evaluate(\"/foo/\")", 0);
     1185        toInt32.insert("engine->evaluate(\"new Object()\")", 0);
     1186        toInt32.insert("engine->evaluate(\"new Array()\")", 0);
     1187        toInt32.insert("engine->evaluate(\"new Error()\")", 0);
     1188    }
     1189    newRow(expr) << toInt32.value(expr);
     1190}
     1191
     1192void tst_QScriptValue::toInt32_test(const char*, const QScriptValue& value)
     1193{
     1194    QFETCH(qint32, expected);
     1195    QCOMPARE(value.toInt32(), expected);
     1196}
     1197
     1198DEFINE_TEST_FUNCTION(toInt32)
     1199
     1200
     1201void tst_QScriptValue::toUInt32_initData()
     1202{
     1203    QTest::addColumn<quint32>("expected");
     1204    initScriptValues();
     1205}
     1206
     1207void tst_QScriptValue::toUInt32_makeData(const char* expr)
     1208{
     1209    static QHash<QString, quint32> toUInt32;
     1210    if (toUInt32.isEmpty()) {
     1211        toUInt32.insert("QScriptValue()", 0);
     1212        toUInt32.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
     1213        toUInt32.insert("QScriptValue(QScriptValue::NullValue)", 0);
     1214        toUInt32.insert("QScriptValue(true)", 1);
     1215        toUInt32.insert("QScriptValue(false)", 0);
     1216        toUInt32.insert("QScriptValue(int(122))", 122);
     1217        toUInt32.insert("QScriptValue(uint(124))", 124);
     1218        toUInt32.insert("QScriptValue(0)", 0);
     1219        toUInt32.insert("QScriptValue(0.0)", 0);
     1220        toUInt32.insert("QScriptValue(123.0)", 123);
     1221        toUInt32.insert("QScriptValue(6.37e-8)", 0);
     1222        toUInt32.insert("QScriptValue(-6.37e-8)", 0);
     1223        toUInt32.insert("QScriptValue(0x43211234)", 1126240820);
     1224        toUInt32.insert("QScriptValue(0x10000)", 65536);
     1225        toUInt32.insert("QScriptValue(0x10001)", 65537);
     1226        toUInt32.insert("QScriptValue(qSNaN())", 0);
     1227        toUInt32.insert("QScriptValue(qQNaN())", 0);
     1228        toUInt32.insert("QScriptValue(qInf())", 0);
     1229        toUInt32.insert("QScriptValue(-qInf())", 0);
     1230        toUInt32.insert("QScriptValue(\"NaN\")", 0);
     1231        toUInt32.insert("QScriptValue(\"Infinity\")", 0);
     1232        toUInt32.insert("QScriptValue(\"-Infinity\")", 0);
     1233        toUInt32.insert("QScriptValue(\"ciao\")", 0);
     1234        toUInt32.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
     1235        toUInt32.insert("QScriptValue(QString(\"\"))", 0);
     1236        toUInt32.insert("QScriptValue(QString())", 0);
     1237        toUInt32.insert("QScriptValue(QString(\"0\"))", 0);
     1238        toUInt32.insert("QScriptValue(QString(\"123\"))", 123);
     1239        toUInt32.insert("QScriptValue(QString(\"12.4\"))", 12);
     1240        toUInt32.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
     1241        toUInt32.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
     1242        toUInt32.insert("QScriptValue(0, true)", 1);
     1243        toUInt32.insert("QScriptValue(0, false)", 0);
     1244        toUInt32.insert("QScriptValue(0, int(122))", 122);
     1245        toUInt32.insert("QScriptValue(0, uint(124))", 124);
     1246        toUInt32.insert("QScriptValue(0, 0)", 0);
     1247        toUInt32.insert("QScriptValue(0, 0.0)", 0);
     1248        toUInt32.insert("QScriptValue(0, 123.0)", 123);
     1249        toUInt32.insert("QScriptValue(0, 6.37e-8)", 0);
     1250        toUInt32.insert("QScriptValue(0, -6.37e-8)", 0);
     1251        toUInt32.insert("QScriptValue(0, 0x43211234)", 1126240820);
     1252        toUInt32.insert("QScriptValue(0, 0x10000)", 65536);
     1253        toUInt32.insert("QScriptValue(0, 0x10001)", 65537);
     1254        toUInt32.insert("QScriptValue(0, qSNaN())", 0);
     1255        toUInt32.insert("QScriptValue(0, qQNaN())", 0);
     1256        toUInt32.insert("QScriptValue(0, qInf())", 0);
     1257        toUInt32.insert("QScriptValue(0, -qInf())", 0);
     1258        toUInt32.insert("QScriptValue(0, \"NaN\")", 0);
     1259        toUInt32.insert("QScriptValue(0, \"Infinity\")", 0);
     1260        toUInt32.insert("QScriptValue(0, \"-Infinity\")", 0);
     1261        toUInt32.insert("QScriptValue(0, \"ciao\")", 0);
     1262        toUInt32.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
     1263        toUInt32.insert("QScriptValue(0, QString(\"\"))", 0);
     1264        toUInt32.insert("QScriptValue(0, QString())", 0);
     1265        toUInt32.insert("QScriptValue(0, QString(\"0\"))", 0);
     1266        toUInt32.insert("QScriptValue(0, QString(\"123\"))", 123);
     1267        toUInt32.insert("QScriptValue(0, QString(\"12.3\"))", 12);
     1268        toUInt32.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
     1269        toUInt32.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
     1270        toUInt32.insert("QScriptValue(engine, true)", 1);
     1271        toUInt32.insert("QScriptValue(engine, false)", 0);
     1272        toUInt32.insert("QScriptValue(engine, int(122))", 122);
     1273        toUInt32.insert("QScriptValue(engine, uint(124))", 124);
     1274        toUInt32.insert("QScriptValue(engine, 0)", 0);
     1275        toUInt32.insert("QScriptValue(engine, 0.0)", 0);
     1276        toUInt32.insert("QScriptValue(engine, 123.0)", 123);
     1277        toUInt32.insert("QScriptValue(engine, 6.37e-8)", 0);
     1278        toUInt32.insert("QScriptValue(engine, -6.37e-8)", 0);
     1279        toUInt32.insert("QScriptValue(engine, 0x43211234)", 1126240820);
     1280        toUInt32.insert("QScriptValue(engine, 0x10000)", 65536);
     1281        toUInt32.insert("QScriptValue(engine, 0x10001)", 65537);
     1282        toUInt32.insert("QScriptValue(engine, qSNaN())", 0);
     1283        toUInt32.insert("QScriptValue(engine, qQNaN())", 0);
     1284        toUInt32.insert("QScriptValue(engine, qInf())", 0);
     1285        toUInt32.insert("QScriptValue(engine, -qInf())", 0);
     1286        toUInt32.insert("QScriptValue(engine, \"NaN\")", 0);
     1287        toUInt32.insert("QScriptValue(engine, \"Infinity\")", 0);
     1288        toUInt32.insert("QScriptValue(engine, \"-Infinity\")", 0);
     1289        toUInt32.insert("QScriptValue(engine, \"ciao\")", 0);
     1290        toUInt32.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
     1291        toUInt32.insert("QScriptValue(engine, QString(\"\"))", 0);
     1292        toUInt32.insert("QScriptValue(engine, QString())", 0);
     1293        toUInt32.insert("QScriptValue(engine, QString(\"0\"))", 0);
     1294        toUInt32.insert("QScriptValue(engine, QString(\"123\"))", 123);
     1295        toUInt32.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
     1296        toUInt32.insert("engine->evaluate(\"[]\")", 0);
     1297        toUInt32.insert("engine->evaluate(\"{}\")", 0);
     1298        toUInt32.insert("engine->evaluate(\"Object.prototype\")", 0);
     1299        toUInt32.insert("engine->evaluate(\"Date.prototype\")", 0);
     1300        toUInt32.insert("engine->evaluate(\"Array.prototype\")", 0);
     1301        toUInt32.insert("engine->evaluate(\"Function.prototype\")", 0);
     1302        toUInt32.insert("engine->evaluate(\"Error.prototype\")", 0);
     1303        toUInt32.insert("engine->evaluate(\"Object\")", 0);
     1304        toUInt32.insert("engine->evaluate(\"Array\")", 0);
     1305        toUInt32.insert("engine->evaluate(\"Number\")", 0);
     1306        toUInt32.insert("engine->evaluate(\"Function\")", 0);
     1307        toUInt32.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
     1308        toUInt32.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
     1309        toUInt32.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
     1310        toUInt32.insert("engine->evaluate(\"/foo/\")", 0);
     1311        toUInt32.insert("engine->evaluate(\"new Object()\")", 0);
     1312        toUInt32.insert("engine->evaluate(\"new Array()\")", 0);
     1313        toUInt32.insert("engine->evaluate(\"new Error()\")", 0);
     1314    }
     1315    newRow(expr) << toUInt32.value(expr);
     1316}
     1317
     1318void tst_QScriptValue::toUInt32_test(const char*, const QScriptValue& value)
     1319{
     1320    QFETCH(quint32, expected);
     1321    QCOMPARE(value.toUInt32(), expected);
     1322}
     1323
     1324DEFINE_TEST_FUNCTION(toUInt32)
     1325
     1326
     1327void tst_QScriptValue::toUInt16_initData()
     1328{
     1329    QTest::addColumn<quint16>("expected");
     1330    initScriptValues();
     1331}
     1332
     1333void tst_QScriptValue::toUInt16_makeData(const char* expr)
     1334{
     1335    static QHash<QString, quint16> toUInt16;
     1336    if (toUInt16.isEmpty()) {
     1337        toUInt16.insert("QScriptValue()", 0);
     1338        toUInt16.insert("QScriptValue(QScriptValue::UndefinedValue)", 0);
     1339        toUInt16.insert("QScriptValue(QScriptValue::NullValue)", 0);
     1340        toUInt16.insert("QScriptValue(true)", 1);
     1341        toUInt16.insert("QScriptValue(false)", 0);
     1342        toUInt16.insert("QScriptValue(int(122))", 122);
     1343        toUInt16.insert("QScriptValue(uint(124))", 124);
     1344        toUInt16.insert("QScriptValue(0)", 0);
     1345        toUInt16.insert("QScriptValue(0.0)", 0);
     1346        toUInt16.insert("QScriptValue(123.0)", 123);
     1347        toUInt16.insert("QScriptValue(6.37e-8)", 0);
     1348        toUInt16.insert("QScriptValue(-6.37e-8)", 0);
     1349        toUInt16.insert("QScriptValue(0x43211234)", 4660);
     1350        toUInt16.insert("QScriptValue(0x10000)", 0);
     1351        toUInt16.insert("QScriptValue(0x10001)", 1);
     1352        toUInt16.insert("QScriptValue(qSNaN())", 0);
     1353        toUInt16.insert("QScriptValue(qQNaN())", 0);
     1354        toUInt16.insert("QScriptValue(qInf())", 0);
     1355        toUInt16.insert("QScriptValue(-qInf())", 0);
     1356        toUInt16.insert("QScriptValue(\"NaN\")", 0);
     1357        toUInt16.insert("QScriptValue(\"Infinity\")", 0);
     1358        toUInt16.insert("QScriptValue(\"-Infinity\")", 0);
     1359        toUInt16.insert("QScriptValue(\"ciao\")", 0);
     1360        toUInt16.insert("QScriptValue(QString::fromLatin1(\"ciao\"))", 0);
     1361        toUInt16.insert("QScriptValue(QString(\"\"))", 0);
     1362        toUInt16.insert("QScriptValue(QString())", 0);
     1363        toUInt16.insert("QScriptValue(QString(\"0\"))", 0);
     1364        toUInt16.insert("QScriptValue(QString(\"123\"))", 123);
     1365        toUInt16.insert("QScriptValue(QString(\"12.4\"))", 12);
     1366        toUInt16.insert("QScriptValue(0, QScriptValue::UndefinedValue)", 0);
     1367        toUInt16.insert("QScriptValue(0, QScriptValue::NullValue)", 0);
     1368        toUInt16.insert("QScriptValue(0, true)", 1);
     1369        toUInt16.insert("QScriptValue(0, false)", 0);
     1370        toUInt16.insert("QScriptValue(0, int(122))", 122);
     1371        toUInt16.insert("QScriptValue(0, uint(124))", 124);
     1372        toUInt16.insert("QScriptValue(0, 0)", 0);
     1373        toUInt16.insert("QScriptValue(0, 0.0)", 0);
     1374        toUInt16.insert("QScriptValue(0, 123.0)", 123);
     1375        toUInt16.insert("QScriptValue(0, 6.37e-8)", 0);
     1376        toUInt16.insert("QScriptValue(0, -6.37e-8)", 0);
     1377        toUInt16.insert("QScriptValue(0, 0x43211234)", 4660);
     1378        toUInt16.insert("QScriptValue(0, 0x10000)", 0);
     1379        toUInt16.insert("QScriptValue(0, 0x10001)", 1);
     1380        toUInt16.insert("QScriptValue(0, qSNaN())", 0);
     1381        toUInt16.insert("QScriptValue(0, qQNaN())", 0);
     1382        toUInt16.insert("QScriptValue(0, qInf())", 0);
     1383        toUInt16.insert("QScriptValue(0, -qInf())", 0);
     1384        toUInt16.insert("QScriptValue(0, \"NaN\")", 0);
     1385        toUInt16.insert("QScriptValue(0, \"Infinity\")", 0);
     1386        toUInt16.insert("QScriptValue(0, \"-Infinity\")", 0);
     1387        toUInt16.insert("QScriptValue(0, \"ciao\")", 0);
     1388        toUInt16.insert("QScriptValue(0, QString::fromLatin1(\"ciao\"))", 0);
     1389        toUInt16.insert("QScriptValue(0, QString(\"\"))", 0);
     1390        toUInt16.insert("QScriptValue(0, QString())", 0);
     1391        toUInt16.insert("QScriptValue(0, QString(\"0\"))", 0);
     1392        toUInt16.insert("QScriptValue(0, QString(\"123\"))", 123);
     1393        toUInt16.insert("QScriptValue(0, QString(\"12.3\"))", 12);
     1394        toUInt16.insert("QScriptValue(engine, QScriptValue::UndefinedValue)", 0);
     1395        toUInt16.insert("QScriptValue(engine, QScriptValue::NullValue)", 0);
     1396        toUInt16.insert("QScriptValue(engine, true)", 1);
     1397        toUInt16.insert("QScriptValue(engine, false)", 0);
     1398        toUInt16.insert("QScriptValue(engine, int(122))", 122);
     1399        toUInt16.insert("QScriptValue(engine, uint(124))", 124);
     1400        toUInt16.insert("QScriptValue(engine, 0)", 0);
     1401        toUInt16.insert("QScriptValue(engine, 0.0)", 0);
     1402        toUInt16.insert("QScriptValue(engine, 123.0)", 123);
     1403        toUInt16.insert("QScriptValue(engine, 6.37e-8)", 0);
     1404        toUInt16.insert("QScriptValue(engine, -6.37e-8)", 0);
     1405        toUInt16.insert("QScriptValue(engine, 0x43211234)", 4660);
     1406        toUInt16.insert("QScriptValue(engine, 0x10000)", 0);
     1407        toUInt16.insert("QScriptValue(engine, 0x10001)", 1);
     1408        toUInt16.insert("QScriptValue(engine, qSNaN())", 0);
     1409        toUInt16.insert("QScriptValue(engine, qQNaN())", 0);
     1410        toUInt16.insert("QScriptValue(engine, qInf())", 0);
     1411        toUInt16.insert("QScriptValue(engine, -qInf())", 0);
     1412        toUInt16.insert("QScriptValue(engine, \"NaN\")", 0);
     1413        toUInt16.insert("QScriptValue(engine, \"Infinity\")", 0);
     1414        toUInt16.insert("QScriptValue(engine, \"-Infinity\")", 0);
     1415        toUInt16.insert("QScriptValue(engine, \"ciao\")", 0);
     1416        toUInt16.insert("QScriptValue(engine, QString::fromLatin1(\"ciao\"))", 0);
     1417        toUInt16.insert("QScriptValue(engine, QString(\"\"))", 0);
     1418        toUInt16.insert("QScriptValue(engine, QString())", 0);
     1419        toUInt16.insert("QScriptValue(engine, QString(\"0\"))", 0);
     1420        toUInt16.insert("QScriptValue(engine, QString(\"123\"))", 123);
     1421        toUInt16.insert("QScriptValue(engine, QString(\"1.23\"))", 1);
     1422        toUInt16.insert("engine->evaluate(\"[]\")", 0);
     1423        toUInt16.insert("engine->evaluate(\"{}\")", 0);
     1424        toUInt16.insert("engine->evaluate(\"Object.prototype\")", 0);
     1425        toUInt16.insert("engine->evaluate(\"Date.prototype\")", 0);
     1426        toUInt16.insert("engine->evaluate(\"Array.prototype\")", 0);
     1427        toUInt16.insert("engine->evaluate(\"Function.prototype\")", 0);
     1428        toUInt16.insert("engine->evaluate(\"Error.prototype\")", 0);
     1429        toUInt16.insert("engine->evaluate(\"Object\")", 0);
     1430        toUInt16.insert("engine->evaluate(\"Array\")", 0);
     1431        toUInt16.insert("engine->evaluate(\"Number\")", 0);
     1432        toUInt16.insert("engine->evaluate(\"Function\")", 0);
     1433        toUInt16.insert("engine->evaluate(\"(function() { return 1; })\")", 0);
     1434        toUInt16.insert("engine->evaluate(\"(function() { return 'ciao'; })\")", 0);
     1435        toUInt16.insert("engine->evaluate(\"(function() { throw new Error('foo'); })\")", 0);
     1436        toUInt16.insert("engine->evaluate(\"/foo/\")", 0);
     1437        toUInt16.insert("engine->evaluate(\"new Object()\")", 0);
     1438        toUInt16.insert("engine->evaluate(\"new Array()\")", 0);
     1439        toUInt16.insert("engine->evaluate(\"new Error()\")", 0);
     1440    }
     1441    newRow(expr) << toUInt16.value(expr);
     1442}
     1443
     1444void tst_QScriptValue::toUInt16_test(const char*, const QScriptValue& value)
     1445{
     1446    QFETCH(quint16, expected);
     1447    QCOMPARE(value.toUInt16(), expected);
     1448}
     1449
     1450DEFINE_TEST_FUNCTION(toUInt16)
Note: See TracChangeset for help on using the changeset viewer.