diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 722efa42..2c0f88db 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -9,40 +9,61 @@ class GildedRose { public void updateQuality() { for (int i = 0; i < items.length; i++) { - if ("Sulfuras, Hand of Ragnaros".equals(items[i].name)) { - continue; - } else if ("Conjured Mana Cake".equals(items[i].name)) { - while (items[i].quality > 0) { - if (items[i].sellIn >= 0) { - items[i].quality = items[i].quality - 2; - } else { - items[i].quality = items[i].quality - 4; + if (!items[i].name.equals("Aged Brie") + && !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { + if (items[i].quality > 0) { + if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { + items[i].quality = items[i].quality - 1; + + if (items[i].name.equals("Conjured Mana Cake") && items[i].quality > 0) { + items[i].quality = items[i].quality - 1; + } } } + } else { + if (items[i].quality < 50) { + items[i].quality = items[i].quality + 1; + + if (items[i].name.equals("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.equals("Sulfuras, Hand of Ragnaros")) { items[i].sellIn = items[i].sellIn - 1; - continue; - } else if ("Backstage passes to a TAFKAL80ETC concert".equals(items[i].name) | "Aged Brie".equals(items[i].name)) { - while (items[i].quality < 50) { - if ("Backstage passes to a TAFKAL80ETC concert".equals(items[i].name) & items[i].sellIn <= 5) { - items[i].quality = items[i].quality + 3; - } else if ("Backstage passes to a TAFKAL80ETC concert".equals(items[i].name) & items[i].sellIn < 10) { - items[i].quality = items[i].quality + 2; + } + + if (items[i].sellIn < 0) { + if (!items[i].name.equals("Aged Brie")) { + if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { + if (items[i].quality > 0) { + if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { + items[i].quality = items[i].quality - 1; + + if (items[i].name.equals("Conjured Mana Cake") && items[i].quality > 0) { + 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; } } - items[i].sellIn = items[i].sellIn - 1; - continue; - } else { - // last case - while (items[i].quality > 0) { - if (items[i].sellIn >= 0) { - items[i].quality = items[i].quality - 2; - } else { - items[i].quality = items[i].quality - 4; - } - } - items[i].sellIn = items[i].sellIn - 1; } } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index e9e9cb24..4dacf34e 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -4,7 +4,255 @@ import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; -class GildedRoseTest { +/** + * Set up basic Testing for the initial features and guidelines + */ +class UpdateQualityTest { + + @Test + void itemDaysLeftDecreasesByONeAtEachIteration() { + Item[] items = new Item[]{new Item("Elixir of the Mongoose", 5, 7)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals("Elixir of the Mongoose", app.items[0].name); + System.out.println("Quality: " + app.items[0].sellIn); + assertEquals(4, app.items[0].sellIn); + app.updateQuality(); + assertEquals(3, app.items[0].sellIn); + } + + @Test + void itemQualityLeftDecreasesByOneAtEachIteration() { + Item[] items = new Item[]{new Item("Elixir of the Mongoose", 5, 7)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals("Elixir of the Mongoose", app.items[0].name); + System.out.println("Quality: " + app.items[0].quality); + assertEquals(6, app.items[0].quality); + app.updateQuality(); + assertEquals(5, app.items[0].quality); + } + + @Test + void qualityDegradationSpeedAfterOneIterationWhenZERO() { + System.out.println("Once the sell by date is zero, Quality degrades twice as fast"); + Item[] items = new Item[]{new Item("+5 Dexterity Vest", 0, 20)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(18, app.items[0].quality); + assertEquals("+5 Dexterity Vest", app.items[0].name); + } + + @Test + void qualityDegradationSpeedAfterOneIterationWhenOutdated() { + System.out.println("Once the sell by date has passed, Quality degrades twice as fast"); + Item[] items = new Item[]{new Item("+5 Dexterity Vest", -1, 18)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(16, app.items[0].quality); + assertEquals("+5 Dexterity Vest", app.items[0].name); + } + + @Test + void qualityItemNeverNegatif() { + System.out.println("The Quality of an item is never negative"); + Item[] items = new Item[]{ + new Item("+5 Dexterity Vest", 10, 1), + new Item("Conjured Mana Cake", 10, 1) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + app.updateQuality(); + assertEquals(0, app.items[0].quality); + assertEquals(0, app.items[1].quality); + } + + @Test + void sellInValueCanBeNegative() { + System.out.println("SellIn value of an Item can be negative until quality reach zero"); + Item[] items = new Item[]{new Item("+5 Dexterity Vest", 0, 30)}; + GildedRose app = new GildedRose(items); + int timeFrame = 10; + for (int i = 0; i < timeFrame; i++) { + app.updateQuality(); + } + assertEquals(10, app.items[0].quality); + assertEquals(-timeFrame, app.items[0].sellIn); + } + + @Test + void sellInValueCanNotBeNegatifForSulfuras() { + System.out.println("SellIn value of Sulfuras Item can not be negative bcse quality never decreases"); + Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", -1, 80)}; + GildedRose app = new GildedRose(items); + int timeFrame = 10; + for (int i = 0; i < timeFrame; i++) { + app.updateQuality(); + } + assertEquals(80, app.items[0].quality); // if time is > 1 + assertEquals(-1, app.items[0].sellIn); + } + @Test + void agedBrieQualityIncreaseWthIteration() { + System.out.println("\"Aged Brie\" actually increases in Quality the older it gets"); + Item[] items = new Item[]{new Item("Aged Brie", 5, 0)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + app.updateQuality(); + assertEquals("Aged Brie", app.items[0].name); + System.out.println("Quality: " + app.items[0].quality); + assertEquals(2, app.items[0].quality); + app.updateQuality(); + assertEquals(3, app.items[0].quality); + } + + @Test + void agedBrieQualityIncreaseWthIterationFasterWhenOutdated() { + System.out.println("\"Aged Brie\" actually increases in Quality the older it gets and twicer when outdatd"); + Item[] items = new Item[]{new Item("Aged Brie", -1, 20)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(22, app.items[0].quality); + } + + + @Test + void qualityItemNoMore50() { + System.out.println("The Quality of an item is never more than 50"); + Item[] items = new Item[]{new Item("Aged Brie", 10, 49)}; + GildedRose app = new GildedRose(items); + assertEquals("Aged Brie", app.items[0].name); + app.updateQuality(); + System.out.println("Quality: " + app.items[0].quality); + assertEquals(50, app.items[0].quality); + app.updateQuality(); + assertEquals(50, app.items[0].quality); + + } + + @Test + void qualitySulfurasItemNoMore80() { + System.out.println("The \"Sulfuras\"'s Quality is never more than 80"); + Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 80)}; + GildedRose app = new GildedRose(items); + assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); + app.updateQuality(); + System.out.println("Quality: " + app.items[0].quality); + assertEquals(80, app.items[0].quality); + app.updateQuality(); + assertEquals(80, app.items[0].quality); + } + + + @Test + void itemSulfurasNotChangeQuality() { + System.out.println("\"Sulfuras\", being a legendary item, never decreases in Quality and stays the same"); + Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 44)}; + GildedRose app = new GildedRose(items); + assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); + for (int i = 0; i < 10; i++) { + app.updateQuality(); + } + assertEquals(44, app.items[0].quality); + } + + @Test + void itemBackstageQualityIncreasesByTwoWhenTenDaysOrLess() { + System.out.println(" Quality increases by 2 when there are 10 days or less"); + Item[] items = new Item[]{ + new Item("Backstage passes to a TAFKAL80ETC concert", 10, 0), + new Item("Backstage passes to a TAFKAL80ETC concert", 9, 0), + new Item("Backstage passes to a TAFKAL80ETC concert", 8, 0) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + for (int i = 0; i < 2; i++) { + assertEquals(2, app.items[i].quality); + } + } + + @Test + void itemBackstageQualityIncreasesByThreeWhenFiveDaysOrLess() { + System.out.println("Quality increases by 3 when there are 5 days or less"); + Item[] items = new Item[]{ + new Item("Backstage passes to a TAFKAL80ETC concert", 5, 3), + new Item("Backstage passes to a TAFKAL80ETC concert", 4, 3), + new Item("Backstage passes to a TAFKAL80ETC concert", 2, 3) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + for (int i = 0; i < 2; i++) { + assertEquals(6, app.items[i].quality); + } + + } + + @Test + void itemBackstageQualityDropsToZeroAfterTheConcert() { + System.out.println("Quality drops to 0 after the concert"); + Item[] items = new Item[]{ + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 2), + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 3), + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 7) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + for (Item el : items) { + assertEquals(0, el.quality); + } + } + + @Test + void itemBackstageQualityDropsToZeroAfterTheConcertEvenIf50() { + System.out.println("Quality drops to 0 after the concert even if quality is 50"); + Item[] items = new Item[]{ + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 50), + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + for (Item el : items) { + assertEquals(0, el.quality); + } + } + + /** + * Testing for "Conjured" items + */ + + + @Test + void itemConjuredQualityTwiceAsFastAsNormalItemsWithPositiveSellIn() { + System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is positive"); + Item[] items = new Item[]{ + new Item("Conjured Mana Cake", 3, 6)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(4, app.items[0].quality); + } + + @Test + void itemConjuredQualityTwiceAsFastAsNormalItemsWhenSellInIsZero() { + System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is wero"); + Item[] items = new Item[]{ + new Item("Conjured Mana Cake", 0, 10) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(6, app.items[0].quality); + } + + @Test + void itemConjuredQualityTwiceAsFastAsNormalItemsWithNegativeSellIn() { + System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is negtive"); + Item[] items = new Item[]{ + new Item("Conjured Mana Cake", -1, 8) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(4, app.items[0].quality); + } } + + diff --git a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java deleted file mode 100644 index 9e5fa237..00000000 --- a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java +++ /dev/null @@ -1,225 +0,0 @@ -package com.gildedrose; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -/** - * Set up basic Testing for the initial features and guidelines - */ -class UpdateQualityTest { - - @Test - void itemDaysLeftDecreasesByONeAtEachIteration() { - Item[] items = new Item[]{new Item("Elixir of the Mongoose", 5, 7)}; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals("Elixir of the Mongoose", app.items[0].name); - System.out.println("Quality: " + app.items[0].sellIn); - assertEquals(4, app.items[0].sellIn); - app.updateQuality(); - assertEquals(3, app.items[0].sellIn); - } - - @Test - void itemQualityLeftDecreasesByOneAtEachIteration() { - Item[] items = new Item[]{new Item("Elixir of the Mongoose", 5, 7)}; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals("Elixir of the Mongoose", app.items[0].name); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(6, app.items[0].quality); - app.updateQuality(); - assertEquals(5, app.items[0].quality); - } - - @Test - void qualityDegradationSpeedAfterOneIterationWhenOutdated() { - System.out.println("Once the sell by date has passed, Quality degrades twice as fast"); - Item[] items = new Item[]{new Item("+5 Dexterity Vest", 0, 20)}; - GildedRose app = new GildedRose(items); - app.updateQuality(); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(18, app.items[0].quality); - assertEquals("+5 Dexterity Vest", app.items[0].name); - } - - @Test - void qualityItemNeverNegatif() { - System.out.println("The Quality of an item is never negative"); - Item[] items = new Item[]{new Item("+5 Dexterity Vest", 10, 1)}; - GildedRose app = new GildedRose(items); - app.updateQuality(); - app.updateQuality(); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(0, app.items[0].quality); - assertEquals("+5 Dexterity Vest", app.items[0].name); - } - - @Test - void sellInValueCanBeNegative() { - System.out.println("SellIn value of an Item can be negative until quality reach zero"); - Item[] items = new Item[]{new Item("+5 Dexterity Vest", 0, 30)}; - GildedRose app = new GildedRose(items); - int timeFrame = 10; - for (int i = 0; i < timeFrame; i++) { - app.updateQuality(); - } - assertEquals(10, app.items[0].quality); - assertEquals(-timeFrame, app.items[0].sellIn); - } - - @Test - void sellInValueCanNotBeNegatifForSulfuras() { - System.out.println("SellIn value of Sulfuras Item can not be negative bcse quality never decreases"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", -1, 80)}; - GildedRose app = new GildedRose(items); - int timeFrame = 10; - for (int i = 0; i < timeFrame; i++) { - app.updateQuality(); - } - assertEquals(80, app.items[0].quality); // if time is > 1 - assertEquals(-1, app.items[0].sellIn); - } - - - @Test - void agedBrieQualityIncreaseWthIteration() { - System.out.println("\"Aged Brie\" actually increases in Quality the older it gets"); - Item[] items = new Item[]{new Item("Aged Brie", 5, 0)}; - GildedRose app = new GildedRose(items); - app.updateQuality(); - app.updateQuality(); - assertEquals("Aged Brie", app.items[0].name); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(2, app.items[0].quality); - app.updateQuality(); - assertEquals(3, app.items[0].quality); - } - - @Test - void qualityItemNoMore50() { - System.out.println("The Quality of an item is never more than 50"); - Item[] items = new Item[]{new Item("Aged Brie", 10, 49)}; - GildedRose app = new GildedRose(items); - assertEquals("Aged Brie", app.items[0].name); - app.updateQuality(); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(50, app.items[0].quality); - app.updateQuality(); - assertEquals(50, app.items[0].quality); - - } - - @Test - void qualitySulfurasItemNoMore80() { - System.out.println("The \"Sulfuras\"'s Quality is never more than 80"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 80)}; - GildedRose app = new GildedRose(items); - assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); - app.updateQuality(); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(80, app.items[0].quality); - app.updateQuality(); - assertEquals(80, app.items[0].quality); - } - - - @Test - void itemSulfurasNotChangeQuality() { - System.out.println("\"Sulfuras\", being a legendary item, never decreases in Quality and stays the same"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 44)}; - GildedRose app = new GildedRose(items); - assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); - for (int i = 0; i < 10; i++) { - app.updateQuality(); - } - assertEquals(44, app.items[0].quality); - } - - @Test - void itemBackstageQualityIncreasesByTwoWhenTenDaysOrLess() { - System.out.println(" Quality increases by 2 when there are 10 days or less"); - Item[] items = new Item[]{ - new Item("Backstage passes to a TAFKAL80ETC concert", 10, 0), - new Item("Backstage passes to a TAFKAL80ETC concert", 9, 0), - new Item("Backstage passes to a TAFKAL80ETC concert", 8, 0) - }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - for (int i = 0; i < 2; i++) { - assertEquals(2, app.items[i].quality); - } - } - - @Test - void itemBackstageQualityIncreasesByThreeWhenFiveDaysOrLess() { - System.out.println("Quality increases by 3 when there are 5 days or less"); - Item[] items = new Item[]{ - new Item("Backstage passes to a TAFKAL80ETC concert", 5, 3), - new Item("Backstage passes to a TAFKAL80ETC concert", 4, 3), - new Item("Backstage passes to a TAFKAL80ETC concert", 2, 3) - }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - for (int i = 0; i < 2; i++) { - assertEquals(6, app.items[i].quality); - } - - } - - @Test - void itemBackstageQualityDropsToZeroAfterTheConcert() { - System.out.println("Quality drops to 0 after the concert"); - Item[] items = new Item[]{ - new Item("Backstage passes to a TAFKAL80ETC concert", 0, 2), - new Item("Backstage passes to a TAFKAL80ETC concert", 0, 3), - new Item("Backstage passes to a TAFKAL80ETC concert", 0, 7) - }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - for (Item el : items) { - assertEquals(0, el.quality); - } - } - - /** - * Testing for "Conjured" items - */ - - - @Test - void itemConjuredQualityTwiceAsFastAsNormalItemsWithPositiveSellIn() { - System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is positive"); - Item[] items = new Item[]{ - new Item("Conjured Mana Cake", 3, 6)}; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals(4, app.items[0].quality); - } - - @Test - void itemConjuredQualityTwiceAsFastAsNormalItemsWhenSellInIsZero() { - System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is wero"); - Item[] items = new Item[]{ - new Item("Conjured Mana Cake", 0, 10) - }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals(8, app.items[0].quality); - } - - @Test - void itemConjuredQualityTwiceAsFastAsNormalItemsWithNegativeSellIn() { - System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is negtive"); - Item[] items = new Item[]{ - new Item("Conjured Mana Cake", -1, 8) - }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals(4, app.items[0].quality); - } - -} - - diff --git a/texttests/ThirtyDays/stderr.gr b/texttests/ThirtyDays/stderr.gr index c43219c8..4e7237ff 100755 --- a/texttests/ThirtyDays/stderr.gr +++ b/texttests/ThirtyDays/stderr.gr @@ -21,7 +21,7 @@ Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 14, 21 Backstage passes to a TAFKAL80ETC concert, 9, 50 Backstage passes to a TAFKAL80ETC concert, 4, 50 -Conjured Mana Cake, 2, 5 +Conjured Mana Cake, 2, 4 -------- day 2 -------- name, sellIn, quality @@ -33,7 +33,7 @@ Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 13, 22 Backstage passes to a TAFKAL80ETC concert, 8, 50 Backstage passes to a TAFKAL80ETC concert, 3, 50 -Conjured Mana Cake, 1, 4 +Conjured Mana Cake, 1, 2 -------- day 3 -------- name, sellIn, quality @@ -45,7 +45,7 @@ Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 12, 23 Backstage passes to a TAFKAL80ETC concert, 7, 50 Backstage passes to a TAFKAL80ETC concert, 2, 50 -Conjured Mana Cake, 0, 3 +Conjured Mana Cake, 0, 0 -------- day 4 -------- name, sellIn, quality @@ -57,7 +57,7 @@ Sulfuras, Hand of Ragnaros, -1, 80 Backstage passes to a TAFKAL80ETC concert, 11, 24 Backstage passes to a TAFKAL80ETC concert, 6, 50 Backstage passes to a TAFKAL80ETC concert, 1, 50 -Conjured Mana Cake, -1, 1 +Conjured Mana Cake, -1, 0 -------- day 5 -------- name, sellIn, quality @@ -370,3 +370,4 @@ Backstage passes to a TAFKAL80ETC concert, -15, 0 Backstage passes to a TAFKAL80ETC concert, -20, 0 Backstage passes to a TAFKAL80ETC concert, -25, 0 Conjured Mana Cake, -27, 0 +