You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdepim/karm/test/runscripts.cpp

131 lines
3.5 KiB

/* This file is part of the KDE project
Copyright (C) 2004 Mark Bucciarelli <mark@hubcapconsulting.com>
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public License
along with this library; see the file COPYING.LIB. If not, write to
the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
Boston, MA 02110-1301, USA.
*/
#include <kdebug.h>
#include <tqdir.h>
#include <tqfile.h>
#include <tqstring.h>
#include <tqstringlist.h>
#include <textstream.h>
#include "script.h"
static TQString srcdir();
static int runscripts
( const TQString &interpreter, const TQString &extension, const TQString &path );
const TQString dots = "..................................................";
const TQString not_a_test_filename_prefix = "__";
// Read srcdir from Makefile (for builddir != srcdir).
TQString srcdir()
{
bool found = false;
TQString dir;
TQFile file( "Makefile" );
if ( !file.open( IO_ReadOnly | IO_Translate ) ) return "";
TQTextStream in( &file );
TQString line;
while ( !found && !in.atEnd() )
{
line = in.readLine();
if ( line.startsWith( "srcdir = " ) )
{
dir = line.mid( 9 );
found = true;
}
}
if ( !found ) dir = "";
return dir;
}
int runscripts
( const TQString &interpreter, const TQString &extension, const TQString &path )
{
int rval = 0;
int oneBadApple = 0;
TQStringList files;
TQDir dir( path );
Script* s = new Script( dir );
dir.setNameFilter( extension );
dir.setFilter( TQDir::Files );
dir.setSorting( TQDir::Name | TQDir::IgnoreCase );
const TQFileInfoList *list = dir.entryInfoList();
TQFileInfoListIterator it( *list );
TQFileInfo *fi;
while ( !rval && ( fi = it.current() ) != 0 )
{
// Don't run scripts that are shared routines.
if ( ! fi->fileName().startsWith( not_a_test_filename_prefix ) )
{
s->addArgument( interpreter );
s->addArgument( path + TQDir::separator() + fi->fileName().latin1() );
// Thorsten's xautomation tests run with user interaction by default.
if ( interpreter == "sh" ) s->addArgument( "--batch" );
if ( interpreter == "php" ) s->addArgument( "--batch" );
rval = s->run();
kdDebug() << "runscripts: " << fi->fileName()
<< " " << dots.left( dots.length() - fi->fileName().length() )
<< " " << ( ! rval ? "PASS" : "FAIL" ) << endl;
// Don't abort if one test files--run them all
if ( rval )
{
oneBadApple = 1;
rval = 0;
}
delete s;
s = new Script( dir );
}
++it;
}
delete s;
s = 0;
return oneBadApple;
}
int main( int, char** )
{
int rval = 0;
TQString path = srcdir();
if ( !rval ) rval = runscripts( "python", "*.py *.Py *.PY *.pY", path );
if ( !rval ) rval = runscripts( "sh", "*.sh *.Sh *.SH *.sH", path );
if ( !rval ) rval = runscripts( "perl", "*.pl *.Pl *.PL *.pL", path );
if ( !rval ) rval = runscripts( "php", "*.php *.php3 *.php4 *.php5", path );
return rval;
}