diff --git a/Java/pom.xml b/Java/pom.xml
index 7310a410..395a4dc9 100644
--- a/Java/pom.xml
+++ b/Java/pom.xml
@@ -24,6 +24,11 @@
${junit.jupiter.version}
test
+
+ com.approvaltests
+ approvaltests
+ 12.1.1
+
diff --git a/Java/src/main/java/com/gildedrose/Program.java b/Java/src/main/java/com/gildedrose/Program.java
new file mode 100644
index 00000000..0d437106
--- /dev/null
+++ b/Java/src/main/java/com/gildedrose/Program.java
@@ -0,0 +1,32 @@
+package com.gildedrose;
+
+public class Program {
+
+ public static void main(String... args) {
+ System.out.println("OMGHAI!");
+
+ Item[] items = new Item[] {
+ new Item("+5 Dexterity Vest", 10, 20),
+ new Item("Aged Brie", 2, 0),
+ new Item("Elixir of the Mongoose", 5, 7),
+ new Item("Sulfuras, Hand of Ragnaros", 0, 80),
+ new Item("Sulfuras, Hand of Ragnaros", -1, 80),
+ new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
+ new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
+ new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
+ // this conjured item does not work properly yet
+ new Item("Conjured Mana Cake", 3, 6) };
+
+ GildedRose app = new GildedRose(items);
+
+ for (int i = 0; i < 31; i++) {
+ System.out.println("-------- day " + i + " --------");
+ System.out.println("name, sellIn, quality");
+ for (int j = 0; j < items.length; j++) {
+ System.out.println(items[j]);
+ }
+ System.out.println("");
+ app.updateQuality();
+ }
+ }
+}
diff --git a/Java/src/test/java/com/gildedrose/ApprovalTest.java b/Java/src/test/java/com/gildedrose/ApprovalTest.java
new file mode 100644
index 00000000..022067aa
--- /dev/null
+++ b/Java/src/test/java/com/gildedrose/ApprovalTest.java
@@ -0,0 +1,28 @@
+package com.gildedrose;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+
+import org.approvaltests.Approvals;
+import org.approvaltests.reporters.DiffReporter;
+import org.approvaltests.reporters.UseReporter;
+import org.junit.jupiter.api.Test;
+
+@UseReporter(DiffReporter.class)
+public class ApprovalTest {
+
+ @Test
+ public void thirtyDays() {
+
+ ByteArrayOutputStream fakeoutput = new ByteArrayOutputStream();
+ System.setOut(new PrintStream(fakeoutput));
+ System.setIn(new ByteArrayInputStream("a\n".getBytes()));
+
+ Program.main();
+ String output = fakeoutput.toString();
+
+ Approvals.verify(output);
+ }
+
+}