mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-11-22 01:59:02 +00:00
keytests: New script to replace 'pcregrep' in more complex cases.
Suppose, we want to test a key sequence which should produce logs in defined sequence. ATM, we use pcregrep to see, if a pattern occurs in the log-file. This is OK, if using only single tests with only one message to care about. But it is not OK for combined tests. As an example, the file 'findadv-combine-in.txt' is combining tests findadv-re-01-in.txt, findadv-re-02-in.txt and findadv-re-03-in.txt. This test runns here about 25 seconds, while the time for the other three is about 144 secs. (Most time is with starting/stopping lyx)
This commit is contained in:
parent
91238c1620
commit
36a3cca3ea
@ -413,6 +413,12 @@ max_loops = os.environ.get('MAX_LOOPS')
|
|||||||
if max_loops is None:
|
if max_loops is None:
|
||||||
max_loops = 3
|
max_loops = 3
|
||||||
|
|
||||||
|
extra_path = os.environ.get('EXTRA_PATH')
|
||||||
|
if not extra_path is None:
|
||||||
|
os.environ['PATH'] = extra_path + os.pathsep + os.environ['PATH']
|
||||||
|
print("Added " + extra_path + " to path")
|
||||||
|
print(os.environ['PATH'])
|
||||||
|
|
||||||
PACKAGE = os.environ.get('PACKAGE')
|
PACKAGE = os.environ.get('PACKAGE')
|
||||||
if not PACKAGE is None:
|
if not PACKAGE is None:
|
||||||
print("PACKAGE = " + PACKAGE + "\n")
|
print("PACKAGE = " + PACKAGE + "\n")
|
||||||
@ -448,7 +454,7 @@ if locale_dir is None:
|
|||||||
def_delay = os.environ.get('XVKBD_DELAY')
|
def_delay = os.environ.get('XVKBD_DELAY')
|
||||||
if def_delay is None:
|
if def_delay is None:
|
||||||
if qt_frontend == 'QT5':
|
if qt_frontend == 'QT5':
|
||||||
def_delay = '5'
|
def_delay = '1'
|
||||||
else:
|
else:
|
||||||
def_delay = '1'
|
def_delay = '1'
|
||||||
|
|
||||||
|
183
development/autotests/searchPatterns.pl
Executable file
183
development/autotests/searchPatterns.pl
Executable file
@ -0,0 +1,183 @@
|
|||||||
|
#! /usr/bin/env perl
|
||||||
|
# -*- mode: perl; -*-
|
||||||
|
#
|
||||||
|
# file searchPatterns.pl
|
||||||
|
# Uses patterns-file to consecutively process given tex-file
|
||||||
|
# Command succedes if each pattern matches the file content in given order
|
||||||
|
#
|
||||||
|
# How to use:
|
||||||
|
#
|
||||||
|
# searchPatterns.pl patterns=<name of file with patterns> log=<name of file to check against>
|
||||||
|
|
||||||
|
use strict;
|
||||||
|
use warnings;
|
||||||
|
|
||||||
|
sub sexit($); # Print synax and exit
|
||||||
|
sub readPatterns($); # Process patterns file
|
||||||
|
sub processLogFile($);
|
||||||
|
sub convertPattern($); # escape some chars, (e.g. ']' ==> '\]')
|
||||||
|
|
||||||
|
my %options = (
|
||||||
|
"log" => undef,
|
||||||
|
"patterns" => undef,
|
||||||
|
);
|
||||||
|
|
||||||
|
my @patterns = ();
|
||||||
|
|
||||||
|
for my $arg (@ARGV) {
|
||||||
|
if ($arg eq "-help") {
|
||||||
|
&sexit(0);
|
||||||
|
}
|
||||||
|
if ($arg =~ /^([^=]+)=(.+)$/) {
|
||||||
|
my ($what, $val) = ($1, $2);
|
||||||
|
if (exists($options{$what})) {
|
||||||
|
if (defined($options{$what})) {
|
||||||
|
print "Value for \"$what\" already defined\n";
|
||||||
|
&sexit(1);
|
||||||
|
}
|
||||||
|
$options{$what} = $val;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "Unknown param \"$what\"\n";
|
||||||
|
&sexit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
print "Wrong param syntax for \"$arg\"\n";
|
||||||
|
&sexit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for my $k (keys %options) {
|
||||||
|
if (! defined($options{$k})) {
|
||||||
|
&sexit(1);
|
||||||
|
}
|
||||||
|
if (! -r $options{$k}) {
|
||||||
|
print "File \"$options{$k}\" is not readable\n";
|
||||||
|
&sexit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Read patterns
|
||||||
|
&readPatterns($options{"patterns"});
|
||||||
|
if (&processLogFile($options{"log"}) > 0) {
|
||||||
|
print "Errors occured, exiting\n";
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
exit(0);
|
||||||
|
|
||||||
|
sub syntax()
|
||||||
|
{
|
||||||
|
print "Syntax:\n";
|
||||||
|
print " $0";
|
||||||
|
for my $k (keys %options) {
|
||||||
|
print " $k=<filename>";
|
||||||
|
}
|
||||||
|
print "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
sub sexit($)
|
||||||
|
{
|
||||||
|
my ($exval) = @_;
|
||||||
|
&syntax();
|
||||||
|
exit($exval);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub convertPattern($)
|
||||||
|
{
|
||||||
|
# Convert all chars '[]()+'
|
||||||
|
my ($pat) = @_;
|
||||||
|
if ($pat eq "") {
|
||||||
|
return("");
|
||||||
|
}
|
||||||
|
if ($pat =~ /^(.*)([\[\]\(\)\+\^\{\}])(.*)$/) {
|
||||||
|
my ($first, $found, $third) = ($1, $2, $3);
|
||||||
|
$first = &convertPattern($first);
|
||||||
|
$third = &convertPattern($third);
|
||||||
|
return($first . "\\$found" . $third);
|
||||||
|
}
|
||||||
|
# Substitue white spaces
|
||||||
|
while ($pat =~ s/[\s]+/\\s\+/) {};
|
||||||
|
return($pat);
|
||||||
|
}
|
||||||
|
|
||||||
|
sub readPatterns($)
|
||||||
|
{
|
||||||
|
my ($patfile) = @_;
|
||||||
|
|
||||||
|
if (open(FP, $patfile)) {
|
||||||
|
while (my $p = <FP>) {
|
||||||
|
chomp($p);
|
||||||
|
$p = &convertPattern($p);
|
||||||
|
push(@patterns, $p);
|
||||||
|
}
|
||||||
|
close(FP);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
sub processLogFile($)
|
||||||
|
{
|
||||||
|
my ($log) = @_;
|
||||||
|
my $prevl = "\n";
|
||||||
|
|
||||||
|
my $found;
|
||||||
|
my $errors = 1;
|
||||||
|
my @savedlines = ();
|
||||||
|
my $readsavedlines = 0;
|
||||||
|
my $savedline;
|
||||||
|
if (open(FL, $log)) {
|
||||||
|
$errors = 0;
|
||||||
|
my $line = 0;
|
||||||
|
for my $pat (@patterns) {
|
||||||
|
#print "Searching for \"$pat\"\n";
|
||||||
|
$found = 0;
|
||||||
|
my @lines = ();
|
||||||
|
if ($readsavedlines) {
|
||||||
|
# Last regex not found
|
||||||
|
@lines = @savedlines;
|
||||||
|
@savedlines = ();
|
||||||
|
$line = $savedline;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$savedline = $line;
|
||||||
|
}
|
||||||
|
while (1) {
|
||||||
|
my $l;
|
||||||
|
if ($readsavedlines) {
|
||||||
|
$l = shift(@lines);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
$l = <FL>;
|
||||||
|
}
|
||||||
|
last if (! $l);
|
||||||
|
my $check = $prevl . $l;
|
||||||
|
$prevl = $l;
|
||||||
|
$line++;
|
||||||
|
if ($check =~ /$pat/) {
|
||||||
|
print "$line:\tfound \"$pat\"\n";
|
||||||
|
$found = 1;
|
||||||
|
$prevl = "\n"; # Don't search this line again
|
||||||
|
if ($readsavedlines) {
|
||||||
|
@savedlines = @lines;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
@savedlines = ();
|
||||||
|
}
|
||||||
|
$savedline = $line;
|
||||||
|
last;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
push(@savedlines, $l);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (! $found) {
|
||||||
|
$errors++;
|
||||||
|
print "\tNOT found \"$pat\" in remainder of file\n";
|
||||||
|
$readsavedlines = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
close(FL);
|
||||||
|
}
|
||||||
|
return($errors);
|
||||||
|
}
|
@ -70,6 +70,7 @@ if(EXISTS "${LYX_TESTS_USERDIR}/session")
|
|||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f "${LYX_TESTS_USERDIR}/session")
|
execute_process(COMMAND ${CMAKE_COMMAND} -E remove -f "${LYX_TESTS_USERDIR}/session")
|
||||||
endif()
|
endif()
|
||||||
# Environments needed by keytest.py
|
# Environments needed by keytest.py
|
||||||
|
set(ENV{EXTRA_PATH} "${AUTOTEST_ROOT}")
|
||||||
set(ENV{PACKAGE} ${PACKAGE})
|
set(ENV{PACKAGE} ${PACKAGE})
|
||||||
set(ENV{LOCALE_DIR} ${LOCALE_DIR})
|
set(ENV{LOCALE_DIR} ${LOCALE_DIR})
|
||||||
set(ENV{LYX_LOCALEDIR} "${LOCALE_DIR}")
|
set(ENV{LYX_LOCALEDIR} "${LOCALE_DIR}")
|
||||||
|
@ -32,6 +32,7 @@ echo LYX_WINDOW_NAME=$LYX_WINDOW_NAME
|
|||||||
|
|
||||||
export MAX_LOOPS=1
|
export MAX_LOOPS=1
|
||||||
export LYX_EXE=${LYX_EXE:-../../src/lyx}
|
export LYX_EXE=${LYX_EXE:-../../src/lyx}
|
||||||
|
export EXTRA_PATH=`pwd`
|
||||||
|
|
||||||
if [ "$XVKBD_HACKED" != "" ]; then
|
if [ "$XVKBD_HACKED" != "" ]; then
|
||||||
export XVKBD_EXE=${XVKBD_EXE:-./xvkbd/xvkbd};
|
export XVKBD_EXE=${XVKBD_EXE:-./xvkbd/xvkbd};
|
||||||
|
Loading…
Reference in New Issue
Block a user