Smarter Clipboard Pasting/Parsing (#2706)

This commit is contained in:
Zach H
2017-05-14 14:35:40 -04:00
committed by GitHub
parent 405a719412
commit b53cd33eed
6 changed files with 254 additions and 52 deletions

View File

@@ -39,28 +39,33 @@ struct DecklistBuilder {
};
namespace {
TEST(LoadingFromClipboardTest, EmptyDeck) {
TEST(LoadingFromClipboardTest, EmptyDeck)
{
DeckList *deckList = fromClipboard(new QString(""));
ASSERT_TRUE(deckList->getCardList().isEmpty()) << "Deck should be empty";
ASSERT_TRUE(deckList->getCardList().isEmpty());
}
TEST(LoadingFromClipboardTest, EmptySideboard) {
DeckList *deckList = fromClipboard(new QString("Sideboard"));
ASSERT_TRUE(deckList->getCardList().isEmpty()) << "Deck should be empty";
ASSERT_TRUE(deckList->getCardList().isEmpty());
}
TEST(LoadingFromClipboardTest, QuantityPrefixed) {
QString *clipboard = new QString(
"1 Mountain\n"
"2x Island\n"
"2x Island\n"
"3X FOREST\n"
);
DeckList *deckList = fromClipboard(clipboard);
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({{"Mountain", 1},
{"Island", 2}});
CardRows expectedMainboard = CardRows({
{"mountain", 1},
{"island", 2},
{"forest", 3}
});
CardRows expectedSideboard = CardRows({});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
@@ -70,8 +75,8 @@ namespace {
TEST(LoadingFromClipboardTest, CommentsAreIgnored) {
QString *clipboard = new QString(
"//1 Mountain\n"
"//2x Island\n"
"//SB:2x Island\n"
"//2x Island\n"
"//SB:2x Island\n"
);
DeckList *deckList = fromClipboard(clipboard);
@@ -89,17 +94,21 @@ namespace {
TEST(LoadingFromClipboardTest, SideboardPrefix) {
QString *clipboard = new QString(
"1 Mountain\n"
"SB: 1 Mountain\n"
"SB: 2x Island\n"
"SB: 1 Mountain\n"
"SB: 2x Island\n"
);
DeckList *deckList = fromClipboard(clipboard);
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({{"Mountain", 1}});
CardRows expectedSideboard = CardRows({{"Mountain", 1},
{"Island", 2}});
CardRows expectedMainboard = CardRows({
{"mountain", 1}
});
CardRows expectedSideboard = CardRows({
{"mountain", 1},
{"island", 2}
});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
ASSERT_EQ(expectedSideboard, decklistBuilder.sideboard());
@@ -114,12 +123,142 @@ namespace {
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({{"CardThatDoesNotExistInCardsXml", 1}});
CardRows expectedMainboard = CardRows({
{"cardthatdoesnotexistincardsxml", 1}
});
CardRows expectedSideboard = CardRows({});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
ASSERT_EQ(expectedSideboard, decklistBuilder.sideboard());
}
TEST(LoadingFromClipboardTest, RemoveBlankEntriesFromBeginningAndEnd) {
QString *clipboard = new QString(
"\n"
"\n"
"\n"
"1x Algae Gharial\n"
"3x CardThatDoesNotExistInCardsXml\n"
"2x Phelddagrif\n"
"\n"
"\n"
);
DeckList *deckList = fromClipboard(clipboard);
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({
{"algae gharial", 1},
{"cardthatdoesnotexistincardsxml", 3},
{"phelddagrif", 2}
});
CardRows expectedSideboard = CardRows({});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
ASSERT_EQ(expectedSideboard, decklistBuilder.sideboard());
}
TEST(LoadingFromClipboardTest, UseFirstBlankIfOnlyOneBlankToSplitSideboard) {
QString *clipboard = new QString(
"1x Algae Gharial\n"
"3x CardThatDoesNotExistInCardsXml\n"
"\n"
"2x Phelddagrif\n"
);
DeckList *deckList = fromClipboard(clipboard);
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({
{"algae gharial", 1},
{"cardthatdoesnotexistincardsxml", 3}
});
CardRows expectedSideboard = CardRows({
{"phelddagrif", 2}
});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
ASSERT_EQ(expectedSideboard, decklistBuilder.sideboard());
}
TEST(LoadingFromClipboardTest, IfMultipleScatteredBlanksAllMainBoard) {
QString *clipboard = new QString(
"1x Algae Gharial\n"
"3x CardThatDoesNotExistInCardsXml\n"
"\n"
"2x Phelddagrif\n"
"\n"
"3 Giant Growth\n"
);
DeckList *deckList = fromClipboard(clipboard);
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({
{"algae gharial", 1},
{"cardthatdoesnotexistincardsxml", 3},
{"phelddagrif", 2},
{"giant growth", 3}
});
CardRows expectedSideboard = CardRows({});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
ASSERT_EQ(expectedSideboard, decklistBuilder.sideboard());
}
TEST(LoadingFromClipboardTest, LotsOfStuffInBulkTesting) {
QString *clipboard = new QString(
"\n"
"\n"
"\n"
"1x test1\n"
"testNoValueMB\n"
"2x test2\n"
"SB: 10 testSB\n"
"3 test3\n"
"4X test4\n"
"\n"
"\n"
"\n"
"\n"
"5x test5\n"
"6X test6\n"
"testNoValueSB\n"
"\n"
"\n"
"\n"
"\n"
);
DeckList *deckList = fromClipboard(clipboard);
DecklistBuilder decklistBuilder = DecklistBuilder();
deckList->forEachCard(decklistBuilder);
CardRows expectedMainboard = CardRows({
{"test1", 1},
{"test2", 2},
{"test3", 3},
{"test4", 4},
{"testnovaluemb", 1}
});
CardRows expectedSideboard = CardRows({
{"testsb", 10},
{"test5", 5},
{"test6", 6},
{"testnovaluesb", 1}
});
ASSERT_EQ(expectedMainboard, decklistBuilder.mainboard());
ASSERT_EQ(expectedSideboard, decklistBuilder.sideboard());
}
}
int main(int argc, char **argv) {