cypress_test/.eslintrc              |    3 ++-
 cypress_test/eslint_plugin/index.js |   29 +++++++++++++++++++++++++++++
 2 files changed, 31 insertions(+), 1 deletion(-)

New commits:
commit 8853547ee0c414a894ef97f949e8af64d583af18
Author:     Tamás Zolnai <tamas.zol...@collabora.com>
AuthorDate: Mon Jun 1 13:22:14 2020 +0200
Commit:     Tamás Zolnai <tamas.zol...@collabora.com>
CommitDate: Mon Jun 1 14:09:53 2020 +0200

    cypress: add no-get-invoke-match-chain rule.
    
    We can avoid retriability problems caused by using
    this long chain as an indicator in tests.
    
    Change-Id: Iec78087d080c3759e446a061222eb4d9f4dd3ae5
    Reviewed-on: https://gerrit.libreoffice.org/c/online/+/95280
    Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com>
    Tested-by: Jenkins
    Reviewed-by: Tamás Zolnai <tamas.zol...@collabora.com>

diff --git a/cypress_test/.eslintrc b/cypress_test/.eslintrc
index 19001679f..2a4452399 100644
--- a/cypress_test/.eslintrc
+++ b/cypress_test/.eslintrc
@@ -2,7 +2,8 @@
   "extends": "../loleaflet/.eslintrc",
   "plugins": ["cypress-rules"],
   "rules": {
-      "cypress-rules/no-get-contains-chain": 2
+      "cypress-rules/no-get-contains-chain": 2,
+      "cypress-rules/no-get-invoke-match-chain": 2
   },
   "parserOptions": {
       "ecmaVersion": 6,
diff --git a/cypress_test/eslint_plugin/index.js 
b/cypress_test/eslint_plugin/index.js
index 4c2d71c16..d69d2ff60 100644
--- a/cypress_test/eslint_plugin/index.js
+++ b/cypress_test/eslint_plugin/index.js
@@ -26,6 +26,35 @@ module.exports = {
                                        }
                                };
                        }
+               },
+               'no-get-invoke-match-chain': {
+                       /**
+                       * Catches 
cy.get(selector).invoke('text').should('match',...) calls in the code.
+                       *
+                       * Issue: In cypress test framework only the last getter 
command is retried.
+                       * In this case it's the invoke method and so the get() 
method is
+                       * not retried. Sometimes, it behaves unexpectedly, 
because the test
+                       * retries to call the text method on an element, which 
might be removed
+                       * in the meantime. Instead of searching for a new 
element matching both
+                       * with the selector and the regular expression.
+                       *
+                       * Fix: We can use cy.contains(seletor, regexp) method 
instead.
+                       * This is a compact command which will retry to match 
both the
+                       * selector and the text matcher.
+                       *
+                       **/
+                       create: function(context) {
+                               return {
+                                       
'CallExpression[callee.property.name=\'should\'][callee.object.callee.property.name=\'invoke\'][callee.object.callee.object.callee.property.name=\'get\']':
 function(expr) {
+                                               if (expr.arguments && 
expr.arguments.length === 2 && expr.arguments[0].value === 'match' &&
+                                                       
expr.callee.object.arguments &&
+                                                       
expr.callee.object.arguments.length === 1 &&
+                                                       
expr.callee.object.arguments[0].value === 'text') {
+                                                       context.report(expr, 
'Do not use this long chain for matching text. Use cy.contains(selector, 
regexp) instead for better retriability!');
+                                               }
+                                       }
+                               };
+                       }
                }
        }
 };
_______________________________________________
Libreoffice-commits mailing list
libreoffice-comm...@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits

Reply via email to