Files
OmaPhoto/tests/TextEditingGatesTests.cpp
T

102 lines
4.2 KiB
C++

#include "MenuFixtures.h"
#include "Document/BrushStroke.h"
#include "SelectionFixtures.h"
// Swift's d448625: filters, adjustments and Invert wait for open text.
class TextEditingGatesTests : public QObject {
Q_OBJECT
private slots:
void colourEditsWaitForOpenText();
void existingTextAndAnEmptyLayerWaitToo();
};
void TextEditingGatesTests::colourEditsWaitForOpenText()
{
Bar bar;
EditorSession &session = bar.session();
session.createDocument(40, 30);
QImage image = BrushRaster::context(40, 30, false);
image.fill(QColor(120, 160, 200));
session.insert(ImportedImage(image, image, QStringLiteral("Colour")));
const QStringList entries{"levels", "curves", "hueSaturation", "invert", "gaussianBlur", "vignette", "exposure"};
const auto enabled = [&] {
QStringList on;
for (const QString &name : entries) {
if (bar.action(qPrintable(name)).isEnabled())
on << name;
}
return on;
};
QVERIFY(session.canAdjustColors() && session.canInvert() && session.canVignette());
QCOMPARE(enabled(), entries);
// Open text is drawn by its editor: colour edits wait.
session.selectTool(NavigationTool::type);
session.beginText(QPointF(5, 5));
QVERIFY(session.textDraft());
QVERIFY(!session.canAdjustColors() && !session.canInvert() && !session.canVignette());
QCOMPARE(enabled(), QStringList());
session.beginLevels();
session.beginFilter(FilterKind::gaussianBlur);
session.invertPixels();
QVERIFY(!session.levels() && !session.filterEdit());
// Closed, the text lets them go on.
session.cancelText();
QVERIFY(session.canAdjustColors() && session.canInvert() && session.canVignette());
QCOMPARE(enabled(), entries);
}
void TextEditingGatesTests::existingTextAndAnEmptyLayerWaitToo()
{
Bar bar;
EditorSession &session = bar.session();
session.createDocument(200, 100);
session.selectTool(NavigationTool::type);
session.beginText(QPointF(10, 10));
TextDraft draft = session.textDraft().value();
draft.style.content = QStringLiteral("Words");
session.setTextDraft(draft);
QVERIFY(session.finishText());
session.applySelection(rectPath(QRectF(0, 0, 50, 50)), SelectionMode::replace, "Select");
const QStringList entries{"levels", "hueSaturation", "invert", "gaussianBlur", "cameraRawFilter", "contentAwareFill"};
const auto enabled = [&] {
QStringList on;
for (const QString &name : entries) {
if (bar.action(qPrintable(name)).isEnabled())
on << name;
}
return on;
};
QCOMPARE(enabled(), entries);
QVERIFY(session.canContentAwareFill());
// Reopened, the layer's text is its editor's: every edit waits.
session.editActiveText();
QVERIFY(session.textDraft().value().layerID.has_value());
QVERIFY(!session.canAdjustColors() && !session.canInvert() && !session.canContentAwareFill());
QCOMPARE(enabled(), QStringList());
const QImage pixels = session.activeLayer().value().asset.value().image();
const int steps = session.history.undoCount();
session.beginHueSaturation();
session.beginFilter(FilterKind::cameraRaw);
bool inverted = false;
session.invertPixels([&inverted] { inverted = true; });
QTRY_VERIFY(inverted);
QVERIFY(!session.hueSaturation() && !session.filterEdit());
QCOMPARE(session.history.undoCount(), steps);
QCOMPARE(session.activeLayer().value().asset.value().image(), pixels);
QCOMPARE(session.textDraft().value().style.content, QString("Words"));
QVERIFY(session.finishText());
QCOMPARE(enabled(), entries);
// Vignette paints an empty layer, but not under new text.
session.deselect();
session.addBlankLayer();
QVERIFY(!session.activeLayer().value().asset && session.canVignette());
session.beginText(QPointF(120, 60), true);
QVERIFY(!session.textDraft().value().layerID && !session.activeLayer().value().asset);
QVERIFY(!session.canVignette() && !bar.action("vignette").isEnabled());
session.cancelText();
QVERIFY(session.canVignette() && bar.action("vignette").isEnabled());
}
QTEST_MAIN(TextEditingGatesTests)
#include "TextEditingGatesTests.moc"