Files
qt-creator/tests/auto/qml/reformatter/tst_reformatter.cpp
Semih Yavuz 15a06b77c0 Fix tst_qml_reformatter auto test
Add source location to pragma library writer so that the comments before
.pragma line are also written.

Fix tst_qml_reformatter by skipping the blankline comparisons. Line by
line comparison with the non-formatted code is not a good idea to test
 reformatting. Ideally test should have compared the formatted file with
the original one character wise, yet it is not worth changing into that
at this point.

Amends 0ce57fcf5e90f8bf8cfbe681f2954a0c1ef0e945

Change-Id: I39bcee2c881e1a0928c17ebb45aa1c85e6cf3b99
Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org>
Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
2023-04-14 14:23:14 +00:00

92 lines
2.5 KiB
C++

// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#include <QScopedPointer>
#include <QLatin1String>
#include <QGraphicsObject>
#include <QApplication>
#include <QSettings>
#include <QFileInfo>
#include <qmljs/qmljsdocument.h>
#include <qmljs/qmljsmodelmanagerinterface.h>
#include <qmljs/qmljsreformatter.h>
#include <qmljs/parser/qmljsast_p.h>
#include <qmljs/parser/qmljsengine_p.h>
#include <utils/filepath.h>
#include <QtTest>
#include <algorithm>
using namespace QmlJS;
using namespace QmlJS::AST;
class tst_Reformatter : public QObject
{
Q_OBJECT
public:
tst_Reformatter();
private slots:
void test();
void test_data();
};
tst_Reformatter::tst_Reformatter()
{
}
#define QCOMPARE_NOEXIT(actual, expected) \
QTest::qCompare(actual, expected, #actual, #expected, __FILE__, __LINE__)
void tst_Reformatter::test_data()
{
QTest::addColumn<QString>("path");
QDirIterator it(TESTSRCDIR, QStringList() << QLatin1String("*.qml") << QLatin1String("*.js"), QDir::Files);
while (it.hasNext()) {
const QString fileName = it.next();
QTest::newRow(fileName.toLatin1()) << it.filePath();
}
}
void tst_Reformatter::test()
{
QFETCH(QString, path);
Utils::FilePath fPath = Utils::FilePath::fromString(path);
Document::MutablePtr doc = Document::create(fPath, ModelManagerInterface::guessLanguageOfFile(fPath));
QFile file(doc->fileName().toString());
file.open(QFile::ReadOnly | QFile::Text);
QString source = QString::fromUtf8(file.readAll());
doc->setSource(source);
file.close();
doc->parse();
QVERIFY(!doc->source().isEmpty());
QVERIFY(doc->diagnosticMessages().isEmpty());
QString rewritten = reformat(doc);
QStringList sourceLines = source.split(QLatin1Char('\n'), Qt::SkipEmptyParts);
QStringList newLines = rewritten.split(QLatin1Char('\n'), Qt::SkipEmptyParts);
// compare line by line
int commonLines = qMin(newLines.size(), sourceLines.size());
for (int i = 0; i < commonLines; ++i) {
// names intentional to make 'Actual (sourceLine): ...\nExpected (newLinee): ...' line up
const QString &sourceLine = sourceLines.at(i);
const QString &newLinee = newLines.at(i);
bool fail = !QCOMPARE_NOEXIT(newLinee, sourceLine);
if (fail) {
qDebug() << "in line" << (i + 1);
return;
}
}
QCOMPARE(sourceLines.size(), newLines.size());
}
QTEST_GUILESS_MAIN(tst_Reformatter);
#include "tst_reformatter.moc"