Merge pull request #3 from JonasG/master

TextTest version of GildedRose kata in C++
This commit is contained in:
Emily Bache 2012-02-27 11:52:25 -08:00
commit c307d9e5dc
5 changed files with 163 additions and 109 deletions

View File

@ -1,38 +1,71 @@
#include <gtest/gtest.h> #include "GildedRose.h"
#include <string> GildedRose::GildedRose(vector<Item> & items) : items(items)
{}
using namespace std;
class Item
{
public:
string name;
int sellIn;
int quality;
Item(string name, int sellIn, int quality) : name(name), sellIn(sellIn), quality(quality)
{}
};
class GildedRose
{
public:
vector<Item> items;
GildedRose(vector<Item> items) : items (items)
{}
void updateQuality() void GildedRose::updateQuality()
{
for (int i = 0; i < items.size(); i++)
{ {
for (int i = 0; i < items.size(); i++) if (items[i].name != "Aged Brie" && items[i].name != "Backstage passes to a TAFKAL80ETC concert")
{ {
if (items[i].name != "Aged Brie" && items[i].name != "Backstage passes to a TAFKAL80ETC concert") if (items[i].quality > 0)
{ {
if (items[i].quality > 0) if (items[i].name != "Sulfuras, Hand of Ragnaros")
{ {
if (items[i].name != "Sulfuras, Hand of Ragnaros") items[i].quality = items[i].quality - 1;
}
}
}
else
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
if (items[i].name == "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].sellIn < 11)
{ {
items[i].quality = items[i].quality - 1; if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
} }
if (items[i].sellIn < 6)
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
}
}
}
}
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].sellIn = items[i].sellIn - 1;
}
if (items[i].sellIn < 0)
{
if (items[i].name != "Aged Brie")
{
if (items[i].name != "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].quality > 0)
{
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].quality = items[i].quality - 1;
}
}
}
else
{
items[i].quality = items[i].quality - items[i].quality;
} }
} }
else else
@ -40,84 +73,8 @@ public:
if (items[i].quality < 50) if (items[i].quality < 50)
{ {
items[i].quality = items[i].quality + 1; items[i].quality = items[i].quality + 1;
if (items[i].name == "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].sellIn < 11)
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
}
if (items[i].sellIn < 6)
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
}
}
}
}
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].sellIn = items[i].sellIn - 1;
}
if (items[i].sellIn < 0)
{
if (items[i].name != "Aged Brie")
{
if (items[i].name != "Backstage passes to a TAFKAL80ETC concert")
{
if (items[i].quality > 0)
{
if (items[i].name != "Sulfuras, Hand of Ragnaros")
{
items[i].quality = items[i].quality - 1;
}
}
}
else
{
items[i].quality = items[i].quality - items[i].quality;
}
}
else
{
if (items[i].quality < 50)
{
items[i].quality = items[i].quality + 1;
}
} }
} }
} }
} }
};
void example()
{
vector<Item> items;
items.push_back(Item("+5 Dexterity Vest", 10, 20));
items.push_back(Item("Aged Brie", 2, 0));
items.push_back(Item("Elixir of the Mongoose", 5, 7));
items.push_back(Item("Sulfuras, Hand of Ragnaros", 0, 80));
items.push_back(Item("Backstage passes to a TAFKAL80ETC concert", 15, 20));
items.push_back(Item("Conjured Mana Cake", 3, 6));
GildedRose app(items);
app.updateQuality();
} }
TEST(GildedRoseTest, Foo) {
vector<Item> items;
items.push_back(Item("Foo", 0, 0));
GildedRose app(items);
app.updateQuality();
EXPECT_EQ("fixme", app.items[0].name);
}

View File

@ -0,0 +1,24 @@
#include <string>
#include <vector>
using namespace std;
class Item
{
public:
string name;
int sellIn;
int quality;
Item(string name, int sellIn, int quality) : name(name), sellIn(sellIn), quality(quality)
{}
};
class GildedRose
{
public:
vector<Item> & items;
GildedRose(vector<Item> & items);
void updateQuality();
};

View File

@ -0,0 +1,38 @@
#include "GildedRose.h"
#include <iostream>
using namespace std;
ostream& operator<<(ostream& s, Item& item)
{
s << item.name << ", " << item.sellIn << ", " << item.quality;
return s;
}
int main()
{
vector<Item> items;
items.push_back(Item("+5 Dexterity Vest", 10, 20));
items.push_back(Item("Aged Brie", 2, 0));
items.push_back(Item("Elixir of the Mongoose", 5, 7));
items.push_back(Item("Sulfuras, Hand of Ragnaros", 0, 80));
items.push_back(Item("Backstage passes to a TAFKAL80ETC concert", 15, 20));
items.push_back(Item("Conjured Mana Cake", 3, 6));
GildedRose app(items);
cout << "OMGHAI!" << endl;
for (int day = 0; day <= 30; day++)
{
cout << "-------- day " << day << " --------" << endl;
cout << "name, sellIn, quality" << endl;
for (vector<Item>::iterator i = items.begin(); i != items.end(); i++)
{
cout << *i << endl;
}
cout << endl;
app.updateQuality();
}
}

View File

@ -0,0 +1,24 @@
#include <gtest/gtest.h>
#include "GildedRose.h"
TEST(GildedRoseTest, Foo) {
vector<Item> items;
items.push_back(Item("Foo", 0, 0));
GildedRose app(items);
app.updateQuality();
EXPECT_EQ("fixme", app.items[0].name);
}
void example()
{
vector<Item> items;
items.push_back(Item("+5 Dexterity Vest", 10, 20));
items.push_back(Item("Aged Brie", 2, 0));
items.push_back(Item("Elixir of the Mongoose", 5, 7));
items.push_back(Item("Sulfuras, Hand of Ragnaros", 0, 80));
items.push_back(Item("Backstage passes to a TAFKAL80ETC concert", 15, 20));
items.push_back(Item("Conjured Mana Cake", 3, 6));
GildedRose app(items);
app.updateQuality();
}

View File

@ -27,6 +27,8 @@ CXXFLAGS += -g -Wall -Wextra
# created to the list. # created to the list.
TESTS = GildedRose TESTS = GildedRose
TEXTTESTS = GildedRoseTextTests
# All Google Test headers. Usually you shouldn't change this # All Google Test headers. Usually you shouldn't change this
# definition. # definition.
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \ GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
@ -34,10 +36,10 @@ GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
# House-keeping build targets. # House-keeping build targets.
all : $(TESTS) all : $(TESTS) $(TEXTTESTS)
clean : clean :
rm -f $(TESTS) gtest.a gtest_main.a *.o rm -f $(TESTS) $(TEXTTESTS) gtest.a gtest_main.a *.o
# Builds gtest.a and gtest_main.a. # Builds gtest.a and gtest_main.a.
@ -67,9 +69,18 @@ gtest_main.a : gtest-all.o gtest_main.o
# gtest_main.a, depending on whether it defines its own main() # gtest_main.a, depending on whether it defines its own main()
# function. # function.
GildedRose.o : $(USER_DIR)/GildedRose.cc \ GildedRose.o : $(USER_DIR)/GildedRose.cc
$(GTEST_HEADERS) $(CXX) -c $^
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/GildedRose.cc
GildedRose : GildedRose.o gtest_main.a GildedRoseUnitTests.o : $(USER_DIR)/GildedRoseUnitTests.cc \
$(GTEST_HEADERS)
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -c $(USER_DIR)/GildedRoseUnitTests.cc
GildedRose : GildedRoseUnitTests.o GildedRose.o gtest_main.a
$(CXX) $(CPPFLAGS) $(CXXFLAGS) -pthread $^ -o $@ $(CXX) $(CPPFLAGS) $(CXXFLAGS) -pthread $^ -o $@
GildedRoseTextTests.o : $(USER_DIR)/GildedRoseTextTests.cc
$(CXX) -c $^
GildedRoseTextTests : GildedRoseTextTests.o GildedRose.o
$(CXX) -pthread $^ -o $@