2017-12-04 Fred Gleason <fredg@paravelsystems.com>

* Added a 'log_unlink_test' harness.
	* Fixed a bug that caused a log's link status flags to fail to be
	updated when the log was unlinked.
This commit is contained in:
Fred Gleason 2017-12-04 15:40:54 -05:00
parent 844be98df1
commit cacb87a786
16 changed files with 848 additions and 10 deletions

1
.gitignore vendored
View File

@ -74,6 +74,7 @@ tests/audio_export_test
tests/audio_import_test
tests/audio_peaks_test
tests/datedecode_test
tests/log_unlink_test
tests/rdxml_parse_test
tests/reserve_carts_test
tests/sas_switch_torture

View File

@ -16087,3 +16087,7 @@
2017-10-11 Fred Gleason <fredg@paravelsystems.com>
* Updated the 'NEWS' file.
* Updated the package version to 2.17.0.
2017-12-04 Fred Gleason <fredg@paravelsystems.com>
* Added a 'log_unlink_test' harness.
* Fixed a bug that caused a log's link status flags to fail to be
updated when the log was unlinked.

View File

@ -27,6 +27,7 @@
#include <rdcreate_log.h>
#include <rdclock.h>
#include <rdlog.h>
#include <rddb.h>
#include <rdescape_string.h>
#include <rdweb.h>
@ -976,8 +977,7 @@ bool RDSvc::linkLog(RDSvc::ImportSource src,const QDate &date,
}
void RDSvc::clearLogLinks(RDSvc::ImportSource src,const QDate &date,
const QString &logname)
void RDSvc::clearLogLinks(RDSvc::ImportSource src,const QString &logname)
{
std::vector<int> cleared_ids;
RDLogLine::Type event_type=RDLogLine::UnknownType;
@ -1032,6 +1032,16 @@ void RDSvc::clearLogLinks(RDSvc::ImportSource src,const QDate &date,
dest_event->save();
delete src_event;
delete dest_event;
RDLog *log=new RDLog(logname);
if(src==RDSvc::Traffic) {
log->setLinkState(RDLog::SourceTraffic,false);
}
if(src==RDSvc::Music) {
log->setLinkState(RDLog::SourceMusic,false);
}
delete log;
}

View File

@ -85,8 +85,7 @@ class RDSvc : public QObject
const QString &nextname,QString *report);
bool linkLog(RDSvc::ImportSource src,const QDate &date,
const QString &logname,QString *report);
void clearLogLinks(RDSvc::ImportSource src,const QDate &date,
const QString &logname);
void clearLogLinks(RDSvc::ImportSource src,const QString &logname);
void create(const QString exemplar) const;
void remove() const;
QString xml() const;

View File

@ -900,6 +900,101 @@ Vyhledejte svého správce systému kvůli aktualizaci!</translation>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished">Vybrat</translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">Z&amp;rušit</translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -899,6 +899,101 @@ See your system administrator for an update!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished">Auswählen</translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">Abbre&amp;chen</translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -900,6 +900,101 @@ See your system administrator for an update!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished">Seleccionar</translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Cancelar</translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -872,6 +872,101 @@ See your system administrator for an update!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -921,6 +921,101 @@ See your system administrator for an update!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished">Vel</translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -921,6 +921,101 @@ See your system administrator for an update!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished">Vel</translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Avbryt</translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -900,6 +900,101 @@ See your system administrator for an update!</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>RenderDialog</name>
<message>
<source>Render Log</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Log...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cancel</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render Progress</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Cart/Cut</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Render To</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Select</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Audio Parameters</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Set</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>[now]</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>As Specified</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Virtual Start Time</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>All Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Only Selected Events</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Include</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Stop Rendering</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Treat as PLAY</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>At STOP transition</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Render</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>&amp;Cancel</source>
<translation type="unfinished">&amp;Cancelar</translation>
</message>
<message>
<source>Filename</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Rendering Error</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>VoiceTracker</name>
<message>

View File

@ -145,8 +145,8 @@ int RunLogOperation(int argc,char *argv[],const QString &svcname,
}
report="";
log->removeTracks(rdstation_conf,rduser,config);
svc->clearLogLinks(RDSvc::Traffic,start_date,logname);
svc->clearLogLinks(RDSvc::Music,start_date,logname);
svc->clearLogLinks(RDSvc::Traffic,logname);
svc->clearLogLinks(RDSvc::Music,logname);
if(svc->linkLog(RDSvc::Music,start_date,logname,&report)) {
printf("%s\n",(const char*)report);
}
@ -174,7 +174,7 @@ int RunLogOperation(int argc,char *argv[],const QString &svcname,
return 256;
}
report="";
svc->clearLogLinks(RDSvc::Traffic,start_date,logname);
svc->clearLogLinks(RDSvc::Traffic,logname);
if(svc->linkLog(RDSvc::Traffic,start_date,logname,&report)) {
printf("%s\n",(const char*)report);
}

View File

@ -427,8 +427,8 @@ void GenerateLog::musicData()
}
}
log->removeTracks(rdstation_conf,rduser,log_config);
svc->clearLogLinks(RDSvc::Traffic,gen_date_edit->date(),logname);
svc->clearLogLinks(RDSvc::Music,gen_date_edit->date(),logname);
svc->clearLogLinks(RDSvc::Traffic,logname);
svc->clearLogLinks(RDSvc::Music,logname);
}
connect(svc,SIGNAL(generationProgress(int)),
gen_progress_dialog,SLOT(setProgress(int)));
@ -462,7 +462,7 @@ void GenerateLog::trafficData()
delete svc;
return;
}
svc->clearLogLinks(RDSvc::Traffic,gen_date_edit->date(),logname);
svc->clearLogLinks(RDSvc::Traffic,logname);
}
connect(svc,SIGNAL(generationProgress(int)),
gen_progress_dialog,SLOT(setProgress(int)));

View File

@ -33,6 +33,7 @@ noinst_PROGRAMS = audio_convert_test\
audio_import_test\
audio_peaks_test\
datedecode_test\
log_unlink_test\
rdxml_parse_test\
reserve_carts_test\
sas_switch_torture\
@ -59,6 +60,9 @@ audio_peaks_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@
dist_datedecode_test_SOURCES = datedecode_test.cpp datedecode_test.h
datedecode_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@
dist_log_unlink_test_SOURCES = log_unlink_test.cpp log_unlink_test.h
log_unlink_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@
dist_rdxml_parse_test_SOURCES = rdxml_parse_test.cpp rdxml_parse_test.h
rdxml_parse_test_LDADD = @LIB_RDLIBS@ @LIBVORBIS@

120
tests/log_unlink_test.cpp Normal file
View File

@ -0,0 +1,120 @@
// log_unlink_test.cpp
//
// Test the Rivendell log unlinker methods.
//
// (C) Copyright 2017 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#include <stdlib.h>
#include <stdio.h>
#include <qapplication.h>
#include <qvariant.h>
#include <rdcmd_switch.h>
#include <rdconfig.h>
#include <rddatedecode.h>
#include <rddb.h>
#include <rdlog.h>
#include <rdsvc.h>
#include "log_unlink_test.h"
MainObject::MainObject(QObject *parent)
:QObject(parent)
{
QString log_name="";
RDSvc::ImportSource import_source=RDSvc::Traffic;
RDConfig *config=NULL;
unsigned schema=0;
//
// Read Command Options
//
RDCmdSwitch *cmd=
new RDCmdSwitch(qApp->argc(),qApp->argv(),"log_unlink_test",
LOG_UNLINK_TEST_USAGE);
for(unsigned i=0;i<cmd->keys();i++) {
if(cmd->key(i)=="--log") {
log_name=cmd->value(i);
cmd->setProcessed(i,true);
}
if(cmd->key(i)=="--source") {
if(cmd->value(i).lower()=="traffic") {
import_source=RDSvc::Traffic;
}
else {
if(cmd->value(i).lower()=="music") {
import_source=RDSvc::Music;
}
else {
fprintf(stderr,
"log_unlink_test: you must specify a source to unlink\n");
exit(1);
}
}
cmd->setProcessed(i,true);
}
if(!cmd->processed(i)) {
fprintf(stderr,"log_unlink_test: unknown option \"%s\"\n",
(const char *)cmd->value(i));
exit(256);
}
}
if(log_name.isEmpty()) {
fprintf(stderr,"log_unlink_test: you must specify a log name with \"--log=\"\n");
exit(1);
}
//
// Load Configuration
//
config=new RDConfig();
config->load();
config->setModuleName("reserve_carts_test");
//
// Open Database
//
QString err (tr("upload_test: "));
QSqlDatabase *db=RDInitDb(&schema,&err);
if(!db) {
fprintf(stderr,err.ascii());
delete cmd;
exit(256);
}
//
// Run the Test
//
if(!RDLog::exists(log_name)) {
fprintf(stderr,"log_unlink_test: no such log\n");
exit(1);
}
RDLog *log=new RDLog(log_name);
RDSvc *svc=new RDSvc(log->service());
svc->clearLogLinks(import_source,log_name);
exit(0);
}
int main(int argc,char *argv[])
{
QApplication a(argc,argv,false);
new MainObject();
return a.exec();
}

35
tests/log_unlink_test.h Normal file
View File

@ -0,0 +1,35 @@
// log_unlink_test.h
//
// Test the Rivendell log unlinker methods
//
// (C) Copyright 2017 Fred Gleason <fredg@paravelsystems.com>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License version 2 as
// published by the Free Software Foundation.
//
// This program 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 General Public License for more details.
//
// You should have received a copy of the GNU General Public
// License along with this program; if not, write to the Free Software
// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
#ifndef LOG_UNLINK_TEST_H
#define LOG_UNLINK_TEST_H
#include <qobject.h>
#define LOG_UNLINK_TEST_USAGE "[options]\n\nTest the Rivendell log unlinker methods\n\nOptions are:\n--log=<log-name>\n Name of log to unlink.\n\n--source=music|traffic\n Data source to unlink\n\n"
class MainObject : public QObject
{
public:
MainObject(QObject *parent=0);
};
#endif // LOG_UNLINK_TEST_H