if an while allow not in the comparision
This commit is contained in:
@@ -2365,7 +2365,7 @@ class If: public CommandContainer {
|
||||
}
|
||||
QString description() const {
|
||||
return
|
||||
tag()+" <variable> <cmp> <value>\n"
|
||||
tag()+" [not] <variable> <cmp> <value>\n"
|
||||
" <command1>\n"
|
||||
" <command2>\n"
|
||||
" <...>\n"
|
||||
@@ -2374,7 +2374,7 @@ class If: public CommandContainer {
|
||||
" <command4>\n"
|
||||
" <...>\n"
|
||||
"\n\n"+
|
||||
tag()+" <selector> -> <text>\n"
|
||||
tag()+" [not] <selector> -> <text>\n"
|
||||
" <command1>\n"
|
||||
" <command2>\n"
|
||||
" <...>\n"
|
||||
@@ -2392,10 +2392,11 @@ class If: public CommandContainer {
|
||||
"The second variant checks for a text in a selector, "
|
||||
"similar to command exists. The text can be empty to just "
|
||||
"check for the existence of a selector. "
|
||||
"There is an optional else part.";
|
||||
"There is an optional else part. Optionally start with "
|
||||
"not to invert the test.";
|
||||
}
|
||||
QString command() const {
|
||||
return tag()+" "+_variable+" "+_cmp+" "+_value
|
||||
return tag()+(_not?" not ":" ")+_variable+" "+_cmp+" "+_value
|
||||
+(_script.get()?"\n "+_script->print().join("\n "):"")
|
||||
+(_else.get()?"\nelse\n "+_else->print().join("\n "):"");
|
||||
}
|
||||
@@ -2403,6 +2404,11 @@ class If: public CommandContainer {
|
||||
QStringList& in, QString file, int line,
|
||||
int indent) {
|
||||
std::shared_ptr<If> cmd(new If());
|
||||
QRegularExpressionMatch m;
|
||||
if (args.contains(QRegularExpression("^ *not +"), &m)) {
|
||||
args.remove(0, m.capturedLength());
|
||||
cmd->_not = true;
|
||||
}
|
||||
int pos(args.indexOf(QRegularExpression("[=!.^~<>]")));
|
||||
int len(1);
|
||||
if (args.contains("->")) {
|
||||
@@ -2437,8 +2443,9 @@ class If: public CommandContainer {
|
||||
break;
|
||||
}
|
||||
}
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")+": "
|
||||
+selector+" "+_cmp+" "+value);
|
||||
if (_not) check=!check;
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")
|
||||
+(_not?": not ":": ")+selector+" "+_cmp+" "+value);
|
||||
} else {
|
||||
switch (_cmp[0].toLatin1()) {
|
||||
case '=': check = script->variable(_variable)==value;
|
||||
@@ -2458,8 +2465,9 @@ class If: public CommandContainer {
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")+": "
|
||||
+script->variable(_variable)+" "+_cmp+" "+value);
|
||||
if (_not) check=!check;
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")
|
||||
+(_not?": not ":": ")+script->variable(_variable)+" "+_cmp+" "+value);
|
||||
}
|
||||
if (check) return runScript(log, this, _script, script, frame);
|
||||
else if (_else) return runScript(log, this, _else, script, frame);
|
||||
@@ -2475,6 +2483,7 @@ class If: public CommandContainer {
|
||||
QString _cmp;
|
||||
QString _value;
|
||||
std::shared_ptr<Script> _else;
|
||||
bool _not = false;
|
||||
};
|
||||
|
||||
class While: public CommandContainer {
|
||||
@@ -2484,12 +2493,12 @@ class While: public CommandContainer {
|
||||
}
|
||||
QString description() const {
|
||||
return
|
||||
tag()+" <variable> <cmp> <value>\n"
|
||||
tag()+ " [not] <variable> <cmp> <value>\n"
|
||||
" <command1>\n"
|
||||
" <command2>\n"
|
||||
" <...>\n"
|
||||
"\n\n"+
|
||||
tag()+" <selector> -> <text>\n"
|
||||
tag()+" [not] <selector> -> <text>\n"
|
||||
" <command1>\n"
|
||||
" <command2>\n"
|
||||
" <...>\n"
|
||||
@@ -2502,16 +2511,22 @@ class While: public CommandContainer {
|
||||
"Match allows a regular expression. "
|
||||
"The second variant checks for a text in a selector, "
|
||||
"similar to command exists. The text can be empty to just "
|
||||
"check for the existence of a selector.";
|
||||
"check for the existence of a selector. Optionally start with "
|
||||
"not to invert the test.";
|
||||
}
|
||||
QString command() const {
|
||||
return tag()+" "+_variable+" "+_cmp+" "+_value
|
||||
return tag()+(_not?" not ":" ")+_variable+" "+_cmp+" "+_value
|
||||
+(_script.get()?"\n "+_script->print().join("\n "):"");
|
||||
}
|
||||
std::shared_ptr<Command> parse(Script* script, QString args,
|
||||
QStringList& in, QString file, int line,
|
||||
int indent) {
|
||||
std::shared_ptr<While> cmd(new While());
|
||||
QRegularExpressionMatch m;
|
||||
if (args.contains(QRegularExpression("^ *not +"), &m)) {
|
||||
args.remove(0, m.capturedLength());
|
||||
cmd->_not = true;
|
||||
}
|
||||
int pos(args.indexOf(QRegularExpression("[=!.^~<>]")));
|
||||
int len(1);
|
||||
if (args.contains("->")) {
|
||||
@@ -2543,8 +2558,9 @@ class While: public CommandContainer {
|
||||
break;
|
||||
}
|
||||
}
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")+": "
|
||||
+selector+" "+_cmp+" "+value);
|
||||
if (_not) check=!check;
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")
|
||||
+(_not?": not ":": ")+selector+" "+_cmp+" "+value);
|
||||
} else {
|
||||
switch (_cmp[0].toLatin1()) {
|
||||
case '=': check = script->variable(_variable)==value;
|
||||
@@ -2564,8 +2580,9 @@ class While: public CommandContainer {
|
||||
break;
|
||||
default:;
|
||||
}
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")+": "
|
||||
+script->variable(_variable)+" "+_cmp+" "+value);
|
||||
if (_not) check=!check;
|
||||
log(QString("evaluated expression to ")+(check?"true":"false")
|
||||
+(_not?": not ":": ")+script->variable(_variable)+" "+_cmp+" "+value);
|
||||
}
|
||||
if (check) if (!runScript(log, this, _script, script, frame)) return false;
|
||||
}
|
||||
@@ -2575,6 +2592,7 @@ class While: public CommandContainer {
|
||||
QString _variable;
|
||||
QString _cmp;
|
||||
QString _value;
|
||||
bool _not = false;
|
||||
};
|
||||
|
||||
class TestSuite: public Command {
|
||||
|
Reference in New Issue
Block a user