diff options
Diffstat (limited to 'tests/arthur/datagenerator/datagenerator.cpp')
-rw-r--r-- | tests/arthur/datagenerator/datagenerator.cpp | 481 |
1 files changed, 0 insertions, 481 deletions
diff --git a/tests/arthur/datagenerator/datagenerator.cpp b/tests/arthur/datagenerator/datagenerator.cpp deleted file mode 100644 index e2a6ffd5df..0000000000 --- a/tests/arthur/datagenerator/datagenerator.cpp +++ /dev/null @@ -1,481 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (qt-info@nokia.com) -** -** This file is part of the test suite of the Qt Toolkit. -** -** $QT_BEGIN_LICENSE:LGPL$ -** GNU Lesser General Public License Usage -** This file may be used under the terms of the GNU Lesser General Public -** License version 2.1 as published by the Free Software Foundation and -** appearing in the file LICENSE.LGPL included in the packaging of this -** file. Please review the following information to ensure the GNU Lesser -** General Public License version 2.1 requirements will be met: -** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. -** -** In addition, as a special exception, Nokia gives you certain additional -** rights. These rights are described in the Nokia Qt LGPL Exception -** version 1.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** GNU General Public License Usage -** Alternatively, this file may be used under the terms of the GNU General -** Public License version 3.0 as published by the Free Software Foundation -** and appearing in the file LICENSE.GPL included in the packaging of this -** file. Please review the following information to ensure the GNU General -** Public License version 3.0 requirements will be met: -** http://www.gnu.org/copyleft/gpl.html. -** -** Other Usage -** Alternatively, this file may be used in accordance with the terms and -** conditions contained in a signed written agreement between you and Nokia. -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ -#include "datagenerator.h" - -#include "qengines.h" -#include "xmlgenerator.h" - -#include <QDateTime> -#include <QDir> -#include <QFile> -#include <QFileInfo> -#include <QSvgRenderer> -#include <QImage> -#include <QPainter> -#include <QProcess> -#include <QSettings> -#include <QtDebug> - -#include <iostream> - -#define W3C_SVG_BASE "http://www.w3.org/Graphics/SVG/Test/20030813/png/" - -static QString createW3CReference(const QString &refUrl, const QString &filename) -{ - QString base(refUrl); - - QString pngFile = filename; - pngFile.replace(".svg", ".png"); - - base += "full-"; - - base += pngFile; - return base; -} - - -static QString createOutFilename(const QString &baseDir, const QString &filename, - QEngine *engine) -{ - QString outFile = filename; - if (outFile.endsWith(".svgz")) - outFile.replace(".svgz", ".png"); - else - outFile.replace(".svg", ".png"); - - outFile.replace(".qps", ".qps.png"); - - if (!baseDir.isEmpty()) - outFile = QString("%1/%2/%3").arg(baseDir) - .arg(engine->name()).arg(outFile); - else - outFile = QString("%1/%2").arg(engine->name()) - .arg(outFile); - - return outFile; -} - -static void usage(const char *progname) -{ - std::cerr << "Couldn't find 'framework.ini' " - << "file and no suite has been specified."<<std::endl; - std::cerr << "Usage: "<<progname << "\n" - << "\t-framework <framework.ini>\n" - << "\t-engine <engine name>|onscreen|printing\n" - << "\t-suite <suite name>\n" - << "\t-testcase <file.svg>\n" - << "\t-file </path/to/file.svg>\n" - << "\t-size <width,height>\n" - << "\t-fill <color>\n" - << "\t-output <dirname>\n" - << std::endl; -} - -DataGenerator::DataGenerator() - : iterations(1) - , size(480, 360) - , fillColor(Qt::white) -{ - settings.load(QString("framework.ini")); - renderer = new QSvgRenderer(); -} - -DataGenerator::~DataGenerator() -{ -} - -void DataGenerator::run(int argc, char **argv) -{ - if (!processArguments(argc, argv)) - return; - - if (!fileName.isEmpty()) { - testGivenFile(); - return; - } - if (!settings.isValid() && suiteName.isEmpty()) { - usage(argv[0]); - return; - } - - prepareDirs(); - if (!settings.isValid()) { //only suite specified - XMLGenerator generator(outputDirName); - testSuite(generator, suiteName, - QString(), QString()); - return; - } - - XMLGenerator generator(outputDirName); - QStringList tests = settings.suites(); - qDebug()<<"tests = "<<tests; - foreach(QString test, tests) { - if (!suiteName.isEmpty() && test != suiteName) - continue; - - qDebug()<<"testing "<<test; - settings.settings()->beginGroup(test); - - QString dirName = settings.settings()->value("dir").toString(); - QString refUrl = settings.settings()->value("reference").toString(); - - QDir dir(dirName); - if (!dir.isAbsolute() && !dir.exists()) - dir = QDir(QString("%1/%2").arg(baseDataDir).arg(dirName)); - - testSuite(generator, test, dir.absolutePath(), refUrl); - settings.settings()->endGroup(); - } - generator.generateOutput(outputDirName); -} - -void DataGenerator::testEngines(XMLGenerator &generator, const QString &file, - const QString &refUrl) -{ - QFileInfo fileInfo(file); - - generator.startTestcase(file); - - if (!refUrl.isEmpty()) { - QString ref = createW3CReference(refUrl, fileInfo.fileName()); - generator.addImage("Reference", ref, XMLData(), Reference); - } - - //bool isQpsScript = file.endsWith(".qps"); - bool isSvgFile = file.endsWith(".svg") || file.endsWith(".svgz"); - - if (isSvgFile) { - QDir oldDir = QDir::current(); - if (!baseDataDir.isEmpty()) { - QDir::setCurrent(baseDataDir); - } - renderer->load(fileInfo.absoluteFilePath()); - if (!baseDataDir.isEmpty()) { - QDir::setCurrent(oldDir.absolutePath()); - } - if (!renderer->isValid()) { - qWarning()<<"Error while processing " <<file; - return; - } - } - - QList<QEngine*> engines = QtEngines::self()->engines(); - testGivenEngines(engines, fileInfo, file, generator, Normal); - - engines = QtEngines::self()->foreignEngines(); - testGivenEngines(engines, fileInfo, file, generator, Foreign); - - generator.endTestcase(); -} - -void DataGenerator::prepareDirs() -{ - QList<QEngine*> engines = QtEngines::self()->engines(); - QDir outDirs; - foreach(QEngine *engine, engines) { - if (!wantedEngine(engine->name())) - continue; - - QString dirName = engine->name(); - if (!outputDirName.isEmpty()) - dirName = QString("%1/%2").arg(outputDirName).arg(dirName); - outDirs.mkpath(dirName); - } - - engines = QtEngines::self()->foreignEngines(); - foreach(QEngine *engine, engines) { - if (!wantedEngine(engine->name())) - continue; - - QString dirName = engine->name(); - if (!outputDirName.isEmpty()) - dirName = QString("%1/%2").arg(outputDirName).arg(dirName); - outDirs.mkpath(dirName); - } -} - -bool DataGenerator::processArguments(int argc, char **argv) -{ - QString frameworkFile; - for (int i=1; i < argc; ++i) { - QString opt(argv[i]); - if (opt == "-framework") { - frameworkFile = QString(argv[i+1]); - } else if (opt == "-engine") { - engineName = QString(argv[i+1]); - } else if (opt == "-suite") { - suiteName = QString(argv[i+1]); - } else if (opt == "-testcase") { - testcase = QString(argv[i+1]); - } else if (opt == "-file") { - fileName = QString(argv[i+1]); - } else if (opt == "-output") { - outputDirName = QString(argv[i+1]); - } else if (opt == "-iterations") { - iterations = QString(argv[i+1]).toInt(); - } else if (opt == "-size") { - QStringList args = QString(argv[i+1]).split(",", QString::SkipEmptyParts); - size = QSize(args[0].toInt(), args.size() > 1 ? args[1].toInt() : args[0].toInt()); - } else if (opt == "-fill") { - fillColor = QColor(QString(argv[i+1])); - } else if (opt.startsWith('-')) { - qDebug()<<"Unknown option "<<opt; - } - } - if (!frameworkFile.isEmpty() && QFile::exists(frameworkFile)) { - baseDataDir = QFileInfo(frameworkFile).absoluteDir().absolutePath(); - settings.load(frameworkFile); - } - - if (outputDirName.isEmpty() && settings.isValid()) { - outputDirName = settings.outputDir(); - } - - if (!outputDirName.isEmpty()) { - QDir dir; - dir.mkpath(outputDirName); - } - - - if (!engineName.isEmpty()) { - QList<QEngine *> engines = QtEngines::self()->engines(); - bool found = false; - if (engineName == QLatin1String("onscreen")|| - engineName == QLatin1String("printing")) - found = true; - else { - for (int i=0; i<engines.size(); ++i) - found |= (engines.at(i)->name() == engineName); - } - if (!found) { - qDebug("No such engine: '%s'\nAvailable engines are:", qPrintable(engineName)); - for (int i=0; i<engines.size(); ++i) - qDebug(" %s", qPrintable(engines.at(i)->name())); - return false; - } - } - - if (!fileName.isEmpty()) { - baseDataDir = QFileInfo(fileName).absoluteDir().absolutePath(); - } - - return true; -} - -void DataGenerator::testGivenFile() -{ - prepareDirs(); - - XMLGenerator generator(baseDataDir); - generator.startSuite("Single"); - - QFileInfo fileInfo(fileName); - - bool qpsScript = fileName.endsWith("qps"); - if (!qpsScript) { - QDir oldDir = QDir::current(); - if (!baseDataDir.isEmpty()) { - QDir::setCurrent(baseDataDir); - } - renderer->load(fileInfo.absoluteFilePath()); - - if (!baseDataDir.isEmpty()) { - QDir::setCurrent(oldDir.absolutePath()); - } - - if (!renderer->isValid()) { - qWarning()<<"Error while processing " <<fileInfo.absolutePath(); - return; - } - } - - QList<QEngine*> engines = QtEngines::self()->engines(); - testGivenEngines(engines, fileInfo, fileInfo.fileName(), generator, - Normal); - generator.endSuite(); - - std::cout<< qPrintable(generator.generateData()); -} - -void DataGenerator::testSuite(XMLGenerator &generator, const QString &test, - const QString &dirName, const QString &refUrl) -{ - generator.startSuite(test); - - QDir dir(dirName); - dir.setFilter(QDir::Files | QDir::NoSymLinks); - //dir.setNameFilter() - - foreach (QFileInfo fileInfo, dir.entryInfoList()) { - if (!testcase.isEmpty() && fileInfo.fileName() != testcase) - continue; - QString suffix = fileInfo.suffix().toLower(); - if (suffix != "qps" && suffix != "svg" && suffix != "svgz") - continue; - qDebug()<<"Testing: "<<fileInfo.absoluteFilePath(); - testEngines(generator, fileInfo.absoluteFilePath(), refUrl); - } - - generator.endSuite(); -} - -static QString loadFile(const QString &name) -{ - QFile file(name); - if (!file.open(QFile::ReadOnly)) { - qDebug("Can't open file '%s'", qPrintable(name)); - return QString(); - } - QTextStream str(&file); - return str.readAll(); -} - -void DataGenerator::testGivenEngines(const QList<QEngine*> engines, - const QFileInfo &fileInfo, - const QString &file, - XMLGenerator &generator, - GeneratorFlags eflags) -{ - QString fileName = fileInfo.absoluteFilePath(); - bool qpsScript = fileName.endsWith(".qps"); - QStringList qpsContents; - if (qpsScript) { - QString script = loadFile(fileName); - qpsContents = script.split("\n", QString::SkipEmptyParts); - } - - //foreign one don't generate qpsScripts - if ((eflags & Foreign) && qpsScript) - return; - - foreach (QEngine *engine, engines) { - if (!wantedEngine(engine->name())) - continue; - if (settings.isTestBlacklisted(engine->name(), fileInfo.fileName())) { - XMLData data; - data.details = QString("Test blacklisted"); - data.iterations = 1; - generator.addImage(engine->name(), QString(""), data, eflags); - continue; - } - - QString outFilename = createOutFilename(outputDirName, - fileInfo.fileName(), engine); - engine->prepare(qpsScript ? QSize(800, 800) : size, fillColor); - int elapsed = -1; - int maxElapsed = 0; - int minElapsed = 0; - if ((eflags & Foreign)) { - engine->render(renderer, file); - engine->save(outFilename); - } else { - bool saved = false; - //only measure Qt engines - QTime time; - int currentElapsed = 0; - for (int i = 0; i < iterations; ++i) { - if (qpsScript) { - QDir oldDir = QDir::current(); - if (!baseDataDir.isEmpty()) { - QDir::setCurrent(baseDataDir+"/images"); - } - time.start(); - engine->render(qpsContents, fileName); - currentElapsed = time.elapsed(); - if (!baseDataDir.isEmpty()) { - QDir::setCurrent(oldDir.absolutePath()); - } - } else { - time.start(); - engine->render(renderer, file); - currentElapsed = time.elapsed(); - } - if (currentElapsed > maxElapsed) - maxElapsed = currentElapsed; - if (!minElapsed || - currentElapsed < minElapsed) - minElapsed = currentElapsed; - elapsed += currentElapsed; - if (!saved) { - //qDebug()<<"saving "<<i<<engine->name(); - engine->save(outFilename); - engine->cleanup(); - engine->prepare(size, fillColor); - saved = true; - } - } - engine->cleanup(); - } - GeneratorFlags flags = Normal; - if (QtEngines::self()->defaultEngine() == engine) - flags |= Default; - flags |= eflags; - if ((eflags & Foreign)) - flags ^= Normal; - XMLData data; - data.date = QDateTime::currentDateTime(); - data.timeToRender = elapsed; - data.iterations = iterations; - data.maxElapsed = maxElapsed; - data.minElapsed = minElapsed; - generator.addImage(engine->name(), outFilename, - data, flags); - } -} - -bool DataGenerator::wantedEngine(const QString &engine) const -{ - if (!engineName.isEmpty() && - engine != engineName) { - if (engineName == "onscreen") { - if (engine.startsWith("Native") || - engine == QLatin1String("Raster") || - engine == QLatin1String("OpenGL")) - return true; - } else if (engineName == QLatin1String("printing")) { - if (engine == QLatin1String("PS") || - engine == QLatin1String("PDF")) - return true; - } - return false; - } - return true; -} |