本文整理汇总了C++中QScriptValue::propertyFlags方法的典型用法代码示例。如果您正苦于以下问题:C++ QScriptValue::propertyFlags方法的具体用法?C++ QScriptValue::propertyFlags怎么用?C++ QScriptValue::propertyFlags使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类QScriptValue
的用法示例。
在下文中一共展示了QScriptValue::propertyFlags方法的6个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: iterateString
void tst_QScriptValueIterator::iterateString()
{
QScriptEngine engine;
QScriptValue str = QScriptValue(&engine, QString::fromLatin1("ciao"));
QVERIFY(str.isString());
QScriptValue obj = str.toObject();
QVERIFY(obj.property("length").isNumber());
int length = obj.property("length").toInt32();
QCOMPARE(length, 4);
QScriptValueIterator it(obj);
QHash<QString, QScriptValue> stringProperties;
bool iteratedThruLength = false;
while (it.hasNext()) {
it.next();
const QString name = it.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it.value().isNumber());
QCOMPARE(it.value().toInt32(), length);
QCOMPARE(it.flags(), QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
iteratedThruLength = true;
continue;
}
QVERIFY2(!stringProperties.contains(name), "property appeared more than once during iteration.");
stringProperties.insert(name, it.value());
QCOMPARE(it.flags(), obj.propertyFlags(name));
QVERIFY(it.value().strictlyEquals(obj.property(name)));
}
QVERIFY(iteratedThruLength);
QCOMPARE(stringProperties.size(), length);
// And going backwards
iteratedThruLength = false;
stringProperties.clear();
it.toBack();
while (it.hasPrevious()) {
it.previous();
const QString name = it.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it.value().isNumber());
QCOMPARE(it.value().toInt32(), length);
QCOMPARE(it.flags(), QScriptValue::ReadOnly | QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
iteratedThruLength = true;
continue;
}
QVERIFY2(!stringProperties.contains(name), "property appeared more than once during iteration.");
stringProperties.insert(name, it.value());
QCOMPARE(it.flags(), obj.propertyFlags(name));
QVERIFY(it.value().strictlyEquals(obj.property(name)));
}
}
示例2: propertyFlags
// Test the time taken to get the propeties flags accross the engine
void tst_QScriptClass::propertyFlags()
{
QScriptEngine eng;
FooScriptClass cls(&eng);
QScriptValue obj = eng.newObject(&cls);
QScriptString foo = eng.toStringHandle("foo");
QBENCHMARK {
for (int i = 0; i < iterationNumber; ++i)
(void)obj.propertyFlags(foo);
}
}
示例3: iterateForward
void tst_QScriptValueIterator::iterateForward()
{
QFETCH(QStringList, propertyNames);
QFETCH(QStringList, propertyValues);
QMap<QString, QString> pmap;
QVERIFY(propertyNames.size() == propertyValues.size());
QScriptEngine engine;
QScriptValue object = engine.newObject();
for (int i = 0; i < propertyNames.size(); ++i) {
QString name = propertyNames.at(i);
QString value = propertyValues.at(i);
pmap.insert(name, value);
object.setProperty(name, QScriptValue(&engine, value));
}
QScriptValue otherObject = engine.newObject();
otherObject.setProperty("foo", QScriptValue(&engine, 123456));
otherObject.setProperty("protoProperty", QScriptValue(&engine, 654321));
object.setPrototype(otherObject); // should not affect iterator
QStringList lst;
QScriptValueIterator it(object);
while (!pmap.isEmpty()) {
QCOMPARE(it.hasNext(), true);
QCOMPARE(it.hasNext(), true);
it.next();
QString name = it.name();
QCOMPARE(pmap.contains(name), true);
QCOMPARE(it.name(), name);
QCOMPARE(it.flags(), object.propertyFlags(name));
QCOMPARE(it.value().strictlyEquals(QScriptValue(&engine, pmap.value(name))), true);
QCOMPARE(it.scriptName(), engine.toStringHandle(name));
pmap.remove(name);
lst.append(name);
}
QCOMPARE(it.hasNext(), false);
QCOMPARE(it.hasNext(), false);
it.toFront();
for (int i = 0; i < lst.count(); ++i) {
QCOMPARE(it.hasNext(), true);
it.next();
QCOMPARE(it.name(), lst.at(i));
}
for (int i = 0; i < lst.count(); ++i) {
QCOMPARE(it.hasPrevious(), true);
it.previous();
QCOMPARE(it.name(), lst.at(lst.count()-1-i));
}
QCOMPARE(it.hasPrevious(), false);
}
示例4: iterateBackward
void tst_QScriptValueIterator::iterateBackward()
{
QFETCH(QStringList, propertyNames);
QFETCH(QStringList, propertyValues);
QMap<QString, QString> pmap;
QVERIFY(propertyNames.size() == propertyValues.size());
QScriptEngine engine;
QScriptValue object = engine.newObject();
for (int i = 0; i < propertyNames.size(); ++i) {
QString name = propertyNames.at(i);
QString value = propertyValues.at(i);
pmap.insert(name, value);
object.setProperty(name, QScriptValue(&engine, value));
}
QStringList lst;
QScriptValueIterator it(object);
it.toBack();
while (!pmap.isEmpty()) {
QCOMPARE(it.hasPrevious(), true);
QCOMPARE(it.hasPrevious(), true);
it.previous();
QString name = it.name();
QCOMPARE(pmap.contains(name), true);
QCOMPARE(it.name(), name);
QCOMPARE(it.flags(), object.propertyFlags(name));
QCOMPARE(it.value().strictlyEquals(QScriptValue(&engine, pmap.value(name))), true);
pmap.remove(name);
lst.append(name);
}
QCOMPARE(it.hasPrevious(), false);
QCOMPARE(it.hasPrevious(), false);
it.toBack();
for (int i = 0; i < lst.count(); ++i) {
QCOMPARE(it.hasPrevious(), true);
it.previous();
QCOMPARE(it.name(), lst.at(i));
}
for (int i = 0; i < lst.count(); ++i) {
QCOMPARE(it.hasNext(), true);
it.next();
QCOMPARE(it.name(), lst.at(lst.count()-1-i));
}
QCOMPARE(it.hasNext(), false);
}
示例5: arguments
void tst_QScriptContext::arguments()
{
QScriptEngine eng;
{
QScriptValue args = eng.currentContext()->argumentsObject();
QVERIFY(args.isObject());
QCOMPARE(args.property("length").toInt32(), 0);
}
{
QScriptValue fun = eng.newFunction(get_arguments);
eng.globalObject().setProperty("get_arguments", fun);
}
for (int x = 0; x < 2; ++x) {
QString prefix;
if (x == 0)
prefix = "";
else
prefix = "new ";
{
QScriptValue result = eng.evaluate(prefix+"get_arguments()");
QCOMPARE(result.isArray(), true);
QCOMPARE(result.property("length").toUInt32(), quint32(0));
}
{
QScriptValue result = eng.evaluate(prefix+"get_arguments(123)");
QCOMPARE(result.isArray(), true);
QCOMPARE(result.property("length").toUInt32(), quint32(1));
QCOMPARE(result.property("0").isNumber(), true);
QCOMPARE(result.property("0").toNumber(), 123.0);
}
{
QScriptValue result = eng.evaluate(prefix+"get_arguments(\"ciao\", null, true, undefined)");
QCOMPARE(result.isArray(), true);
QCOMPARE(result.property("length").toUInt32(), quint32(4));
QCOMPARE(result.property("0").isString(), true);
QCOMPARE(result.property("0").toString(), QString("ciao"));
QCOMPARE(result.property("1").isNull(), true);
QCOMPARE(result.property("2").isBoolean(), true);
QCOMPARE(result.property("2").toBoolean(), true);
QCOMPARE(result.property("3").isUndefined(), true);
}
{
QScriptValue fun = eng.newFunction(get_argumentsObject);
eng.globalObject().setProperty("get_argumentsObject", fun);
}
{
QScriptValue fun = eng.evaluate("get_argumentsObject");
QCOMPARE(fun.isFunction(), true);
QScriptValue result = eng.evaluate(prefix+"get_argumentsObject()");
QCOMPARE(result.isArray(), false);
QVERIFY(result.isObject());
QCOMPARE(result.property("length").toUInt32(), quint32(0));
QCOMPARE(result.propertyFlags("length"), QScriptValue::SkipInEnumeration);
QCOMPARE(result.property("callee").strictlyEquals(fun), true);
QCOMPARE(result.propertyFlags("callee"), QScriptValue::SkipInEnumeration);
QScriptValue replacedCallee(&eng, 123);
result.setProperty("callee", replacedCallee);
QVERIFY(result.property("callee").equals(replacedCallee));
QScriptValue replacedLength(&eng, 456);
result.setProperty("length", replacedLength);
QVERIFY(result.property("length").equals(replacedLength));
result.setProperty("callee", QScriptValue());
QVERIFY(!result.property("callee").isValid());
result.setProperty("length", QScriptValue());
QVERIFY(!result.property("length").isValid());
}
{
QScriptValue result = eng.evaluate(prefix+"get_argumentsObject(123)");
eng.evaluate("function nestedArg(x,y,z) { var w = get_argumentsObject('ABC' , x+y+z); return w; }");
QScriptValue result2 = eng.evaluate("nestedArg(1, 'a', 2)");
QCOMPARE(result.isArray(), false);
QVERIFY(result.isObject());
QCOMPARE(result.property("length").toUInt32(), quint32(1));
QCOMPARE(result.property("0").isNumber(), true);
QCOMPARE(result.property("0").toNumber(), 123.0);
QVERIFY(result2.isObject());
QCOMPARE(result2.property("length").toUInt32(), quint32(2));
QCOMPARE(result2.property("0").toString(), QString::fromLatin1("ABC"));
QCOMPARE(result2.property("1").toString(), QString::fromLatin1("1a2"));
}
{
QScriptValue result = eng.evaluate(prefix+"get_argumentsObject(\"ciao\", null, true, undefined)");
QCOMPARE(result.isArray(), false);
QCOMPARE(result.property("length").toUInt32(), quint32(4));
QCOMPARE(result.property("0").isString(), true);
QCOMPARE(result.property("0").toString(), QString("ciao"));
QCOMPARE(result.property("1").isNull(), true);
QCOMPARE(result.property("2").isBoolean(), true);
QCOMPARE(result.property("2").toBoolean(), true);
QCOMPARE(result.property("3").isUndefined(), true);
}
//.........这里部分代码省略.........
示例6: iterateArray
void tst_QScriptValueIterator::iterateArray()
{
QFETCH(QStringList, propertyNames);
QFETCH(QStringList, propertyValues);
QScriptEngine engine;
QScriptValue array = engine.newArray();
// Fill the array
for (int i = 0; i < propertyNames.size(); ++i) {
array.setProperty(propertyNames.at(i), propertyValues.at(i));
}
// Iterate thru array properties. Note that the QScriptValueIterator doesn't guarantee
// any order on the iteration!
int length = array.property("length").toInt32();
QCOMPARE(length, propertyNames.size());
bool iteratedThruLength = false;
QHash<QString, QScriptValue> arrayProperties;
QScriptValueIterator it(array);
// Iterate forward
while (it.hasNext()) {
it.next();
const QString name = it.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it.value().isNumber());
QCOMPARE(it.value().toInt32(), length);
QCOMPARE(it.flags(), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
iteratedThruLength = true;
continue;
}
// Storing the properties we iterate in a hash to compare with test data.
QVERIFY2(!arrayProperties.contains(name), "property appeared more than once during iteration.");
arrayProperties.insert(name, it.value());
QCOMPARE(it.flags(), array.propertyFlags(name));
QVERIFY(it.value().strictlyEquals(array.property(name)));
}
// Verify properties
QVERIFY(iteratedThruLength);
QCOMPARE(arrayProperties.size(), propertyNames.size());
for (int i = 0; i < propertyNames.size(); ++i) {
QVERIFY(arrayProperties.contains(propertyNames.at(i)));
QCOMPARE(arrayProperties.value(propertyNames.at(i)).toString(), propertyValues.at(i));
}
// Iterate backwards
arrayProperties.clear();
iteratedThruLength = false;
it.toBack();
while (it.hasPrevious()) {
it.previous();
const QString name = it.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it.value().isNumber());
QCOMPARE(it.value().toInt32(), length);
QCOMPARE(it.flags(), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
iteratedThruLength = true;
continue;
}
// Storing the properties we iterate in a hash to compare with test data.
QVERIFY2(!arrayProperties.contains(name), "property appeared more than once during iteration.");
arrayProperties.insert(name, it.value());
QCOMPARE(it.flags(), array.propertyFlags(name));
QVERIFY(it.value().strictlyEquals(array.property(name)));
}
// Verify properties
QVERIFY(iteratedThruLength);
QCOMPARE(arrayProperties.size(), propertyNames.size());
for (int i = 0; i < propertyNames.size(); ++i) {
QVERIFY(arrayProperties.contains(propertyNames.at(i)));
QCOMPARE(arrayProperties.value(propertyNames.at(i)).toString(), propertyValues.at(i));
}
// ### Do we still need this test?
// Forward test again but as object
arrayProperties.clear();
iteratedThruLength = false;
QScriptValue arrayObject = engine.toObject(array);
QScriptValueIterator it2(arrayObject);
while (it2.hasNext()) {
it2.next();
const QString name = it2.name();
if (name == QString::fromLatin1("length")) {
QVERIFY(it2.value().isNumber());
QCOMPARE(it2.value().toInt32(), length);
QCOMPARE(it2.flags(), QScriptValue::SkipInEnumeration | QScriptValue::Undeletable);
QVERIFY2(!iteratedThruLength, "'length' appeared more than once during iteration.");
//.........这里部分代码省略.........