kde-playground/kdepimlibs/syndication/tests/testlibsyndication.cpp
2015-04-14 21:49:29 +00:00

143 lines
3.9 KiB
C++

/*
This file is part of LibSyndication.
Copyright (C) 2006 Frank Osterfeld <osterfeld@kde.org>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
As a special exception, permission is given to link this program
with any edition of Qt, and distribute the resulting executable,
without including the source code for Qt in the source distribution.
*/
#include "specificdocument.h"
#include "documentsource.h"
#include "feed.h"
#include "parsercollection.h"
#include <KComponentData>
#include <QDebug>
#include <QtCore/QByteArray>
#include <QtCore/QFile>
#include <QtCore/QString>
#include <iostream>
using namespace Syndication;
void printUsage(const QString& error)
{
std::cerr << "testlibsyndication - (C) Frank Osterfeld 2006" << std::endl;
std::cerr << std::endl;
if (!error.isNull())
{
std::cerr << error.toUtf8().data() << std::endl;
std::cerr << std::endl;
}
else
{
std::cerr << "Prints the parsed content of a feed file to standard output." << std::endl;
std::cerr << std::endl;
}
std::cerr << "Usage: testlibsyndication [--specific-format] <file> [--compare <expectedfile>]" << std::endl;
std::cerr << std::endl;
std::cerr << "--specific-format: If set, the debug output for the specific" << std::endl;
std::cerr << "feed format is printed to stdout, otherwise the debug output" << std::endl;
std::cerr << "for the abstraction" << std::endl;
}
int main(int argc, char **argv)
{
setenv("LC_ALL", "C", 1);
KComponentData componentData("testlibsyndication");
int pcompare = 2;
if (argc < 2)
{
printUsage("filename expected");
return 1;
}
QString filename(argv[1]);
QString arg1(argv[1]);
bool specificformat = false;
if (filename == "--specific-format")
{
if (argc < 3)
{
printUsage("filename expected");
return 1;
}
filename = QString(argv[2]);
specificformat = true;
pcompare += 1;
}
QString expfname;
if (argc >= pcompare + 1 && QString(argv[pcompare]) == "--compare")
{
expfname = QString(argv[pcompare+1]);
}
QFile f(filename);
if (!f.open(QIODevice::ReadOnly))
{
printUsage("Couldn't open file");
return 1;
}
DocumentSource src(f.readAll(), "http://libsyndicationtest");
f.close();
FeedPtr ptr(Syndication::parse(src));
if (ptr == 0L)
{
printUsage( QString("Couldn't parse file: (%1)").arg( Syndication::parserCollection()->lastError() ) );
return 1;
}
QString res = specificformat ? ptr->specificDocument()->debugInfo() : ptr->debugInfo();
if (expfname.isNull())
{
std::cout << res.toUtf8().data() << std::endl;
return 0;
}
else
{
QFile expFile(expfname);
expFile.open(QIODevice::ReadOnly);
QByteArray expected = expFile.readAll();
expFile.close();
if (expected.trimmed() != res.toUtf8().trimmed())
{
qDebug() << "Obtained:\n" << res.toUtf8().trimmed();
qDebug() << "Expected:\n" << expected.trimmed();
return 1;
}
return 0;
}
return 0;
}