63 lines
2.0 KiB
C++
63 lines
2.0 KiB
C++
// SPDX-License-Identifier: GPL-3.0-or-later
|
|
|
|
#include "glossarystore.h"
|
|
|
|
#include <QDir>
|
|
#include <QFile>
|
|
#include <QStandardPaths>
|
|
#include <QTest>
|
|
using namespace Qt::Literals::StringLiterals;
|
|
|
|
class GlossaryStoreTest : public QObject
|
|
{
|
|
Q_OBJECT
|
|
private Q_SLOTS:
|
|
void saveLoadMerge()
|
|
{
|
|
QTemporaryDir temp;
|
|
QStandardPaths::setTestModeEnabled(true);
|
|
const QString directory = temp.path() + u"/series"_s;
|
|
GlossaryStore::Glossary original{directory, {{u"Lin"_s, u"Lâm"_s}}};
|
|
QVERIFY(GlossaryStore::save(original));
|
|
const auto loaded = GlossaryStore::load(directory);
|
|
QCOMPARE(loaded.entries.size(), 1);
|
|
const auto merged = GlossaryStore::merge(loaded, {{u"Lin"_s, u"Other"_s}, {u"Sect"_s, u"Tông"_s}});
|
|
QCOMPARE(merged.entries.size(), 2);
|
|
QCOMPARE(merged.entries.at(0).target, u"Lâm"_s);
|
|
QCOMPARE(merged.entries.at(1).source, u"Sect"_s);
|
|
}
|
|
|
|
void saveFailureReturnsError()
|
|
{
|
|
QTemporaryDir temp;
|
|
QVERIFY(temp.isValid());
|
|
QStandardPaths::setTestModeEnabled(true);
|
|
|
|
const QString appData = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
|
|
const QString glossaries = appData + u"/glossaries"_s;
|
|
QDir(glossaries).removeRecursively();
|
|
QVERIFY(QDir().mkpath(appData));
|
|
QFile blocker(glossaries);
|
|
QVERIFY(blocker.open(QIODevice::WriteOnly));
|
|
blocker.write("blocked");
|
|
blocker.close();
|
|
|
|
GlossaryStore::Glossary glossary{temp.path(), {{u"Original"_s, u"Translation"_s}}};
|
|
QString error;
|
|
QVERIFY(!GlossaryStore::save(glossary, &error));
|
|
QVERIFY(!error.isEmpty());
|
|
|
|
QFile::remove(glossaries);
|
|
}
|
|
|
|
void saveRejectsIncompleteEntry()
|
|
{
|
|
QString error;
|
|
QVERIFY(!GlossaryStore::save({QDir::tempPath(), {{u"Original"_s, {}}}}, &error));
|
|
QVERIFY(error.contains(u"both"_s));
|
|
}
|
|
};
|
|
|
|
QTEST_MAIN(GlossaryStoreTest)
|
|
#include "glossarystoretest.moc"
|