14.29: the blank start tab stays put; Untitled numbers stay low
This commit is contained in:
9 files changed
+123
-26
No files matched your search
@@ -25,6 +25,7 @@ class ProjectTabStripTests : public QObject {
|
||||
private slots:
|
||||
void eachTabIsAsWideAsItsTitle();
|
||||
void aTitleMovesOnlyTheTabsAfterIt();
|
||||
void theBlankStartTabHasNoCloseButton();
|
||||
};
|
||||
|
||||
void ProjectTabStripTests::eachTabIsAsWideAsItsTitle()
|
||||
@@ -41,18 +42,18 @@ void ProjectTabStripTests::eachTabIsAsWideAsItsTitle()
|
||||
QCOMPARE(select(*buttons[0]).width(), 35 + 8);
|
||||
QCOMPARE(select(*buttons[1]).width(), 155 + 8);
|
||||
QVERIFY(select(*buttons[1]).text().endsWith(QChar(0x2026)));
|
||||
QCOMPARE(select(*buttons[2]).width(), label(QStringLiteral("Untitled 3"), true) + 8);
|
||||
QCOMPARE(select(*buttons[2]).text(), QString("Untitled 3"));
|
||||
QCOMPARE(select(*buttons[2]).width(), label(QStringLiteral("Untitled"), true) + 8);
|
||||
QCOMPARE(select(*buttons[2]).text(), QString("Untitled"));
|
||||
// Swift's pill: label, 11 before, 8 after, 16, 5.
|
||||
buttons[2]->adjustSize();
|
||||
QCOMPARE(buttons[2]->width(), label(QStringLiteral("Untitled 3"), true) + 40);
|
||||
QCOMPARE(buttons[2]->width(), label(QStringLiteral("Untitled"), true) + 40);
|
||||
// The dot: 10 for the title, its character's own width.
|
||||
workspace.current().session.createDocument(8, 8);
|
||||
workspace.current().session.addBlankLayer();
|
||||
QVERIFY(workspace.current().session.isModified());
|
||||
const QFontMetrics metrics(select(*buttons[2]).font());
|
||||
QCOMPARE(select(*buttons[2]).text(), QString("● Untitled 3"));
|
||||
QCOMPARE(select(*buttons[2]).width(), label(QStringLiteral("Untitled 3"), true) + 10 + 8 + metrics.horizontalAdvance(QStringLiteral("● ")) - 10);
|
||||
QCOMPARE(select(*buttons[2]).text(), QString("● Untitled"));
|
||||
QCOMPARE(select(*buttons[2]).width(), label(QStringLiteral("Untitled"), true) + 10 + 8 + metrics.horizontalAdvance(QStringLiteral("● ")) - 10);
|
||||
// An unsaved long title elides within Swift's width less 10.
|
||||
workspace.select(workspace.tabs()[1]->id);
|
||||
workspace.current().session.createDocument(8, 8);
|
||||
@@ -62,7 +63,7 @@ void ProjectTabStripTests::eachTabIsAsWideAsItsTitle()
|
||||
QCOMPARE(select(*buttons[1]).text(), QStringLiteral("● ") + bold.elidedText(long_, Qt::ElideRight, 145));
|
||||
// Chosen, a tab's weight changes its width.
|
||||
workspace.select(workspace.tabs()[0]->id);
|
||||
QCOMPARE(select(*buttons[2]).width(), label(QStringLiteral("Untitled 3"), false) + 10 + 8 + QFontMetrics(select(*buttons[2]).font()).horizontalAdvance(QStringLiteral("● ")) - 10);
|
||||
QCOMPARE(select(*buttons[2]).width(), label(QStringLiteral("Untitled"), false) + 10 + 8 + QFontMetrics(select(*buttons[2]).font()).horizontalAdvance(QStringLiteral("● ")) - 10);
|
||||
}
|
||||
|
||||
void ProjectTabStripTests::aTitleMovesOnlyTheTabsAfterIt()
|
||||
@@ -101,5 +102,31 @@ void ProjectTabStripTests::aTitleMovesOnlyTheTabsAfterIt()
|
||||
QCOMPARE(buttons[1]->x() - (buttons[0]->x() + buttons[0]->width()), 6);
|
||||
}
|
||||
|
||||
// Swift 1.4.9: the pill closes up round its name.
|
||||
void ProjectTabStripTests::theBlankStartTabHasNoCloseButton()
|
||||
{
|
||||
ProjectWorkspace workspace;
|
||||
ProjectTabStrip strip(workspace);
|
||||
strip.resize(1000, 34);
|
||||
strip.show();
|
||||
QVERIFY(QTest::qWaitForWindowExposed(&strip));
|
||||
ProjectTabButton &only = *strip.buttons()[0];
|
||||
QToolButton &close = *only.findChild<QToolButton *>(QStringLiteral("closeTab"));
|
||||
const int width = label(QStringLiteral("Untitled"), true);
|
||||
QVERIFY(close.isHidden());
|
||||
QTRY_COMPARE(only.width(), width + 22);
|
||||
QCOMPARE(select(only).width(), width + 11);
|
||||
// A document gives it something to close.
|
||||
workspace.current().session.createDocument(8, 8);
|
||||
QVERIFY(!close.isHidden());
|
||||
// Round the title: 11 before; 16 and 5 after.
|
||||
QTRY_COMPARE(only.width() - select(only).width(), 11 + 16 + 5);
|
||||
// A second tab makes either closable.
|
||||
workspace.current().session.clearProject();
|
||||
QVERIFY(close.isHidden());
|
||||
workspace.addTab(false);
|
||||
QVERIFY(!close.isHidden() && !strip.buttons()[1]->findChild<QToolButton *>(QStringLiteral("closeTab"))->isHidden());
|
||||
}
|
||||
|
||||
QTEST_MAIN(ProjectTabStripTests)
|
||||
#include "ProjectTabStripTests.moc"
|
||||
@@ -101,11 +101,11 @@ void ProjectWorkspaceFlowTests::aProjectOpensInATabOfItsOwn()
|
||||
workspace.newCanvas();
|
||||
store(folder.filePath("Third.comp"), 1);
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(folder.filePath("Third.comp"), done); }), std::optional(true));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip", "Second", "Untitled 2", "Third*"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip", "Second", "Untitled", "Third*"}));
|
||||
// While it manages, nothing else begins.
|
||||
workspace.current().session.setIsProjectBusy(true);
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(folder.filePath("Trip.comp"), done); }), std::optional(false));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip", "Second", "Untitled 2", "Third*"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip", "Second", "Untitled", "Third*"}));
|
||||
}
|
||||
|
||||
void ProjectWorkspaceFlowTests::aProjectThatIsOpenIsBroughtToTheFront()
|
||||
@@ -116,10 +116,10 @@ void ProjectWorkspaceFlowTests::aProjectThatIsOpenIsBroughtToTheFront()
|
||||
ProjectWorkspace workspace;
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(folder.filePath("Trip.comp"), done); }), std::optional(true));
|
||||
workspace.newCanvas();
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip", "Untitled 2*"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip", "Untitled*"}));
|
||||
// By a link, with a slash: still the open project.
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(folder.filePath("Link.comp") + "/", done); }), std::optional(true));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip*", "Untitled 2"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Trip*", "Untitled"}));
|
||||
QVERIFY(!workspace.isManaging());
|
||||
}
|
||||
|
||||
@@ -173,8 +173,11 @@ void ProjectWorkspaceFlowTests::closingATabAsksAboutItsWork()
|
||||
workspace.current().session.setIsProjectBusy(false);
|
||||
workspace.close(extra);
|
||||
QTRY_COMPARE(int(workspace.tabs().size()), 1);
|
||||
workspace.close(blank);
|
||||
QTRY_COMPARE(titles(workspace), (QStringList{"Untitled 4*"}));
|
||||
// The only tab, still blank, stays put (Swift 1.4.9).
|
||||
done = false;
|
||||
workspace.close(blank, [&] { done = true; });
|
||||
QTRY_VERIFY(done);
|
||||
QCOMPARE(titles(workspace), (QStringList{"Untitled 2*"}));
|
||||
QCOMPARE(desk.seen.size(), 2);
|
||||
QVERIFY(!workspace.isManaging());
|
||||
}
|
||||
@@ -231,7 +234,7 @@ void ProjectWorkspaceFlowTests::closingTheWindowLeavesOneFreshTab()
|
||||
QCOMPARE(int(workspace.tabs().size()), 2);
|
||||
workspace.closeWindow(&window);
|
||||
QTRY_VERIFY(!window.isVisible());
|
||||
QCOMPARE(titles(workspace), (QStringList{"Untitled 3*"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Untitled*"}));
|
||||
QVERIFY(!workspace.current().session.document().has_value());
|
||||
}
|
||||
|
||||
@@ -406,15 +409,15 @@ void ProjectWorkspaceFlowTests::aProjectThatMovedAwayIsNoMatchForAnotherMissingO
|
||||
QTest::ignoreMessage(QtWarningMsg, QRegularExpression("^Couldn’t open the project: .+"));
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(folder.filePath("Elsewhere.comp"), done); }), std::optional(false));
|
||||
QCOMPARE(desk.seen.size(), 1);
|
||||
QCOMPARE(titles(workspace), (QStringList{"Here", "Untitled 2*"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Here", "Untitled*"}));
|
||||
// The same missing place is still the same place,
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(folder.filePath("sub/../Here.comp"), done); }), std::optional(true));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Here*", "Untitled 2"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Here*", "Untitled"}));
|
||||
// also when named from the folder the process stands in.
|
||||
workspace.select(workspace.tabs()[1]->id);
|
||||
QDir::setCurrent(folder.path());
|
||||
QCOMPARE(answered([&](auto done) { workspace.open(QString("Here.comp"), done); }), std::optional(true));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Here*", "Untitled 2"}));
|
||||
QCOMPARE(titles(workspace), (QStringList{"Here*", "Untitled"}));
|
||||
}
|
||||
|
||||
void ProjectWorkspaceFlowTests::everyCallIsWholeWithoutACompletion()
|
||||
|
||||
@@ -43,6 +43,7 @@ private slots:
|
||||
void aDropThatIsNoLayerIdIsIgnored();
|
||||
void anOpenFilterHoldsTheSwitch();
|
||||
void moveTabReordersWithoutTouchingSelectionOrDocuments();
|
||||
void untitledNumbersStayLowAndTheBlankTabStays();
|
||||
};
|
||||
|
||||
void ProjectWorkspaceTests::newCanvasOpensAnEmptyTabWithoutAModal()
|
||||
@@ -275,7 +276,7 @@ void ProjectWorkspaceTests::removingATabSelectsItsNeighbour()
|
||||
workspace.removeTab(c);
|
||||
QCOMPARE(int(workspace.tabs().size()), 1);
|
||||
QVERIFY(workspace.current().id != c);
|
||||
QCOMPARE(workspace.current().title(), QString("Untitled 5"));
|
||||
QCOMPARE(workspace.current().title(), QString("Untitled"));
|
||||
}
|
||||
|
||||
void ProjectWorkspaceTests::everyChangeIsAnnouncedAndRefusalsAreSilent()
|
||||
@@ -390,5 +391,38 @@ void ProjectWorkspaceTests::moveTabReordersWithoutTouchingSelectionOrDocuments()
|
||||
QCOMPARE(workspace.selectedID(), c);
|
||||
}
|
||||
|
||||
// The blank start tab stays; numbers stay low (#231).
|
||||
void ProjectWorkspaceTests::untitledNumbersStayLowAndTheBlankTabStays()
|
||||
{
|
||||
ProjectWorkspace workspace;
|
||||
ProjectTab &first = workspace.current();
|
||||
QVERIFY(first.title() == "Untitled" && !workspace.canClose(first));
|
||||
bool done = false;
|
||||
workspace.close(first.id, [&] { done = true; });
|
||||
QTRY_VERIFY(done);
|
||||
QVERIFY(workspace.tabs().size() == 1 && &workspace.current() == &first && first.title() == "Untitled");
|
||||
// A saved but empty session can close.
|
||||
first.session.setProjectPath(QStringLiteral("/x/Trip.comp"));
|
||||
QVERIFY(workspace.canClose(first));
|
||||
first.session.setProjectPath(std::nullopt);
|
||||
first.session.createDocument(10, 10);
|
||||
QVERIFY(workspace.canClose(first));
|
||||
const QUuid second = workspace.addTab().id;
|
||||
const QString third = workspace.addTab().title();
|
||||
QVERIFY(workspace.tab(second)->title() == "Untitled 2" && third == "Untitled 3");
|
||||
// With another tab, a blank one closes.
|
||||
QVERIFY(workspace.canClose(*workspace.tab(second)));
|
||||
workspace.removeTab(second);
|
||||
QCOMPARE(workspace.addTab().title(), QString("Untitled 2"));
|
||||
// Untitled is free again; a project's Untitled 4 is taken.
|
||||
first.session.setProjectPath(QStringLiteral("/x/Untitled 4.comp"));
|
||||
QCOMPARE(workspace.addTab().title(), QString("Untitled"));
|
||||
QCOMPARE(workspace.addTab().title(), QString("Untitled 5"));
|
||||
const std::vector<std::shared_ptr<ProjectTab>> all = workspace.tabs();
|
||||
for (const std::shared_ptr<ProjectTab> &tab : all)
|
||||
workspace.removeTab(tab->id);
|
||||
QVERIFY(workspace.tabs().size() == 1 && workspace.current().title() == "Untitled");
|
||||
}
|
||||
|
||||
QTEST_MAIN(ProjectWorkspaceTests)
|
||||
#include "ProjectWorkspaceTests.moc"
|
||||
@@ -296,7 +296,7 @@ void ProjectWorkspaceViewTests::theToolbarFollowsTheFrontSession()
|
||||
workspace.newCanvas();
|
||||
QVERIFY(!fit.isEnabled() && !window.isWindowModified());
|
||||
QCOMPARE(window.windowFilePath(), QString());
|
||||
QCOMPARE(window.windowTitle(), QString("Untitled 2[*]"));
|
||||
QCOMPARE(window.windowTitle(), QString("Untitled[*]"));
|
||||
// At its smallest the window still shows the whole editor.
|
||||
window.resize(800, 520);
|
||||
QTRY_COMPARE(window.size(), QSize(800, 520));
|
||||
|
||||
@@ -72,5 +72,13 @@ void WebPImportTests::aDroppedPictureTakesWebPAfterTIFF()
|
||||
QCOMPARE(ImageFileDrop::providers(data).front()->formats(), QStringList{"image/tiff"});
|
||||
}
|
||||
|
||||
QTEST_MAIN(WebPImportTests)
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
// Its drops copy into its own folder: others count theirs.
|
||||
QTemporaryDir own;
|
||||
qputenv("TMPDIR", own.path().toUtf8());
|
||||
QApplication app(argc, argv);
|
||||
WebPImportTests tests;
|
||||
return QTest::qExec(&tests, argc, argv);
|
||||
}
|
||||
#include "WebPImportTests.moc"
|
||||
Reference in new issue
Block a user