完善测试

This commit is contained in:
2026-01-05 04:02:05 +08:00
parent 4b97a66f17
commit 21d5ed5f59
8 changed files with 352 additions and 3 deletions
+73
View File
@@ -1,5 +1,7 @@
#include <gtest/gtest.h>
#include <QColor>
#include "undo/undostack.h"
#include "undo/undocommand.h"
@@ -47,3 +49,74 @@ TEST(UndoStack, PushUndoRedo)
stack.redo();
EXPECT_EQ(counter, 1);
}
TEST(UndoStack, EmptyStateAndModelData)
{
olive::UndoStack stack;
EXPECT_FALSE(stack.CanUndo());
EXPECT_FALSE(stack.CanRedo());
EXPECT_EQ(stack.columnCount(), 2);
EXPECT_EQ(stack.rowCount(), 1);
EXPECT_TRUE(stack.hasChildren(QModelIndex()));
QModelIndex name_index = stack.index(0, 1);
EXPECT_EQ(stack.data(name_index, Qt::DisplayRole).toString(),
QStringLiteral("New/Open Project"));
EXPECT_EQ(stack.headerData(0, Qt::Horizontal, Qt::DisplayRole).toString(),
QStringLiteral("Number"));
EXPECT_EQ(stack.headerData(1, Qt::Horizontal, Qt::DisplayRole).toString(),
QStringLiteral("Action"));
}
TEST(UndoStack, UndoRedoListsAndColors)
{
int counter = 0;
olive::UndoStack stack;
stack.push(new TestCommand(&counter), QStringLiteral("First"));
stack.push(new TestCommand(&counter), QStringLiteral("Second"));
EXPECT_EQ(counter, 2);
EXPECT_EQ(stack.rowCount(), 3);
stack.undo();
EXPECT_EQ(counter, 1);
EXPECT_TRUE(stack.CanRedo());
QModelIndex undone_name = stack.index(2, 1);
EXPECT_EQ(stack.data(undone_name, Qt::DisplayRole).toString(),
QStringLiteral("Second"));
QColor undone_color =
stack.data(undone_name, Qt::ForegroundRole).value<QColor>();
EXPECT_EQ(undone_color, QColor(Qt::gray));
stack.redo();
EXPECT_EQ(counter, 2);
EXPECT_FALSE(stack.CanRedo());
}
TEST(UndoStack, JumpRestoresState)
{
int counter = 0;
olive::UndoStack stack;
stack.push(new TestCommand(&counter), QStringLiteral("A"));
stack.push(new TestCommand(&counter), QStringLiteral("B"));
stack.push(new TestCommand(&counter), QStringLiteral("C"));
EXPECT_EQ(counter, 3);
EXPECT_EQ(stack.rowCount(), 4);
stack.jump(1);
EXPECT_EQ(counter, 0);
EXPECT_TRUE(stack.CanRedo());
stack.jump(4);
EXPECT_EQ(counter, 3);
EXPECT_FALSE(stack.CanRedo());
}
TEST(UndoStack, EmptyMultiUndoCommandIsIgnored)
{
olive::UndoStack stack;
auto *empty_multi = new olive::MultiUndoCommand();
stack.push(empty_multi, QStringLiteral("Empty"));
EXPECT_EQ(stack.rowCount(), 1);
EXPECT_FALSE(stack.CanUndo());
}