commit 8f74cac381c286fce559072baf3958cf6643a05b
Author: Kornel Benko <[email protected]>
Date:   Thu May 18 13:05:36 2017 +0200

    keytests: Add more controls for the *-in.txt files
    
    The controls are described in hello-world-in.txt as
    Cr: not expected regex search pattern before next expected match
    Cp: not expected search pattern before next expected match
    
    See also findadv-re-04-in.txt for an example
    In this test-case, searching for case sensitive and format considering
    search is failing.
---
 development/autotests/findadv-re-04-in.txt |   61 +++++++++++++++++++++++++++-
 development/autotests/keytest.py           |    6 ++-
 development/autotests/searchPatterns.pl    |   53 ++++++++++++++++++++++--
 3 files changed, 113 insertions(+), 7 deletions(-)

diff --git a/development/autotests/findadv-re-04-in.txt 
b/development/autotests/findadv-re-04-in.txt
index 36f4137..ae1ef42 100644
--- a/development/autotests/findadv-re-04-in.txt
+++ b/development/autotests/findadv-re-04-in.txt
@@ -1,14 +1,71 @@
 # Finding styles with regexp
 
 Lang sk_SK.utf8
+CO: findadv-re-04.ctrl
+CN: Part 1
+CP: Init key
 TestBegin test.lyx -dbg key,find > findadv-re-04.loga.txt 2>&1
-KK: Hello \CeHello\C\[Home]
+CP: Key (queried) [action=buffer-begin][Ctrl+Home]
+KK: The quick Brown \CeFox JUmps\Ce over the lazy Dog\[Return]
+KK: \C\[Home]
 KK: \Cs
 KK: \CF
 # Uncheck ignore format (depends on IT language)
 KK: \At\Ai\Ah
 KK: \Ce
+CN: Case insensitive, format not ignored .*
 KK: \Axregexp-mode\[Return].*\[Return]
+Cr: ^.*Putting 
+CP: Putting selection at .*idx: 0 par: 0 pos: 16\n with len: 9
+TestEnd
+
+CO: >> findadv-re-04.ctrl
+CN: Part 2
+CP: Init key
+TestBegin test.lyx -dbg key,find >> findadv-re-04.loga.txt 2>&1
+CN: Case insensitive, format not ignored [a-z]*
+KK: \CF
+# Uncheck ignore format (depends on IT language)
+KK: \At\Ai\Ah
+KK: \Ce
+KK: \Axregexp-mode\[Return][a-z]*\[Return]\[Return]\[Return]
+Cr: ^.*Putting 
+CP: Putting selection at .*idx: 0 par: 0 pos: 16\n with len: 3
+Cr: ^.*Putting 
+CP: Putting selection at .*idx: 0 par: 0 pos: 20\n with len: 5
+TestEnd
+
+CO: >> findadv-re-04.ctrl
+CN: Part 3
+CP: Init key
+TestBegin test.lyx -dbg key,find >> findadv-re-04.loga.txt 2>&1
+
+CN: Case sensitive, format not ignored [a-z]*
+KK: \CF
+KK: \At\Ai\Ah
+KK: \Ce
+KK: 
\Ao\[Tab]\Axregexp-mode\[Return][a-z]*\[Return]\[Return]\[Return]\[Return]\[Return]\[Return]\[Return]
+Cr: ^.*Putting
+CP: Putting selection at .*idx: 0 par: 0 pos: 17\n with len: 2
+Cr: ^.*Putting
+Cr: ^.*Init key
+CP: Putting selection at .*idx: 0 par: 0 pos: 22\n with len: 3
+TestEnd
+
+CO: >> findadv-re-04.ctrl
+CN: Part 4
+CP: Init key
+TestBegin test.lyx -dbg key,find >> findadv-re-04.loga.txt 2>&1
+
+CN: Case sensitive, format not ignored [A-Z]*
+KK: \CF
+KK: \At\Ai\Ah
+KK: \Ce
+KK: 
\Ao\[Tab]\Axregexp-mode\[Return][A-Z]*\[Return]\[Return]\[Return]\[Return]\[Return]
+Cr: ^.*Putting
+CP: Putting selection at .*idx: 0 par: 0 pos: 16\n with len: 1
+Cr: ^.*Putting
+CP: Putting selection at .*idx: 0 par: 0 pos: 20\n with len: 2
 TestEnd
 Lang C
-Assert pcregrep -M 'Putting selection at .*idx: 0 par: 0 pos: 6\n with len: 5' 
findadv-re-04.loga.txt
+Assert searchPatterns.pl log=findadv-re-04.loga.txt patterns=findadv-re-04.ctrl
diff --git a/development/autotests/keytest.py b/development/autotests/keytest.py
index 67bb3ca..2edd86b 100755
--- a/development/autotests/keytest.py
+++ b/development/autotests/keytest.py
@@ -164,7 +164,7 @@ class CommandSourceFromFile(CommandSource):
 class ControlFile:
 
     def __init__(self):
-        self.control = re.compile(r'^(C[ONPRC]):\s*(.*)$')
+        self.control = re.compile(r'^(C[ONPpRrC]):\s*(.*)$')
         self.fileformat = re.compile(r'^((\>\>?)[,\s]\s*)?([^\s]+)\s*$')
         self.cntrname = None
         self.cntrfile = None
@@ -220,8 +220,12 @@ class ControlFile:
                     self.__addline("Comment: " + text)
                 elif command == "CP":
                     self.__addline("Simple: " + text)
+                elif command == "Cp":
+                    self.__addline("ErrSimple: " + text)
                 elif command == "CR":
                     self.__addline("Regex: " + text)
+                elif command == "Cr":
+                    self.__addline("ErrRegex: " + text)
                 else:
                     die(1,"Error, Unrecognised Command '" + command + "'")
         return True
diff --git a/development/autotests/searchPatterns.pl 
b/development/autotests/searchPatterns.pl
index 7b3acf0..73a3572 100755
--- a/development/autotests/searchPatterns.pl
+++ b/development/autotests/searchPatterns.pl
@@ -17,6 +17,7 @@ sub readPatterns($);          # Process patterns file
 sub processLogFile($);         # 
 sub convertPattern($);         # check for regex, comment
 sub convertSimplePattern($);  # escape some chars, (e.g. ']' ==> '\]')
+sub printInvalid($$);        # display lines which should not match
 
 my %options = (
   "log" => undef,
@@ -92,12 +93,14 @@ sub convertPattern($)
     return("");
   }
   return $pat if ($pat =~ /^Comment:/);
-  if ($pat =~ s/^Regex:\s+//) {
+  if ($pat =~ s/^((Err)?Regex):\s+//) {
     # PassThrough variant
-    return($pat);
+    return($1 . ":" . $pat);
   }
-  elsif ($pat =~ s/^Simple:\s+//) {
-    return convertSimplePattern($pat);
+  elsif ($pat =~ s/^((Err)?Simple):\s+//) {
+    my $ermark = $2;
+    $ermark = "" if (!defined($ermark));
+    return $ermark . "Regex:" . &convertSimplePattern($pat);
   }
   else {
     # This should not happen.
@@ -168,6 +171,8 @@ sub processLogFile($)
   if (open(FL, $log)) {
     $errors = 0;
     my $line = 0;
+    my @ErrPatterns = ();
+    my $minprevlines = 0;
     for my $pat (@patterns) {
       if ($pat =~ /^Comment:\s*(.*)$/) {
        $comment = $1;
@@ -177,9 +182,25 @@ sub processLogFile($)
        }
        next;
       }
+      if ($pat =~ /^(Err)?Regex:(.*)$/) {
+       my ($type, $regex) = ($1, $2);
+       next if ($regex eq "");
+       if (defined($type)) {
+         # This regex should not apply until next 'found line'
+         my $erlines = () = $regex =~ /\\n/g;
+         $minprevlines = $erlines if ($erlines > $minprevlines);
+         push(@ErrPatterns, $regex);
+         next;
+       }
+       else {
+         # This is the pattern which we are looking for
+         $pat = $regex;
+       }
+      }
       #print "Searching for \"$pat\"\n";
       $found = 0;
       my $prevlines = () = $pat =~ /\\n/g; # Number of lines in pattern
+      $prevlines = $minprevlines if ($prevlines < $minprevlines);
       my @prevl = ();
       for (my $i = 0; $i <= $prevlines; $i++) {
        push(@prevl, "\n");
@@ -210,6 +231,8 @@ sub processLogFile($)
        my $check = join("", @prevl);
        $line++;
        if ($check =~ /$pat/) {
+         @ErrPatterns = ();    # clean search for not wanted patterns
+         $minprevlines = 0;
          my $fline = $line - $prevlines;
          print "$fline:\tfound \"$pat\"\n";
          $found = 1;
@@ -228,6 +251,18 @@ sub processLogFile($)
        }
        else {
          push(@savedlines, $l);
+         # Check for not wanted patterns
+         my $errindex = 0;
+         for my $ep (@ErrPatterns) {
+           if ($check =~ /$ep/) {
+             $errors++;
+             my $fline = $line - $prevlines;
+             printInvalid($fline, $check);
+             #splice(@ErrPatterns, $errindex, 1);
+             last;
+           }
+           $errindex++;
+         }
        }
       }
       if (! $found) {
@@ -240,3 +275,13 @@ sub processLogFile($)
   }
   return($errors);
 }
+
+sub printInvalid($$)
+{
+  my ($line, $check) = @_;
+  my @chk = split(/\n/, $check);
+  print("$line:\tInvalid match: " . shift(@chk) . "\n");
+  for my $l (@chk) {
+    print("\t\t\t$l\n");
+  }
+}

Reply via email to