From 0319c8a5f7e8bf7fb7bb1558716638703e62d9e6 Mon Sep 17 00:00:00 2001 From: emilybache Date: Wed, 20 Mar 2013 09:33:53 +0100 Subject: [PATCH] I changed the starting position for the C# version to match the other translations, especially the Java version. This means I've actually done a small amount of refactoring already compared with the original form of the kata, and made it easier to get going with writing tests. It also makes it easier to do text-based approval testing with this code. --- GildedRose/csharp/ApprovalTest.cs | 28 +++++ GildedRose/csharp/GildedRose.cs | 100 ++++++++++++++++++ GildedRose/csharp/GildedRoseTest.cs | 19 ++++ GildedRose/csharp/Program.cs | 147 --------------------------- GildedRose/csharp/TextTestFixture.cs | 58 +++++++++++ GildedRose/texttests/config.gr | 2 +- 6 files changed, 206 insertions(+), 148 deletions(-) create mode 100644 GildedRose/csharp/ApprovalTest.cs create mode 100644 GildedRose/csharp/GildedRose.cs create mode 100644 GildedRose/csharp/GildedRoseTest.cs delete mode 100644 GildedRose/csharp/Program.cs create mode 100644 GildedRose/csharp/TextTestFixture.cs diff --git a/GildedRose/csharp/ApprovalTest.cs b/GildedRose/csharp/ApprovalTest.cs new file mode 100644 index 00000000..ad294419 --- /dev/null +++ b/GildedRose/csharp/ApprovalTest.cs @@ -0,0 +1,28 @@ +using System; +using System.IO; +using System.Text; +using GildedRose; +using NUnit.Framework; +using ApprovalTests; +using ApprovalTests.Reporters; + +namespace GildedRoseTests +{ + [TestFixture] + [UseReporter(typeof(NUnitReporter))] + public class ApprovalTest + { + [Test] + public void ThirtyDays() + { + StringBuilder fakeoutput = new StringBuilder(); + Console.SetOut(new StringWriter(fakeoutput)); + Console.SetIn(new StringReader("a\n")); + + Program.Main(new string[] { }); + String output = fakeoutput.ToString(); + Approvals.Verify(output); + } + } + +} \ No newline at end of file diff --git a/GildedRose/csharp/GildedRose.cs b/GildedRose/csharp/GildedRose.cs new file mode 100644 index 00000000..a0017b2e --- /dev/null +++ b/GildedRose/csharp/GildedRose.cs @@ -0,0 +1,100 @@ +using System.Collections.Generic; + +namespace GildedRose +{ + class GildedRose + { + IList Items; + public GildedRose(IList Items) + { + this.Items = Items; + } + + public void UpdateQuality() + { + for (var i = 0; i < Items.Count; i++) + { + if (Items[i].Name != "Aged Brie" && 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 + { + 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) + { + 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; + } + } + } + } + } + + } + + public class Item + { + public string Name { get; set; } + + public int SellIn { get; set; } + + public int Quality { get; set; } + } + +} diff --git a/GildedRose/csharp/GildedRoseTest.cs b/GildedRose/csharp/GildedRoseTest.cs new file mode 100644 index 00000000..02fd5b21 --- /dev/null +++ b/GildedRose/csharp/GildedRoseTest.cs @@ -0,0 +1,19 @@ +using System; +using NUnit.Framework; +using System.Collections.Generic; + +namespace GildedRose +{ + [TestFixture()] + public class GildedRoseTest + { + [Test()] + public void foo() { + IList Items = new List { new Item{Name = "foo", SellIn = 0, Quality = 0} }; + GildedRose app = new GildedRose(Items); + app.UpdateQuality(); + Assert.AreEqual("fixme", Items[0].Name); + } + } +} + diff --git a/GildedRose/csharp/Program.cs b/GildedRose/csharp/Program.cs deleted file mode 100644 index 3ba8371e..00000000 --- a/GildedRose/csharp/Program.cs +++ /dev/null @@ -1,147 +0,0 @@ -using System.Collections.Generic; - -namespace GildedRose.Console -{ - class Program - { - IList Items; - static void Main(string[] args) - { - System.Console.WriteLine("OMGHAI!"); - - var app = new Program() - { - Items = new List - { - new Item {Name = "+5 Dexterity Vest", SellIn = 10, Quality = 20}, - new Item {Name = "Aged Brie", SellIn = 2, Quality = 0}, - new Item {Name = "Elixir of the Mongoose", SellIn = 5, Quality = 7}, - new Item {Name = "Sulfuras, Hand of Ragnaros", SellIn = 0, Quality = 80}, - new Item {Name = "Sulfuras, Hand of Ragnaros", SellIn = -1, Quality = 80}, - new Item - { - Name = "Backstage passes to a TAFKAL80ETC concert", - SellIn = 15, - Quality = 20 - }, - new Item - { - Name = "Backstage passes to a TAFKAL80ETC concert", - SellIn = 10, - Quality = 49 - }, - new Item - { - Name = "Backstage passes to a TAFKAL80ETC concert", - SellIn = 5, - Quality = 49 - }, - // this conjured item does not work properly yet - new Item {Name = "Conjured Mana Cake", SellIn = 3, Quality = 6} - } - - }; - - for (var i = 0; i < 31; i++) - { - System.Console.WriteLine("-------- day " + i + " --------"); - System.Console.WriteLine("name, sellIn, quality"); - for (var j = 0; j < app.Items.Count; j++) - { - System.Console.WriteLine(app.Items[j].Name + ", " + app.Items[j].SellIn + ", " + app.Items[j].Quality); - } - System.Console.WriteLine(""); - app.UpdateQuality(); - } - System.Console.ReadKey(); - - } - - public void UpdateQuality() - { - for (var i = 0; i < Items.Count; i++) - { - if (Items[i].Name != "Aged Brie" && 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 - { - 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) - { - 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; - } - } - } - } - } - - } - - public class Item - { - public string Name { get; set; } - - public int SellIn { get; set; } - - public int Quality { get; set; } - } - -} diff --git a/GildedRose/csharp/TextTestFixture.cs b/GildedRose/csharp/TextTestFixture.cs new file mode 100644 index 00000000..3283aba9 --- /dev/null +++ b/GildedRose/csharp/TextTestFixture.cs @@ -0,0 +1,58 @@ +using System; +using System.Collections.Generic; + +namespace GildedRose +{ + class Program + { + public static void Main(string[] args) + { + System.Console.WriteLine("OMGHAI!"); + + IList Items = new List{ + new Item {Name = "+5 Dexterity Vest", SellIn = 10, Quality = 20}, + new Item {Name = "Aged Brie", SellIn = 2, Quality = 0}, + new Item {Name = "Elixir of the Mongoose", SellIn = 5, Quality = 7}, + new Item {Name = "Sulfuras, Hand of Ragnaros", SellIn = 0, Quality = 80}, + new Item {Name = "Sulfuras, Hand of Ragnaros", SellIn = -1, Quality = 80}, + new Item + { + Name = "Backstage passes to a TAFKAL80ETC concert", + SellIn = 15, + Quality = 20 + }, + new Item + { + Name = "Backstage passes to a TAFKAL80ETC concert", + SellIn = 10, + Quality = 49 + }, + new Item + { + Name = "Backstage passes to a TAFKAL80ETC concert", + SellIn = 5, + Quality = 49 + }, + // this conjured item does not work properly yet + new Item {Name = "Conjured Mana Cake", SellIn = 3, Quality = 6} + }; + + var app = new GildedRose(Items); + + + for (var i = 0; i < 31; i++) + { + System.Console.WriteLine("-------- day " + i + " --------"); + System.Console.WriteLine("name, sellIn, quality"); + for (var j = 0; j < Items.Count; j++) + { + System.Console.WriteLine(Items[j].Name + ", " + Items[j].SellIn + ", " + Items[j].Quality); + } + System.Console.WriteLine(""); + app.UpdateQuality(); + } + + } + + } +} diff --git a/GildedRose/texttests/config.gr b/GildedRose/texttests/config.gr index e7b88344..b301079d 100755 --- a/GildedRose/texttests/config.gr +++ b/GildedRose/texttests/config.gr @@ -20,7 +20,7 @@ interpreter:java #interpreter:ruby # Settings for the C# version -#executable:${TEXTTEST_CHECKOUT}/csharp/Program.exe +#executable:${TEXTTEST_CHECKOUT}/GildedRose.exe # turn on one of these if you prefer them to notepad or emacs. [view_program]