Tests for playlist undo/redo

This commit is contained in:
David Sansome 2010-04-20 18:41:12 +00:00
parent 2f9d1867be
commit 57c9a0d00a
1 changed files with 107 additions and 0 deletions

View File

@ -22,6 +22,7 @@
#include "mock_playlistitem.h"
#include <QtDebug>
#include <QUndoStack>
using boost::shared_ptr;
using ::testing::Return;
@ -264,6 +265,112 @@ TEST_F(PlaylistTest, Clear) {
EXPECT_EQ(-1, playlist_.next_index());
}
TEST_F(PlaylistTest, UndoAdd) {
EXPECT_FALSE(playlist_.undo_stack()->canUndo());
EXPECT_FALSE(playlist_.undo_stack()->canRedo());
playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Title"));
EXPECT_EQ(1, playlist_.rowCount(QModelIndex()));
EXPECT_FALSE(playlist_.undo_stack()->canRedo());
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
playlist_.undo_stack()->undo();
EXPECT_EQ(0, playlist_.rowCount(QModelIndex()));
EXPECT_FALSE(playlist_.undo_stack()->canUndo());
ASSERT_TRUE(playlist_.undo_stack()->canRedo());
playlist_.undo_stack()->redo();
EXPECT_EQ(1, playlist_.rowCount(QModelIndex()));
EXPECT_FALSE(playlist_.undo_stack()->canRedo());
EXPECT_TRUE(playlist_.undo_stack()->canUndo());
EXPECT_EQ("Title", playlist_.data(playlist_.index(0, Playlist::Column_Title)));
}
TEST_F(PlaylistTest, UndoMultiAdd) {
// Add 1 item
playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("One"));
// Add 2 items
playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Two") << MakeMockItemP("Three"));
// Undo adding 2 items
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
EXPECT_EQ("add 2 songs", playlist_.undo_stack()->undoText());
playlist_.undo_stack()->undo();
// Undo adding 1 item
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
EXPECT_EQ("add 1 songs", playlist_.undo_stack()->undoText());
playlist_.undo_stack()->undo();
EXPECT_FALSE(playlist_.undo_stack()->canUndo());
}
TEST_F(PlaylistTest, UndoRemove) {
EXPECT_FALSE(playlist_.undo_stack()->canUndo());
EXPECT_FALSE(playlist_.undo_stack()->canRedo());
playlist_.InsertItems(PlaylistItemList() << MakeMockItemP("Title"));
playlist_.removeRow(0);
EXPECT_EQ(0, playlist_.rowCount(QModelIndex()));
EXPECT_FALSE(playlist_.undo_stack()->canRedo());
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
playlist_.undo_stack()->undo();
EXPECT_EQ(1, playlist_.rowCount(QModelIndex()));
ASSERT_TRUE(playlist_.undo_stack()->canRedo());
EXPECT_EQ("Title", playlist_.data(playlist_.index(0, Playlist::Column_Title)));
playlist_.undo_stack()->redo();
EXPECT_EQ(0, playlist_.rowCount(QModelIndex()));
EXPECT_FALSE(playlist_.undo_stack()->canRedo());
EXPECT_TRUE(playlist_.undo_stack()->canUndo());
}
TEST_F(PlaylistTest, UndoMultiRemove) {
// Add 3 items
playlist_.InsertItems(PlaylistItemList()
<< MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three"));
ASSERT_EQ(3, playlist_.rowCount(QModelIndex()));
// Remove 1 item
playlist_.removeRow(1); // Item "Two"
// Remove 2 items
playlist_.removeRows(0, 2); // "One" and "Three"
ASSERT_EQ(0, playlist_.rowCount(QModelIndex()));
// Undo removing 2 items
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
EXPECT_EQ("remove 2 songs", playlist_.undo_stack()->undoText());
playlist_.undo_stack()->undo();
ASSERT_EQ(2, playlist_.rowCount(QModelIndex()));
// Undo removing 1 item
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
EXPECT_EQ("remove 1 songs", playlist_.undo_stack()->undoText());
playlist_.undo_stack()->undo();
ASSERT_EQ(3, playlist_.rowCount(QModelIndex()));
}
TEST_F(PlaylistTest, UndoClear) {
playlist_.InsertItems(PlaylistItemList()
<< MakeMockItemP("One") << MakeMockItemP("Two") << MakeMockItemP("Three"));
ASSERT_EQ(3, playlist_.rowCount(QModelIndex()));
playlist_.Clear();
ASSERT_EQ(0, playlist_.rowCount(QModelIndex()));
ASSERT_TRUE(playlist_.undo_stack()->canUndo());
EXPECT_EQ("remove 3 songs", playlist_.undo_stack()->undoText());
playlist_.undo_stack()->undo();
ASSERT_EQ(3, playlist_.rowCount(QModelIndex()));
}
} // namespace