kazurayam / inspectus

The Inspectus library enables automated UI tests in Java/Groovy to perform "Visual Inspection" on top of the "materialstore"
Apache License 2.0
0 stars 0 forks source link

java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 34 JobName "CURA" is not found in C:\Users\uraya\github\MyVisualInspectionProject\store-backup #69

Open kazurayam opened 1 year ago

kazurayam commented 1 year ago

I created a new Katalon Studio project on Windows PC where neither of store and store-backup directory are there. When I executed "Test Cases/CURA/main", I got the followin Exception.

2022-12-17 09:48:59.692 INFO  c.k.k.c.keyword.builtin.CommentKeyword   - step0_restorePrevious finished
2022-12-17 09:48:59.740 ERROR c.k.katalon.core.main.TestCaseExecutor   - ❌ Test Cases/CURA/main FAILED.
Reason:
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 34
JobName "CURA" is not found in C:\Users\uraya\github\MyVisualInspectionProject\store-backup
                                  ^
    at com.kazurayam.inspectus.core.internal.ChronosDiff.step1_restorePrevious(ChronosDiff.java:46)
    at com.kazurayam.inspectus.core.internal.ChronosDiff.process(ChronosDiff.java:31)
    at com.kazurayam.inspectus.core.Inspectus.execute(Inspectus.java:11)
    at com.kazurayam.inspectus.core.Inspectus$execute.call(Unknown Source)
    at main.run(main:43)
    at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
    at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
    at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:448)
    at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:439)
    at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:418)
    at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:410)
    at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:285)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:142)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:133)
    at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
    at TempTestCase1671238128263.run(TempTestCase1671238128263.groovy:25)

2022-12-17 09:48:59.773 ERROR c.k.katalon.core.main.TestCaseExecutor   - ❌ Test Cases/CURA/main FAILED.
Reason:
java.util.regex.PatternSyntaxException: Illegal/unsupported escape sequence near index 34
JobName "CURA" is not found in C:\Users\uraya\github\MyVisualInspectionProject\store-backup
                                  ^
    at com.kazurayam.inspectus.core.internal.ChronosDiff.step1_restorePrevious(ChronosDiff.java:46)
    at com.kazurayam.inspectus.core.internal.ChronosDiff.process(ChronosDiff.java:31)
    at com.kazurayam.inspectus.core.Inspectus.execute(Inspectus.java:11)
    at com.kazurayam.inspectus.core.Inspectus$execute.call(Unknown Source)
    at main.run(main:43)
    at com.kms.katalon.core.main.ScriptEngine.run(ScriptEngine.java:194)
    at com.kms.katalon.core.main.ScriptEngine.runScriptAsRawText(ScriptEngine.java:119)
    at com.kms.katalon.core.main.TestCaseExecutor.runScript(TestCaseExecutor.java:448)
    at com.kms.katalon.core.main.TestCaseExecutor.doExecute(TestCaseExecutor.java:439)
    at com.kms.katalon.core.main.TestCaseExecutor.processExecutionPhase(TestCaseExecutor.java:418)
    at com.kms.katalon.core.main.TestCaseExecutor.accessMainPhase(TestCaseExecutor.java:410)
    at com.kms.katalon.core.main.TestCaseExecutor.execute(TestCaseExecutor.java:285)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:142)
    at com.kms.katalon.core.main.TestCaseMain.runTestCase(TestCaseMain.java:133)
    at com.kms.katalon.core.main.TestCaseMain$runTestCase$0.call(Unknown Source)
    at TempTestCase1671238128263.run(TempTestCase1671238128263.groovy:25)

2022-12-17 09:48:59.804 INFO  c.k.katalon.core.main.TestCaseExecutor   - END Test Cases/CURA/main
kazurayam commented 1 year ago

v0.8.1 ChronosDiff class https://github.com/kazurayam/inspectus/blob/0.8.1/src/main/java/com/kazurayam/inspectus/core/internal/ChronosDiff.java

has the following code:

    public Intermediates step1_restorePrevious(Parameters parameters,
                                               Intermediates intermediates)
            throws InspectusException {
        Store backup = parameters.getBackup();
        Store store = parameters.getStore();
        JobName jobName = parameters.getJobName();
        try {
            StoreImport importer = StoreImport.newInstance(backup, store);
            importer.importReports(jobName);
        } catch (MaterialstoreException e) {
            if (e.getMessage().matches(
                    String.format("JobName \"%s\" is not found in %s", jobName, backup))) {
                logger.warn(e.getMessage());
                logger.info("This warning may happen. You should try again.");
            } else {
                throw new InspectusException(e);
            }
        }
        return Intermediates.builder(intermediates).build();
    }

This code is not robust enough.

  1. It should check out the case where the store-back is not there at all. Then it should quickly throw InspectusException with appropriate message.
  2. I should not use String#matches() method that involves Regular expression. Regex is sensitve about \ character. This makes things fragile. I need to be more careful.