Ejemplo n.º 1
0
void SettingsTest::testUpgrade_data(){
  // Read recipe
  QFile recipe(":/testdata/upgrade/recipe");
  QVERIFY(recipe.open(QIODevice::ReadOnly));
  QList<UpgradeTestHelper::TestCase> testCases = UpgradeTestHelper::readRecipe(&recipe);

  // Generate settings file according to recipe
  QTemporaryFile settingsFile;
  QVERIFY(settingsFile.open() == true);

  QSettings settings(settingsFile.fileName(), QSettings::IniFormat);

  UpgradeTestHelper::fillSettings(&settings, testCases);

  // Generate defaults file according to recipe
  QTemporaryFile defaultSettingsFile;
  QVERIFY(defaultSettingsFile.open() == true);

  QSettings defaultSettings(defaultSettingsFile.fileName(), QSettings::IniFormat);

  UpgradeTestHelper::fillDefaultSettings(&defaultSettings, testCases);

  // Parse settings -- do upgrade
#if 0
  settingsFile.seek(0);
  defaultSettingsFile.seek(0);
  qDebug() << "SETTINGS {{{\n" << settingsFile.readAll() << "\n}}}";
  qDebug() << "DEFAULT SETTINGS {{{\n" << defaultSettingsFile.readAll() << "\n}}}";
#endif

  SsuSettings ssuSettings(settingsFile.fileName(), QSettings::IniFormat,
      defaultSettingsFile.fileName());

#if 0
  settingsFile.seek(0);
  qDebug() << "SETTINGS UPGRADED {{{\n" << settingsFile.readAll() << "\n}}}";
#endif

  // Record data for verification phase
  QTest::addColumn<bool>("keyIsSet");
  QTest::addColumn<bool>("keyShouldBeSet");
  QTest::addColumn<QString>("actualValue");
  QTest::addColumn<QString>("expectedValue");

  foreach (const UpgradeTestHelper::TestCase &testCase, testCases){
    foreach (const QString &group, UpgradeTestHelper::groups()){
      const QString key = group.isEmpty() ? testCase.key() : group + '/' + testCase.key();
      QTest::newRow(qPrintable(QString("%1%2:%3:%4")
          .arg(group.isEmpty() ? "" : group + "/")
          .arg(testCase.history())
          .arg(testCase.current())
          .arg(testCase.expected())))
        << ssuSettings.contains(key)
        << testCase.keyShouldBeSet()
        << ssuSettings.value(key).toString()
        << testCase.expected();
    }
  }
Ejemplo n.º 2
0
QTemporaryFile *QTemporaryFile::createNativeFile(QFile &file)
{
    if (QAbstractFileEngine *engine = file.d_func()->engine()) {
        if(engine->fileFlags(QAbstractFileEngine::FlagsMask) & QAbstractFileEngine::LocalDiskFlag)
            return 0; //native already
        //cache
        bool wasOpen = file.isOpen();
        qint64 old_off = 0;
        if(wasOpen)
            old_off = file.pos();
        else
            file.open(QIODevice::ReadOnly);
        //dump data
        QTemporaryFile *ret = new QTemporaryFile;
        ret->open();
        file.seek(0);
        char buffer[1024];
        while(true) {
            qint64 len = file.read(buffer, 1024);
            if(len < 1)
                break;
            ret->write(buffer, len);
        }
        ret->seek(0);
        //restore
        if(wasOpen)
            file.seek(old_off);
        else
            file.close();
        //done
        return ret;
    }
    return 0;
}
Ejemplo n.º 3
0
void TestImport::csvImport()
{
    // Fetch data
    QFETCH(QString, csv);
    QFETCH(char, separator);
    QFETCH(char, quote);
    QFETCH(QString, encoding);
    QFETCH(int, numfields);
    QFETCH(QVector<QStringList>, result);

    // Create temporary CSV file
    QTemporaryFile file;
    QVERIFY(file.open());
    {
    QTextStream out(&file);
    out.setCodec(encoding.toUtf8());
    out << csv;
    }
    file.flush();

    CSVParser csvparser(true, separator, quote);
    file.seek(0);
    QTextStream tstream(&file);
    tstream.setCodec(encoding.toUtf8());
    csvparser.parse(tstream);

    // Check return values
    QCOMPARE(csvparser.csv(), result);
    QCOMPARE((int)csvparser.columns(), numfields);
}
Ejemplo n.º 4
0
void BrisaControlPoint::replyFinished(QNetworkReply *reply) {
    QTemporaryFile *rootXml = new QTemporaryFile();
    if (!rootXml->open()) {
        qWarning() << "Brisa Control Point: Failed to open file for writing root XML.";
    } else {
        rootXml->write(reply->readAll());
        rootXml->seek(0);
        QUrl *urlBase = new QUrl(reply->url());

        BrisaControlPointDevice *device = new BrisaControlPointDevice(rootXml, urlBase);

        /* Fix embedded devices host/port attributes */
        QList<BrisaControlPointService*> serviceList = device->getServiceList();
        foreach(BrisaControlPointService *s, serviceList) {
                s->setAttribute(BrisaControlPointService::Host, urlBase->host());
                s->setAttribute(BrisaControlPointService::Port,
                        QString().setNum(urlBase->port()));
        }

        rootXml->remove();
        delete rootXml;
        delete urlBase;
        // deleteLater as per Qt documentation (see Detailed Description section of
        // QNetworkAccessManager class documentation for more details;
        reply->deleteLater();

        emit deviceFound(device);
    }
Ejemplo n.º 5
0
 // Follow the links (now sorted), load page from unsorted file and
 // store it to the end of a new file. The file is thus sorted.
 foreach(const Link &it, links)
 {
   temporaryFile.seek(it.second);
   QString name = FileUtils::readString(temporaryFile);
   QString contents = FileUtils::readString(temporaryFile);
   CHECK_MSG(file.pos() == it.second + sizeof(quint32) + entryCount * sizeof(qint64), "Data corruption.");
   FileUtils::writeString(file, name);
   FileUtils::writeString(file, contents);
 }
Ejemplo n.º 6
0
void TestImport::csvImport()
{
    // Fetch data
    QFETCH(QString, csv);
    QFETCH(char, separator);
    QFETCH(char, quote);
    QFETCH(QString, encoding);
    QFETCH(int, numfields);
    QFETCH(QVector<QVector<QByteArray>>, result);

    // Create temporary CSV file
    QTemporaryFile file;
    QVERIFY(file.open());
    {
        QTextStream out(&file);
        out.setCodec(encoding.toUtf8());
        out << csv;
    }
    file.flush();

    CSVParser csvparser(true, separator, quote);
    file.seek(0);
    QTextStream tstream(&file);
    tstream.setCodec(encoding.toUtf8());

    QVector<QVector<QByteArray>> parsedCsv;
    int parsedCsvColumns = 0;
    csvparser.parse([&parsedCsv, &parsedCsvColumns](size_t /*rowNum*/, const CSVRow& data) -> bool {
        QVector<QByteArray> row;
        for(size_t i=0;i<data.num_fields;i++)
            row.push_back(QByteArray(data.fields[i].data, data.fields[i].data_length));
        parsedCsv.push_back(row);
        if(row.size() > parsedCsvColumns)
            parsedCsvColumns = row.size();
        return true;
    }, tstream);

    // Check return values
    QCOMPARE(parsedCsvColumns, numfields);
    QCOMPARE(parsedCsv.size(), result.size());
    for(int i=0;i<parsedCsv.size();i++)
    {
        QCOMPARE(parsedCsv.at(i).size(), result.at(i).size());
        for(int j=0;j<parsedCsv.at(i).size();j++)
            QCOMPARE(parsedCsv.at(i).at(j), result.at(i).at(j));
    }
    QCOMPARE(parsedCsv, result);
}
Ejemplo n.º 7
0
bool SxVersionedFile::checkInHead( QFile *file, QDir *history)
{
	QMap<QString,QVariant> props;
	QByteArray data;
	
	
	QFile revFile( makeVersionName( history, 0) );

	
	if( revFile.exists () )
	{
		// Build patch
		if( !revFile.open(QIODevice::ReadWrite) )
			return false;
		// Diff current file and revFile.  save patch as rev + 1;
		qDebug() << "Diff" << revFile.fileName();
		QTemporaryFile patch;
		patch.open();
		
		m_versionUtils.diffQFiles( file, &revFile, &patch );

		QMap<QString,QVariant> props = getHeadProps( history);
		QString revName = makeNextVersionName( history );
		qDebug() << "Write to" << revName;
		
		QFile rev( revName );
		if( !rev.open(QIODevice::WriteOnly) )
			return false;
		QDataStream outputStream( &rev );
		patch.seek(0);
		outputStream << props << patch.readAll();
		rev.close();
		patch.close();
		revFile.close();
	}

	if( !revFile.open(QIODevice::ReadWrite) )
		return false;
	QDataStream outputStream( &revFile );
	quint64 origPos = file->pos();
	file->seek(0);
	outputStream << metaInfo() << file->readAll();
	file->seek(origPos);
	revFile.close();
	return true;

}
Ejemplo n.º 8
0
void tst_qtemporaryfile::readwrite()
{
    QFETCH(qint64, amount);

    const int dataSize = 4096;
    QByteArray data;
    data.fill('a', dataSize);
    QBENCHMARK {
        for (qint64 i = 0; i < amount; ++i) {
            QTemporaryFile file;
            file.open();
            file.write(data);
            file.seek(0);
            file.read(dataSize);
            file.close();
        }
    }
}
Ejemplo n.º 9
0
void tst_QTemporaryFile::size()
{
    QTemporaryFile file;
    QVERIFY(file.open());
    QVERIFY(file.exists());
    QVERIFY(!file.isSequential());
    QByteArray str("foobar");
    file.write(str);
    QVERIFY(QFile::exists(file.fileName()));
    // On CE it takes more time for the filesystem to update
    // the information. Usually you have to close it or seek
    // to get latest information. flush() does not help either.
#if !defined(Q_OS_WINCE)
    QCOMPARE(file.size(), qint64(6));
#endif
    file.seek(0);
    QCOMPARE(file.size(), qint64(6));
}
void TagDatabaseInMemoryTest::loadInvalidLines()
{
	QTemporaryFile file;
	QVERIFY(file.open());
	file.write("tag1,1\ntag3\n");
	file.seek(0);

	TagDatabaseInMemory database("tests/resources/tag-types.txt", file.fileName());
	QVERIFY(database.load());

	QMap<QString, TagType> types = database.getTagTypes(QStringList() << "tag1" << "tag3");

	QCOMPARE(types.count(), 1);
	QCOMPARE(types.contains("tag1"), true);
	QCOMPARE(types.contains("tag3"), false);
	QCOMPARE(types.value("tag1").name(), QString("artist"));
	QCOMPARE(database.count(), 1);
}
void TagDatabaseInMemoryTest::loadValidData()
{
	QTemporaryFile file;
	QVERIFY(file.open());
	file.write("tag1,0\ntag2,1\ntag3,3\ntag4,4");
	file.seek(0);

	TagDatabaseInMemory database("tests/resources/tag-types.txt", file.fileName());
	QVERIFY(database.load());

	QMap<QString, TagType> types = database.getTagTypes(QStringList() << "tag1" << "tag3");

	QCOMPARE(types.count(), 2);
	QCOMPARE(types.contains("tag1"), true);
	QCOMPARE(types.contains("tag3"), true);
	QCOMPARE(types.value("tag1").name(), QString("general"));
	QCOMPARE(types.value("tag3").name(), QString("copyright"));
	QCOMPARE(database.count(), 4);
}
Ejemplo n.º 12
0
Variant TestLocalSocket::randomData(uchar *type, uchar dataAmnt, uchar pkgAmnt, uchar fdAmnt, QFile **targetFile) const
{
	///@todo Get actual user file number limit and use it here
	const int		maxFiles	=	512;	// Limit number of files to send
	
	if(m_openFiles.count() >= maxFiles)
		fdAmnt	=	0;
		
	ushort	maxAmnt	=	dataAmnt + pkgAmnt + fdAmnt;
	
	if(maxAmnt == 0)
		return Variant();
	
	ushort	actVal	=	(qrand()/(double(RAND_MAX)))*maxAmnt;
	*type	=	(actVal < dataAmnt ? 0 : (actVal < dataAmnt+pkgAmnt ? 1 : 2));
	
// 	*type	=	qMin(uchar((qrand()/(double(RAND_MAX)))*3), uchar(2));	// 0..2
// 	*type	=	qMin(uchar((qrand()/(double(RAND_MAX)))*2), uchar(1));	// 0..1 => no file descriptors yet
// 	*type	=	2;	// Only file descriptors
	Variant			ret;
	
	#define SIZE_MAX		1048576		// 1 M
// 	#define SIZE_MAX		262144		// 256 K
	
	switch(*type)
	{
		// Random data
		case 0:
		case 1:
		{
			quint32	size	=	qMax(quint32((qrand()/double(RAND_MAX))*SIZE_MAX), quint32(1));	// At least one byte
			
			QByteArray	data;
			data.reserve(size);
			
			for(qint64 j = 0; j < size; j += sizeof(int))
			{
				int	r	=	qrand();
				data.append((char*)&r, qMin(int(size - data.size()), (int)sizeof(int)));
			}
			
			ret	=	data;
		}break;
		
		// File descriptor
		case 2:
		{
			QTemporaryFile	*	file	=	new QTemporaryFile(QDir::tempPath() + QDir::separator() +  "testlocalsocket");
			
			if(!file->open())
			{
				delete file;
				qDebug("Could not create temporary file!");
				return Variant();
			}
			
			// Write filename to temp file
			QFileInfo	info(*file);
			file->write(QString("%1").arg(info.absoluteFilePath()).toUtf8());
			file->flush();
			file->seek(0);
			
			ret		=	Variant::fromSocketDescriptor(file->handle());
			*targetFile	=	file;
		}break;
	}
	
	return ret;
}