forked from qt-creator/qt-creator
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>
92 lines
2.5 KiB
C++
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"
|