new command: timeout-false
This commit is contained in:
		@@ -9,8 +9,8 @@
 | 
				
			|||||||
# change this:
 | 
					# change this:
 | 
				
			||||||
m4_define(x_package_name, webtester) # project's name
 | 
					m4_define(x_package_name, webtester) # project's name
 | 
				
			||||||
m4_define(x_major, 3) # project's major version
 | 
					m4_define(x_major, 3) # project's major version
 | 
				
			||||||
m4_define(x_minor, 0) # project's minor version
 | 
					m4_define(x_minor, 1) # project's minor version
 | 
				
			||||||
m4_define(x_least_diff, 123)
 | 
					m4_define(x_least_diff, 129)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# never edit this block:
 | 
					# never edit this block:
 | 
				
			||||||
m4_include(ax_init_standard_project.m4)
 | 
					m4_include(ax_init_standard_project.m4)
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -25,7 +25,7 @@
 | 
				
			|||||||
;;   echo $(webrunner -h | sed -n 's,  COMMAND: ,,p') | sed 's, ,\\\\|,g'
 | 
					;;   echo $(webrunner -h | sed -n 's,  COMMAND: ,,p') | sed 's, ,\\\\|,g'
 | 
				
			||||||
(defconst wt-font-lock-keywords
 | 
					(defconst wt-font-lock-keywords
 | 
				
			||||||
  (list
 | 
					  (list
 | 
				
			||||||
   '("^ *\\(auth\\|ca-certificate\\|call\\|case\\|default\\|check\\|clear-cookies\\|click\\|clicktype\\|client-certificate\\|do\\|download\\|echo\\|execute\\|exists\\|exit\\|expect\\|fail\\|for\\|function\\|if\\|else\\|while\\|ignore\\|unignore\\|ignoreto\\|include\\|label\\|load\\|not\\|offline-storage-path\\|open\\|screenshot\\|set\\|setvalue\\|sleep\\|testcase\\|testsuite\\|timeout\\|unset\\|upload\\)\\b" . font-lock-builtin-face)
 | 
					   '("^ *\\(auth\\|ca-certificate\\|call\\|case\\|default\\|check\\|clear-cookies\\|click\\|clicktype\\|client-certificate\\|do\\|download\\|echo\\|execute\\|exists\\|exit\\|expect\\|fail\\|for\\|function\\|if\\|else\\|while\\|ignore\\|unignore\\|ignoreto\\|include\\|label\\|load\\|not\\|offline-storage-path\\|open\\|screenshot\\|set\\|setvalue\\|sleep\\|testcase\\|testsuite\\|timeout\\|timeout-false\\|unset\\|upload\\)\\b" . font-lock-builtin-face)
 | 
				
			||||||
   '("^ *#.*$" . font-lock-comment-face))
 | 
					   '("^ *#.*$" . font-lock-comment-face))
 | 
				
			||||||
  "Highlighting expressions for Webtester")
 | 
					  "Highlighting expressions for Webtester")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -495,7 +495,9 @@ class Script: public QObject {
 | 
				
			|||||||
  public:
 | 
					  public:
 | 
				
			||||||
    Script():
 | 
					    Script():
 | 
				
			||||||
        _step(0), _clicktype(JAVASCRIPT_CLICK),
 | 
					        _step(0), _clicktype(JAVASCRIPT_CLICK),
 | 
				
			||||||
        _screenshots(true), _defaultTimeout(20) {
 | 
					        _screenshots(true),
 | 
				
			||||||
 | 
					        _defaultTimeout(10),
 | 
				
			||||||
 | 
					        _defaultTimeoutFalse(3) {
 | 
				
			||||||
      initPrototypes();
 | 
					      initPrototypes();
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    Script(const Script& o):
 | 
					    Script(const Script& o):
 | 
				
			||||||
@@ -599,6 +601,7 @@ class Script: public QObject {
 | 
				
			|||||||
      _variables.clear();
 | 
					      _variables.clear();
 | 
				
			||||||
      _rvariables.clear();
 | 
					      _rvariables.clear();
 | 
				
			||||||
      _timeout = _defaultTimeout;
 | 
					      _timeout = _defaultTimeout;
 | 
				
			||||||
 | 
					      _timeoutFalse = _defaultTimeoutFalse;
 | 
				
			||||||
      _step = 0;
 | 
					      _step = 0;
 | 
				
			||||||
      _clicktype = JAVASCRIPT_CLICK;
 | 
					      _clicktype = JAVASCRIPT_CLICK;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
@@ -651,7 +654,8 @@ class Script: public QObject {
 | 
				
			|||||||
      bool res(true);
 | 
					      bool res(true);
 | 
				
			||||||
      _step = 0;
 | 
					      _step = 0;
 | 
				
			||||||
      _testsuites = testsuites;
 | 
					      _testsuites = testsuites;
 | 
				
			||||||
      _timeout = _defaultTimeout; // defaults to 20s
 | 
					      _timeout = _defaultTimeout;
 | 
				
			||||||
 | 
					      _timeoutFalse = _defaultTimeoutFalse;
 | 
				
			||||||
      _ignoreSignalsUntil.clear();
 | 
					      _ignoreSignalsUntil.clear();
 | 
				
			||||||
      addSignals(frame);
 | 
					      addSignals(frame);
 | 
				
			||||||
      _screenshots = screenshots;
 | 
					      _screenshots = screenshots;
 | 
				
			||||||
@@ -929,7 +933,9 @@ class Script: public QObject {
 | 
				
			|||||||
      _variables = o._variables;
 | 
					      _variables = o._variables;
 | 
				
			||||||
      _rvariables = o._rvariables;
 | 
					      _rvariables = o._rvariables;
 | 
				
			||||||
      _timeout = o._timeout;
 | 
					      _timeout = o._timeout;
 | 
				
			||||||
 | 
					      _timeoutFalse = o._timeoutFalse;
 | 
				
			||||||
      _defaultTimeout = o._timeout;
 | 
					      _defaultTimeout = o._timeout;
 | 
				
			||||||
 | 
					      _defaultTimeoutFalse = o._timeoutFalse;
 | 
				
			||||||
      _clicktype = o._clicktype;
 | 
					      _clicktype = o._clicktype;
 | 
				
			||||||
      _testsuites = o._testsuites;
 | 
					      _testsuites = o._testsuites;
 | 
				
			||||||
      _testclass = o._testclass;
 | 
					      _testclass = o._testclass;
 | 
				
			||||||
@@ -965,9 +971,18 @@ class Script: public QObject {
 | 
				
			|||||||
    int timeout() {
 | 
					    int timeout() {
 | 
				
			||||||
      return _timeout;
 | 
					      return _timeout;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    void timeoutFalse(int t) {
 | 
				
			||||||
 | 
					      _timeoutFalse = t;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    int timeoutFalse() {
 | 
				
			||||||
 | 
					      return _timeoutFalse;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    void defaultTimeout(int t) {
 | 
					    void defaultTimeout(int t) {
 | 
				
			||||||
      _defaultTimeout = t;
 | 
					      _defaultTimeout = t;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					    void defaultTimeoutFalse(int t) {
 | 
				
			||||||
 | 
					      _defaultTimeoutFalse = t;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
    void auth(const QString& realm, const QString& username, const QString& password) {
 | 
					    void auth(const QString& realm, const QString& username, const QString& password) {
 | 
				
			||||||
      if (!username.isEmpty() && !password.isEmpty())
 | 
					      if (!username.isEmpty() && !password.isEmpty())
 | 
				
			||||||
        _auth[realm] = {username, password};
 | 
					        _auth[realm] = {username, password};
 | 
				
			||||||
@@ -1202,7 +1217,9 @@ class Script: public QObject {
 | 
				
			|||||||
    QMap<LenString, LenString> _rvariables; ///< reverse variable mapping
 | 
					    QMap<LenString, LenString> _rvariables; ///< reverse variable mapping
 | 
				
			||||||
    QMap<QString, std::shared_ptr<Function> > _functions;
 | 
					    QMap<QString, std::shared_ptr<Function> > _functions;
 | 
				
			||||||
    int _timeout;
 | 
					    int _timeout;
 | 
				
			||||||
 | 
					    int _timeoutFalse;
 | 
				
			||||||
    int _defaultTimeout;
 | 
					    int _defaultTimeout;
 | 
				
			||||||
 | 
					    int _defaultTimeoutFalse;
 | 
				
			||||||
    ClickType _clicktype;
 | 
					    ClickType _clicktype;
 | 
				
			||||||
    QString _targetdir;
 | 
					    QString _targetdir;
 | 
				
			||||||
    std::shared_ptr<xml::Node> _testsuites; ///< only valid within run
 | 
					    std::shared_ptr<xml::Node> _testsuites; ///< only valid within run
 | 
				
			||||||
@@ -1664,8 +1681,7 @@ class Not: public Command {
 | 
				
			|||||||
      Logger log(this, script);
 | 
					      Logger log(this, script);
 | 
				
			||||||
      QString selector(script->replacevars(_selector));
 | 
					      QString selector(script->replacevars(_selector));
 | 
				
			||||||
      QString text(script->replacevars(_text));
 | 
					      QString text(script->replacevars(_text));
 | 
				
			||||||
      QWebElement firstelement(find(frame, selector,
 | 
					      QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1));
 | 
				
			||||||
                                    mrw::max(mrw::min(script->timeout()/3, 10), 2)));
 | 
					 | 
				
			||||||
      for (QWebElement element: frame->findAllElements(selector)) {
 | 
					      for (QWebElement element: frame->findAllElements(selector)) {
 | 
				
			||||||
        if (text.isEmpty())
 | 
					        if (text.isEmpty())
 | 
				
			||||||
          error(log, AssertionFailed("element must not exists: "+selector));
 | 
					          error(log, AssertionFailed("element must not exists: "+selector));
 | 
				
			||||||
@@ -1979,7 +1995,7 @@ class Timeout: public Command {
 | 
				
			|||||||
      return
 | 
					      return
 | 
				
			||||||
        tag()+" <seconds>"
 | 
					        tag()+" <seconds>"
 | 
				
			||||||
        "\n\n--\n\n"
 | 
					        "\n\n--\n\n"
 | 
				
			||||||
        "Set the timeout in seconds (defaults to 10).";
 | 
					        "Set the timeout in seconds.";
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
    QString command() const {
 | 
					    QString command() const {
 | 
				
			||||||
      return tag()+" "+_timeout;
 | 
					      return tag()+" "+_timeout;
 | 
				
			||||||
@@ -1997,6 +2013,47 @@ class Timeout: public Command {
 | 
				
			|||||||
      if (!ok) error(log, BadArgument(script->replacevars(_timeout)
 | 
					      if (!ok) error(log, BadArgument(script->replacevars(_timeout)
 | 
				
			||||||
                                      +" should be a number of seconds"));
 | 
					                                      +" should be a number of seconds"));
 | 
				
			||||||
      script->timeout(timeout);
 | 
					      script->timeout(timeout);
 | 
				
			||||||
 | 
					      script->defaultTimeout(timeout);
 | 
				
			||||||
 | 
					      return true;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  private:
 | 
				
			||||||
 | 
					    QString _timeout;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class TimeoutFalse: public Command {
 | 
				
			||||||
 | 
					  public:
 | 
				
			||||||
 | 
					    QString tag() const {
 | 
				
			||||||
 | 
					      return "timeout-false";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    QString description() const {
 | 
				
			||||||
 | 
					      return
 | 
				
			||||||
 | 
					        tag()+" <seconds>"
 | 
				
			||||||
 | 
					        "\n\n--\n\n"
 | 
				
			||||||
 | 
					        "Set the timeout for negative testcases in seconds."
 | 
				
			||||||
 | 
					        " Time to wait until a negative testcase is accepted. It is used in"
 | 
				
			||||||
 | 
					        " commands such as not, if or while, where a fail is the expected or at"
 | 
				
			||||||
 | 
					        " least a valid result. Normally, this timeout can be lower than the"
 | 
				
			||||||
 | 
					        " normal timeout. This is, because to verify that something does not"
 | 
				
			||||||
 | 
					        " exists, the test run has always to wait for the full timeout. So"
 | 
				
			||||||
 | 
					        " setting this to a lower value increases the speed of the test run.";
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    QString command() const {
 | 
				
			||||||
 | 
					      return tag()+" "+_timeout;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    std::shared_ptr<Command> parse(Script*, QString args,
 | 
				
			||||||
 | 
					                                   QStringList&, QString, int, int) {
 | 
				
			||||||
 | 
					      std::shared_ptr<TimeoutFalse> cmd(new TimeoutFalse());
 | 
				
			||||||
 | 
					      cmd->_timeout = args;
 | 
				
			||||||
 | 
					      return cmd;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					    bool execute(Script* script, QWebFrame*) {
 | 
				
			||||||
 | 
					      Logger log(this, script);
 | 
				
			||||||
 | 
					      bool ok;
 | 
				
			||||||
 | 
					      int timeout(script->replacevars(_timeout).toInt(&ok));
 | 
				
			||||||
 | 
					      if (!ok) error(log, BadArgument(script->replacevars(_timeout)
 | 
				
			||||||
 | 
					                                      +" should be a number of seconds"));
 | 
				
			||||||
 | 
					      script->timeoutFalse(timeout);
 | 
				
			||||||
 | 
					      script->defaultTimeoutFalse(timeout);
 | 
				
			||||||
      return true;
 | 
					      return true;
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  private:
 | 
					  private:
 | 
				
			||||||
@@ -2371,8 +2428,7 @@ class If: public CommandContainer {
 | 
				
			|||||||
      QString selector(script->replacevars(_variable));
 | 
					      QString selector(script->replacevars(_variable));
 | 
				
			||||||
      bool check(false);
 | 
					      bool check(false);
 | 
				
			||||||
      if (_cmp=="->") {
 | 
					      if (_cmp=="->") {
 | 
				
			||||||
        QWebElement firstelement(find(frame, selector,
 | 
					        QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1));
 | 
				
			||||||
                                      mrw::max(mrw::min(script->timeout()/3, 10), 2)));
 | 
					 | 
				
			||||||
        for (QWebElement element: frame->findAllElements(selector)) {
 | 
					        for (QWebElement element: frame->findAllElements(selector)) {
 | 
				
			||||||
          if (value.isEmpty() || // just find element
 | 
					          if (value.isEmpty() || // just find element
 | 
				
			||||||
              element.toOuterXml().indexOf(value)!=-1 ||
 | 
					              element.toOuterXml().indexOf(value)!=-1 ||
 | 
				
			||||||
@@ -2478,8 +2534,7 @@ class While: public CommandContainer {
 | 
				
			|||||||
      for (bool check(true); check;) {
 | 
					      for (bool check(true); check;) {
 | 
				
			||||||
        if (_cmp=="->") {
 | 
					        if (_cmp=="->") {
 | 
				
			||||||
          check = false;
 | 
					          check = false;
 | 
				
			||||||
          QWebElement firstelement(find(frame, selector,
 | 
					          QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1));
 | 
				
			||||||
                                        mrw::max(mrw::min(script->timeout()/3, 10), 2)));
 | 
					 | 
				
			||||||
          for (QWebElement element: frame->findAllElements(selector)) {
 | 
					          for (QWebElement element: frame->findAllElements(selector)) {
 | 
				
			||||||
            if (value.isEmpty() || // just find element
 | 
					            if (value.isEmpty() || // just find element
 | 
				
			||||||
                element.toOuterXml().indexOf(value)!=-1 ||
 | 
					                element.toOuterXml().indexOf(value)!=-1 ||
 | 
				
			||||||
@@ -2942,8 +2997,7 @@ class Case: public Command {
 | 
				
			|||||||
          log("terminate with default branch");
 | 
					          log("terminate with default branch");
 | 
				
			||||||
          check = true;
 | 
					          check = true;
 | 
				
			||||||
        } else if (condition.cmp=="->") {
 | 
					        } else if (condition.cmp=="->") {
 | 
				
			||||||
          QWebElement firstelement(find(frame, selector,
 | 
					          QWebElement firstelement(find(frame, selector, script->timeoutFalse()-1));
 | 
				
			||||||
                                        mrw::max(mrw::min(script->timeout()/3, 10), 2)));
 | 
					 | 
				
			||||||
          for (QWebElement element: frame->findAllElements(selector)) {
 | 
					          for (QWebElement element: frame->findAllElements(selector)) {
 | 
				
			||||||
            if (value.isEmpty() || // just find element
 | 
					            if (value.isEmpty() || // just find element
 | 
				
			||||||
                element.toOuterXml().indexOf(value)!=-1 ||
 | 
					                element.toOuterXml().indexOf(value)!=-1 ||
 | 
				
			||||||
@@ -3283,6 +3337,7 @@ inline void Script::initPrototypes() {
 | 
				
			|||||||
  add(new Set);
 | 
					  add(new Set);
 | 
				
			||||||
  add(new UnSet);
 | 
					  add(new UnSet);
 | 
				
			||||||
  add(new Timeout);
 | 
					  add(new Timeout);
 | 
				
			||||||
 | 
					  add(new TimeoutFalse);
 | 
				
			||||||
  add(new CaCertificate);
 | 
					  add(new CaCertificate);
 | 
				
			||||||
  add(new ClientCertificate);
 | 
					  add(new ClientCertificate);
 | 
				
			||||||
  add(new ::ClickType);
 | 
					  add(new ::ClickType);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -19,7 +19,7 @@ class Highlighter: public QSyntaxHighlighter {
 | 
				
			|||||||
    void include(QString);
 | 
					    void include(QString);
 | 
				
			||||||
  public:
 | 
					  public:
 | 
				
			||||||
    Highlighter(QTextDocument *parent): QSyntaxHighlighter(parent) {
 | 
					    Highlighter(QTextDocument *parent): QSyntaxHighlighter(parent) {
 | 
				
			||||||
      QString commands="auth|ca-certificate|call|case|default|check|clear-cookies|click|clicktype|client-certificate|do|download|echo|execute|exists|exit|expect|fail|for|function|if|else|while|ignore|unignore|ignoreto|include|label|load|not|offline-storage-path|open|screenshot|set|setvalue|sleep|testcase|testsuite|timeout|unset|upload";
 | 
					      QString commands="auth|ca-certificate|call|case|default|check|clear-cookies|click|clicktype|client-certificate|do|download|echo|execute|exists|exit|expect|fail|for|function|if|else|while|ignore|unignore|ignoreto|include|label|load|not|offline-storage-path|open|screenshot|set|setvalue|sleep|testcase|testsuite|timeout|timeout-false|unset|upload";
 | 
				
			||||||
      _expressions<<Expression("^ *("+commands+")\\b").weight(QFont::Bold).fg(Qt::darkBlue)
 | 
					      _expressions<<Expression("^ *("+commands+")\\b").weight(QFont::Bold).fg(Qt::darkBlue)
 | 
				
			||||||
                  <<Expression("^ *#.*$").weight(QFont::Bold).fg(Qt::black);
 | 
					                  <<Expression("^ *#.*$").weight(QFont::Bold).fg(Qt::black);
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user