QString JSONParser::getValue(const QString &jsonStr, const QString &key) { QString token(getToken(jsonStr, key, QString(","))); token.remove(QRegExp("[\"}]")); QStringList tokenValues(token.split(": ")); QString value; if(tokenValues.count() == 2) value = tokenValues[1].trimmed(); return value; }
QString Authorize::getValue(const QString& jsonStr, const QString& key) { QString token(getToken(jsonStr, key, QString::fromLatin1(","))); token.remove(QRegExp(QString::fromLatin1("[\"}]"))); QStringList tokenValues(token.split(QString::fromLatin1(": "))); QString value; if (tokenValues.count() == 2) value = tokenValues[1].trimmed(); return value; }
void valueFlowCalculations() { const char *code; /* code = "void f() {\n" " x = 123+456;\n" "}"; ASSERT_EQUALS(579, valueOfTok(code, "+").intvalue); */ code = "void f(int x) {\n" " a = x+456;\n" " if (x==123) {}" "}"; ASSERT_EQUALS(579, valueOfTok(code, "+").intvalue); code = "void f(int x, int y) {\n" " a = x+y;\n" " if (x==123 || y==456) {}" "}"; ASSERT_EQUALS(0, valueOfTok(code, "+").intvalue); code = "void f(int x) {\n" " a = x+x;\n" " if (x==123) {}" "}"; ASSERT_EQUALS(246, valueOfTok(code, "+").intvalue); code = "void f(int x, int y) {\n" " a = x*x;\n" " if (x==2) {}\n" " if (x==4) {}\n" "}"; std::list<ValueFlow::Value> values = tokenValues(code,"*"); ASSERT_EQUALS(2U, values.size()); ASSERT_EQUALS(4, values.front().intvalue); ASSERT_EQUALS(16, values.back().intvalue); }
ValueFlow::Value valueOfTok(const char code[], const char tokstr[]) { std::list<ValueFlow::Value> values = tokenValues(code, tokstr); return values.size() == 1U ? values.front() : ValueFlow::Value(); }
void valueFlowCalculations() { const char *code; /* code = "void f() {\n" " x = 123+456;\n" "}"; ASSERT_EQUALS(579, valueOfTok(code, "+").intvalue); */ code = "void f(int x) {\n" " a = x+456;\n" " if (x==123) {}" "}"; ASSERT_EQUALS(579, valueOfTok(code, "+").intvalue); code = "void f(int x, int y) {\n" " a = x+y;\n" " if (x==123 || y==456) {}" "}"; ASSERT_EQUALS(0, valueOfTok(code, "+").intvalue); code = "void f(int x) {\n" " a = x+x;\n" " if (x==123) {}" "}"; ASSERT_EQUALS(246, valueOfTok(code, "+").intvalue); code = "void f(int x, int y) {\n" " a = x*x;\n" " if (x==2) {}\n" " if (x==4) {}\n" "}"; std::list<ValueFlow::Value> values = tokenValues(code,"*"); ASSERT_EQUALS(2U, values.size()); ASSERT_EQUALS(4, values.front().intvalue); ASSERT_EQUALS(16, values.back().intvalue); // function call => calculation code = "void f(int x) {\n" " a = x + 8;\n" "}\n" "void callf() {\n" " f(7);\n" "}"; ASSERT_EQUALS(15, valueOfTok(code, "+").intvalue); code = "void f(int x, int y) {\n" " a = x + y;\n" "}\n" "void callf() {\n" " f(1,1);\n" " f(10,10);\n" "}"; values = tokenValues(code, "+"); ASSERT_EQUALS(true, values.empty()); if (!values.empty()) { /* todo.. */ ASSERT_EQUALS(2U, values.size()); ASSERT_EQUALS(2, values.front().intvalue); ASSERT_EQUALS(22, values.back().intvalue); } }