Skip to content

Commit

Permalink
Add .arg() for Javascript String type
Browse files Browse the repository at this point in the history
Change-Id: I973032189c40bfa4d5450396f5bad1a7c81ac68b
Task-number:QTBUG-16734
Reviewed-by:Michael Brasser
Reviewed-on: http://codereview.qt.nokia.com/2134
Reviewed-by: Qt Sanity Bot <qt_sanity_bot@ovi.com>
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
  • Loading branch information
yinyunqiao authored and Qt by Nokia committed Jul 29, 2011
1 parent ea0cb11 commit b1200f4
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 1 deletion.
21 changes: 21 additions & 0 deletions src/declarative/qml/v8/qv8engine.cpp
Expand Up @@ -578,6 +578,10 @@ void QV8Engine::initializeGlobal(v8::Handle<v8::Object> global)
global->Set(v8::String::New("Qt"), qt);
global->Set(v8::String::New("gc"), V8FUNCTION(gc, this));

v8::Local<v8::Object> string = v8::Local<v8::Object>::Cast(global->Get(v8::String::New("String")));
v8::Local<v8::Object> stringPrototype = v8::Local<v8::Object>::Cast(string->Get(v8::String::New("prototype")));
stringPrototype->Set(v8::String::New("arg"), V8FUNCTION(stringArg, this));

m_xmlHttpRequestData = qt_add_qmlxmlhttprequest(this);
m_sqlDatabaseData = qt_add_qmlsqldatabase(this);

Expand Down Expand Up @@ -721,6 +725,23 @@ v8::Handle<v8::Value> QV8Engine::print(const v8::Arguments &args)
return v8::Undefined();
}

v8::Handle<v8::Value> QV8Engine::stringArg(const v8::Arguments &args)
{
QString value = V8ENGINE()->toString(args.This()->ToString());
if (args.Length() != 1)
V8THROW_ERROR("String.arg(): Invalid arguments");

if (args[0]->IsUint32())
return V8ENGINE()->toString(value.arg(args[0]->Uint32Value()));
else if (args[0]->IsInt32())
return V8ENGINE()->toString(value.arg(args[0]->Int32Value()));
else if (args[0]->IsNumber())
return V8ENGINE()->toString(value.arg(args[0]->NumberValue()));
else if (args[0]->IsBoolean())
return V8ENGINE()->toString(value.arg(args[0]->BooleanValue()));

return V8ENGINE()->toString(value.arg(V8ENGINE()->toString(args[0])));
}
/*!
\qmlmethod bool Qt::isQtObject(object)
Returns true if \c object is a valid reference to a Qt or QML object, otherwise false.
Expand Down
1 change: 1 addition & 0 deletions src/declarative/qml/v8/qv8engine_p.h
Expand Up @@ -351,6 +351,7 @@ class Q_DECLARATIVE_EXPORT QV8Engine
static v8::Handle<v8::Value> qsTrNoOp(const v8::Arguments &args);
static v8::Handle<v8::Value> qsTrId(const v8::Arguments &args);
static v8::Handle<v8::Value> qsTrIdNoOp(const v8::Arguments &args);
static v8::Handle<v8::Value> stringArg(const v8::Arguments &args);

double qtDateTimeToJsDate(const QDateTime &dt);
QDateTime qtDateTimeFromJsDate(double jsDate);
Expand Down
@@ -0,0 +1,16 @@
import Qt.test 1.0
import QtQuick 2.0

MyTypeObject {
stringProperty:"string:%0 false:%1 true:%2 uint32:%3 int32:%4 double:%5 date:%6!"
Component.onCompleted: {
var date = new Date();
date.setDate(11);
date.setMonth(1);
date.setFullYear(2011);
date.setHours(5);
date.setMinutes(30);
date.setSeconds(50);
stringProperty = stringProperty.arg("Hello World").arg(false).arg(true).arg(100).arg(-100).arg(3.1415926).arg(Qt.formatDateTime(date, "yyyy-MM-dd hh::mm:ss"));
}
}
Expand Up @@ -184,7 +184,7 @@ private slots:
void aliasWritesOverrideBindings();
void aliasToCompositeElement();
void realToInt();

void dynamicString();
void include();

void callQtInvokables();
Expand Down Expand Up @@ -3644,6 +3644,14 @@ void tst_qdeclarativeecmascript::realToInt()
QMetaObject::invokeMethod(object, "test2");
QCOMPARE(object->value(), int(8));
}
void tst_qdeclarativeecmascript::dynamicString()
{
QDeclarativeComponent component(&engine, TEST_FILE("dynamicString.qml"));
QObject *object = component.create();
QVERIFY(object != 0);
QCOMPARE(object->property("stringProperty").toString(),
QString::fromLatin1("string:Hello World false:0 true:1 uint32:100 int32:-100 double:3.14159 date:2011-02-11 05::30:50!"));
}

QTEST_MAIN(tst_qdeclarativeecmascript)

Expand Down

0 comments on commit b1200f4

Please sign in to comment.