27 #include "qtest_kde.h"
29 class KJSApiTest :
public QObject
34 void objectConstruction();
35 void interpreterEvaluate();
36 void interpreterNormalizeCode();
37 void objectProperties();
38 void prototypeConstants();
39 void prototypeProperties();
40 void prototypeFunctions();
44 void KJSApiTest::objectConstruction()
50 QVERIFY2(
KJSObject().isObject(),
"Broken default object");
54 "Undefined object is not undefined");
57 "Null object is not null");
61 QVERIFY2(boolObject.isBoolean(),
"Boolean object is not of boolean type");
62 QVERIFY2(boolObject.toBoolean(ctx),
"Boolean object has wrong value");
63 QVERIFY2(!ctx->
hasException(),
"Boolean conversion threw exception");
67 QVERIFY2(numObject.isNumber(),
"Number object is not of number type");
68 QCOMPARE(numObject.toNumber(ctx), 42.0);
69 QCOMPARE(numObject.toInt32(ctx), 42);
70 QVERIFY2(!ctx->
hasException(),
"Number conversion threw exception");
74 QVERIFY2(stringObject.isString(),
"String object is not of string type");
75 QCOMPARE(stringObject.toString(ctx), QLatin1String(
"Trunk"));
76 QVERIFY2(!ctx->
hasException(),
"String conversion threw exception");
80 QVERIFY2(arrayObject.isObject(),
"Array object is not of object type");
81 QCOMPARE(arrayObject.property(ctx,
"length").toNumber(ctx), 3.0);
82 QCOMPARE(arrayObject.toString(ctx), QLatin1String(
",,"));
83 QVERIFY2(!ctx->
hasException(),
"Array conversion threw exception");
87 QCOMPARE(copy.toString(ctx), QLatin1String(
"Trunk"));
89 QCOMPARE(copy.toNumber(ctx), 42.0);
92 void KJSApiTest::interpreterEvaluate()
100 QVERIFY2(res.
isException(),
"Syntax error not caught");
103 QVERIFY2(!res.isException(),
"Evaluation returned non-number object");
104 QCOMPARE(res.value().toNumber(ctx), 33.0);
107 void KJSApiTest::interpreterNormalizeCode()
117 QVERIFY(!errMsg.isEmpty());
118 QVERIFY(errLine >= 0 && errLine <= 2);
123 QVERIFY(!norm.isEmpty());
124 QStringList lines = norm.split(
'\n');
125 QVERIFY(lines.size() >= 2);
126 int fooLine = lines.indexOf(QRegExp(
" *foo\\(\\);"));
127 int barLine = lines.indexOf(QRegExp(
" *bar\\(\\);"));
128 QVERIFY(fooLine >= 0);
129 QVERIFY(barLine > fooLine);
132 void KJSApiTest::objectProperties()
162 QCOMPARE(v.
toString(ctx), QLatin1String(
"myvalue8"));
165 global.
setProperty(ctx,
"myprop", QLatin1String(
"myvalue16"));
168 QCOMPARE(v.
toString(ctx), QLatin1String(
"myvalue16"));
171 void KJSApiTest::prototypeConstants()
187 static struct O {
int x; }
o0 = { 42 };
191 O* o =
reinterpret_cast<O*
>(object);
198 O* o =
reinterpret_cast<O*
>(object);
203 void KJSApiTest::prototypeProperties()
222 QVERIFY2(ctx->
hasException(),
"Write access caused no exception");
229 double factor = *
reinterpret_cast<double*
>(object);
232 if (arguments.
count() != 1)
244 void KJSApiTest::prototypeFunctions()
261 res = ip.
evaluate(
"obj.multiply()");
262 QVERIFY2(res.
isException(),
"Exception did not work");
265 void KJSApiTest::globalObject()
277 QTEST_KDEMAIN_CORE(KJSApiTest)
279 #include "kjsapitest.moc"