diff --git a/pom.xml b/pom.xml
index 69a3b878..29d1f451 100644
--- a/pom.xml
+++ b/pom.xml
@@ -2,11 +2,53 @@
- 4.0.0
+4.0.0
+
+
+com.zipcodewilmington
+froilans-farm
+
+1.0-SNAPSHOT
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+ 8
+ 8
+
+
+
+
+
+
+
+
+
+ junit
+ junit
+ 4.13.1
+ test
+
+
+ org.apache.commons
+ commons-lang3
+ 3.12.0
+
+
+ org.apache.commons
+ commons-math3
+ 3.6.1
+
+
+ org.junit.jupiter
+ junit-jupiter
+ RELEASE
+ test
+
+
- com.zipcodewilmington
- froilans-farm
- 1.0-SNAPSHOT
\ No newline at end of file
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Froilan.java b/src/main/java/com/zipcodewilmington/froilansfarm/Froilan.java
new file mode 100644
index 00000000..08c964d8
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Froilan.java
@@ -0,0 +1,29 @@
+package com.zipcodewilmington.froilansfarm;
+
+
+
+
+
+
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+import com.zipcodewilmington.froilansfarm.animals.person.Farmer;
+import com.zipcodewilmington.froilansfarm.crops.CornStalk;
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.crops.PotatoRoot;
+import com.zipcodewilmington.froilansfarm.crops.TomatoPlant;
+import com.zipcodewilmington.froilansfarm.farm.*;
+import com.zipcodewilmington.froilansfarm.vehicle.CropDuster;
+//import com.zipcodewilmington.froilansfarm.vehicle.Tractor;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+public class Froilan extends Farmer {
+
+ Farm farm = FroilansFarm.getInstance();
+
+ public Farm getFarm() {
+ return farm;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Froilanda.java b/src/main/java/com/zipcodewilmington/froilansfarm/Froilanda.java
new file mode 100644
index 00000000..5fd272f0
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Froilanda.java
@@ -0,0 +1,15 @@
+package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.animals.person.Person;
+import com.zipcodewilmington.froilansfarm.animals.person.Pilot;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import com.zipcodewilmington.froilansfarm.farm.Farm;
+
+public class Froilanda extends Person implements Pilot {
+
+ Farm farm = FroilansFarm.getInstance();
+
+ public Farm getFarm() {
+ return farm;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/FroilansFarm.java b/src/main/java/com/zipcodewilmington/froilansfarm/FroilansFarm.java
new file mode 100644
index 00000000..4f3eca92
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/FroilansFarm.java
@@ -0,0 +1,51 @@
+package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+import com.zipcodewilmington.froilansfarm.crops.CornStalk;
+import com.zipcodewilmington.froilansfarm.crops.PotatoRoot;
+import com.zipcodewilmington.froilansfarm.crops.TomatoPlant;
+import com.zipcodewilmington.froilansfarm.farm.*;
+import com.zipcodewilmington.froilansfarm.vehicle.CropDuster;
+import com.zipcodewilmington.froilansfarm.vehicle.Tractor;
+
+public class FroilansFarm {
+
+ private static Farm farm;
+
+ private FroilansFarm() {
+ }
+
+ public static Farm getInstance() {
+ if (farm == null) {
+ farm = buildFarm();
+ return farm;
+ }
+ return farm;
+ }
+
+ private static Farm buildFarm() {
+ FarmBuilder builder = new FarmBuilder();
+ Farm farm = builder
+ .setFarmhouses(
+ new FarmHouse())
+ .setFields(
+ new Field(new CropRow(),
+ new CropRow(),
+ new CropRow(),
+ new CropRow(),
+ new CropRow()))
+ .setStables(
+ new Stable(new Horse(), new Horse(), new Horse()),
+ new Stable(new Horse(), new Horse(), new Horse(), new Horse()),
+ new Stable(new Horse(), new Horse(), new Horse()))
+ .setChickenCoops(
+ new ChickenCoop(new Chicken(), new Chicken(), new Chicken(), new Chicken()),
+ new ChickenCoop(new Chicken(), new Chicken(), new Chicken(), new Chicken()),
+ new ChickenCoop(new Chicken(), new Chicken(), new Chicken(), new Chicken()),
+ new ChickenCoop(new Chicken(), new Chicken(), new Chicken()))
+ .setVehicles(new Tractor(5), new CropDuster())
+ .build();
+ return farm;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/NoiseMaker.java b/src/main/java/com/zipcodewilmington/froilansfarm/NoiseMaker.java
new file mode 100644
index 00000000..8db71148
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/NoiseMaker.java
@@ -0,0 +1,6 @@
+package com.zipcodewilmington.froilansfarm;
+
+public interface NoiseMaker {
+ String makeNoise();
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/Rideable.java b/src/main/java/com/zipcodewilmington/froilansfarm/Rideable.java
new file mode 100644
index 00000000..4b3071d1
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/Rideable.java
@@ -0,0 +1,10 @@
+package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.animals.person.Rider;
+
+public interface Rideable {
+
+ boolean getIsBeingRidden();
+
+ void setIsBeingRidden(boolean isBeingRidden);
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Animal.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Animal.java
new file mode 100644
index 00000000..a6d50a73
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Animal.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+import com.zipcodewilmington.froilansfarm.NoiseMaker;
+
+public abstract class Animal implements NoiseMaker, Eater {
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Chicken.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Chicken.java
new file mode 100644
index 00000000..3b9d2fc1
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Chicken.java
@@ -0,0 +1,23 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import com.zipcodewilmington.froilansfarm.crops.Egg;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+//import com.zipcodewilmington.froilansfarm.farm.Produce;
+
+public class Chicken extends Animal {
+
+ public String makeNoise() {
+ return "cluck!" ;
+ }
+
+ public void yield(Egg... egg) {
+ FarmStorage storage = FarmStorage.getInstance();
+ for (Egg eggi : egg) {
+ if (!eggi.getHasBeenFertilized()) {
+ storage.add(eggi);
+ }
+ }
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Eater.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Eater.java
new file mode 100644
index 00000000..797e5d68
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Eater.java
@@ -0,0 +1,12 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+
+public interface Eater {
+
+ default public void eat(SomeEdible food) {
+ FarmStorage storage = FarmStorage.getInstance();
+ storage.remove(food);
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/Horse.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Horse.java
new file mode 100644
index 00000000..cf779223
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/Horse.java
@@ -0,0 +1,28 @@
+package com.zipcodewilmington.froilansfarm.animals;
+
+
+import com.zipcodewilmington.froilansfarm.Rideable;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+
+public class Horse extends Animal implements Rideable {
+
+ private boolean isBeingRidden = false;
+
+ public String makeNoise() {
+ return "neigh!";
+ }
+
+ public void move() {
+
+ }
+
+ @Override
+ public boolean getIsBeingRidden() {
+ return isBeingRidden;
+ }
+
+ @Override
+ public void setIsBeingRidden(boolean isBeingRidden) {
+ this.isBeingRidden = isBeingRidden;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Botanist.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Botanist.java
new file mode 100644
index 00000000..c81025b0
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Botanist.java
@@ -0,0 +1,13 @@
+package com.zipcodewilmington.froilansfarm.animals.person;
+
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import com.zipcodewilmington.froilansfarm.crops.Egg;
+import com.zipcodewilmington.froilansfarm.farm.CropRow;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+
+public interface Botanist {
+ default void plant(Crop crop, CropRow row) {
+ row.addCropsToRow(crop);
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Farmer.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Farmer.java
new file mode 100644
index 00000000..e5cd05c8
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Farmer.java
@@ -0,0 +1,39 @@
+package com.zipcodewilmington.froilansfarm.animals.person;
+
+import com.zipcodewilmington.froilansfarm.Rideable;
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import com.zipcodewilmington.froilansfarm.farm.CropRow;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+
+public class Farmer extends Person implements Rider, Botanist {
+// private String name;
+ public Farmer(){
+
+ }
+
+ public Farmer(String name) {
+ super(name);
+ }
+
+ public void mount(SomeRide ride) {
+ ride.setIsBeingRidden(true);
+ }
+
+ @Override
+ public void dismount(SomeRide ride) {
+ ride.setIsBeingRidden(false);
+ }
+
+ public String makeNoise(){
+ return "YeeHaw!";
+ }
+
+
+ public void storeCrop(SomeEdible... someEdibles) {
+ FarmStorage storage = FarmStorage.getInstance();
+ for (SomeEdible food : someEdibles) {
+ storage.add(food);
+ }
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Person.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Person.java
new file mode 100644
index 00000000..1a2f6634
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Person.java
@@ -0,0 +1,30 @@
+package com.zipcodewilmington.froilansfarm.animals.person;
+
+import com.zipcodewilmington.froilansfarm.animals.Animal;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+
+public class Person extends Animal {
+
+ private String name;
+
+ public Person() {
+ }
+
+ public Person (String name){
+ this.name = name;
+ }
+
+ public String makeNoise() {
+
+ return null;
+ }
+
+ public void setName(String name){
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Pilot.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Pilot.java
new file mode 100644
index 00000000..f69b7f30
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Pilot.java
@@ -0,0 +1,4 @@
+package com.zipcodewilmington.froilansfarm.animals.person;
+
+public interface Pilot {
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Rider.java b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Rider.java
new file mode 100644
index 00000000..ad85a088
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/animals/person/Rider.java
@@ -0,0 +1,11 @@
+package com.zipcodewilmington.froilansfarm.animals.person;
+
+import com.zipcodewilmington.froilansfarm.Rideable;
+
+public interface Rider {
+
+ void mount(SomeRide ride);
+
+ void dismount(SomeRide ride);
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/CornStalk.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/CornStalk.java
new file mode 100644
index 00000000..f8d3cf84
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/CornStalk.java
@@ -0,0 +1,13 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+public class CornStalk extends Crop{
+
+ public CornStalk(boolean hasBeenHarvested, boolean hasBeenFertilized) {
+ super(hasBeenHarvested, hasBeenFertilized);
+ }
+
+ @Override
+ public EarCorn getEdible(EarCorn crop) {
+ return super.getEdible(crop);
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/Crop.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Crop.java
new file mode 100644
index 00000000..0d9707c6
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Crop.java
@@ -0,0 +1,45 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+import com.zipcodewilmington.froilansfarm.farm.Produce;
+
+public abstract class Crop implements Produce {
+
+ private boolean hasBeenHarvested;
+
+ private boolean hasBeenFertilized;
+
+ public Crop(boolean hasBeenHarvested, boolean hasBeenFertilized) {
+ this.hasBeenHarvested = hasBeenHarvested;
+ this.hasBeenFertilized = hasBeenFertilized;
+ }
+
+ public boolean hasBeenFertilized() {
+
+ return hasBeenFertilized;
+ }
+
+ public boolean hasBeenHarvested() {
+ return hasBeenHarvested;
+ }
+
+ public void setHasBeenHarvested(boolean hasBeenHarvested) {
+ this.hasBeenHarvested = hasBeenHarvested;
+ }
+
+ public void setHasBeenFertilized(boolean hasBeenFertilized) {
+ this.hasBeenFertilized = hasBeenFertilized;
+ }
+
+ public someType getEdible(someType crop) {
+ return crop;
+ }
+
+ public someType yield(someType... crops) {
+ for (someType crop : crops) {
+ if (hasBeenFertilized() && hasBeenHarvested()) {
+ return getEdible(crop);
+ }
+ }
+ return null;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/EarCorn.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/EarCorn.java
new file mode 100644
index 00000000..40515595
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/EarCorn.java
@@ -0,0 +1,19 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class EarCorn implements Edible{
+ public boolean IsEdible() {
+ return true;
+ }
+
+ @Override
+ public List createFood(int numberOfCrops) {
+ List list = new ArrayList<>();
+ for (int i = 0; i < numberOfCrops; i++) {
+ list.add(new EarCorn());
+ }
+ return list;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/Edible.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Edible.java
new file mode 100644
index 00000000..0801ddf2
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Edible.java
@@ -0,0 +1,13 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+import java.util.List;
+
+public interface Edible {
+
+ boolean IsEdible(); //check if food is edible or not
+
+ List createFood(int numberOfCrops);
+
+
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/Egg.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Egg.java
new file mode 100644
index 00000000..23fe6e0f
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Egg.java
@@ -0,0 +1,35 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Egg implements Edible{
+
+ private boolean hasBeenFertilized = false;
+
+ public boolean IsEdible() {
+ return true;
+ }
+
+ @Override
+ public List createFood(int numberOfCrops) {
+ List list = new ArrayList<>();
+ for (int i = 0; i < numberOfCrops; i++) {
+ list.add(new Egg());
+ }
+ return list;
+ }
+
+ public boolean isInedibleEgg() {
+ return false;
+ }
+
+ public boolean getHasBeenFertilized() {
+ return hasBeenFertilized;
+ }
+
+ public void setHasBeenFertilized(boolean hasBeenFertilized) {
+ this.hasBeenFertilized = hasBeenFertilized;
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/Potato.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Potato.java
new file mode 100644
index 00000000..84794fda
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Potato.java
@@ -0,0 +1,19 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Potato implements Edible {
+ public boolean IsEdible() {
+ return true;
+ }
+
+ @Override
+ public List createFood(int numberOfCrops) {
+ List list = new ArrayList<>();
+ for (int i = 0; i < numberOfCrops; i++) {
+ list.add(new Potato());
+ }
+ return list;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/PotatoRoot.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/PotatoRoot.java
new file mode 100644
index 00000000..4668a165
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/PotatoRoot.java
@@ -0,0 +1,13 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+public class PotatoRoot extends Crop {
+
+ public PotatoRoot(boolean hasBeenHarvested, boolean hasBeenFertilized) {
+ super(hasBeenHarvested, hasBeenFertilized);
+ }
+
+ @Override
+ public Potato getEdible(Potato crop) {
+ return super.getEdible(crop);
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/Tomato.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Tomato.java
new file mode 100644
index 00000000..bc228b80
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/Tomato.java
@@ -0,0 +1,19 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Tomato implements Edible{
+ public boolean IsEdible() {
+ return true;
+ }
+
+ @Override
+ public List createFood(int numberOfCrops) {
+ List list = new ArrayList<>();
+ for (int i = 0; i < numberOfCrops; i++) {
+ list.add(new Tomato());
+ }
+ return list;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/crops/TomatoPlant.java b/src/main/java/com/zipcodewilmington/froilansfarm/crops/TomatoPlant.java
new file mode 100644
index 00000000..afa8429e
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/crops/TomatoPlant.java
@@ -0,0 +1,14 @@
+package com.zipcodewilmington.froilansfarm.crops;
+
+public class TomatoPlant extends Crop{
+
+ public TomatoPlant(boolean hasBeenHarvested, boolean hasBeenFertilized) {
+ super(hasBeenHarvested, hasBeenFertilized);
+ }
+
+ @Override
+ public Tomato getEdible(Tomato crop) {
+ return super.getEdible(crop);
+ }
+
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/ChickenCoop.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/ChickenCoop.java
new file mode 100644
index 00000000..0495d682
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/ChickenCoop.java
@@ -0,0 +1,15 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+
+import java.util.*;
+
+public class ChickenCoop extends Shelter {
+
+ public ChickenCoop() {
+ }
+
+ public ChickenCoop(Chicken... chickens) {
+ super.setAnimals(new ArrayList<>(Arrays.asList(chickens)));
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/CropRow.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/CropRow.java
new file mode 100644
index 00000000..a3e1a183
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/CropRow.java
@@ -0,0 +1,36 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class CropRow {
+
+ private List cropsInRow = new ArrayList<>();
+
+ public CropRow() {
+
+ }
+
+ public CropRow(SomeCrop someCrop) {
+ for (int i = 0; i < 15; i++) {
+ cropsInRow.add(someCrop);
+ }
+ }
+
+ public void addCropsToRow(SomeCrop someCrop) {
+ for (int i = 0; i < 15; i++) {
+ cropsInRow.add(someCrop);
+ }
+ }
+
+ public List getCropsInRow() {
+ return cropsInRow;
+ }
+
+ public Integer getNumberOfCropsInRow() {
+ return cropsInRow.size();
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/Farm.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Farm.java
new file mode 100644
index 00000000..59ecbdb0
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Farm.java
@@ -0,0 +1,44 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.vehicle.Vehicle;
+
+import java.util.List;
+
+public class Farm {
+
+ List farmhouses;
+ List stables;
+ List chickenCoops;
+ List fields;
+ List vehicles;
+
+ public Farm(List farmhouses, List stables, List chickenCoops, List fields, List vehicles) {
+ this.farmhouses = farmhouses;
+ this.stables = stables;
+ this.chickenCoops = chickenCoops;
+ this.fields = fields;
+ this.vehicles = vehicles;
+ }
+
+ public List getFarmhouses() {
+ return farmhouses;
+ }
+
+ public List getStables() {
+ return stables;
+ }
+
+ public List getChickenCoops() {
+ return chickenCoops;
+ }
+
+ public List getFields() {
+ return fields;
+ }
+
+ public List getVehicles() {
+ return vehicles;
+ }
+
+}
+
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmBuilder.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmBuilder.java
new file mode 100644
index 00000000..bd3579c7
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmBuilder.java
@@ -0,0 +1,43 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.vehicle.Vehicle;
+
+import java.util.*;
+
+public class FarmBuilder {
+
+ private List farmhouses;
+ private List stables;
+ private List chickenCoops;
+ private List fields;
+ private List vehicles;
+
+ public FarmBuilder setFarmhouses(FarmHouse farmhouses) {
+ this.farmhouses = new ArrayList<>(Arrays.asList(farmhouses));
+ return this;
+ }
+
+ public FarmBuilder setStables(Stable... stables) {
+ this.stables = new ArrayList<>(Arrays.asList(stables));
+ return this;
+ }
+
+ public FarmBuilder setChickenCoops(ChickenCoop... chickenCoops) {
+ this.chickenCoops = new ArrayList<>(Arrays.asList(chickenCoops));
+ return this;
+ }
+
+ public FarmBuilder setFields(Field... fields) {
+ this.fields = new ArrayList<>(Arrays.asList(fields));
+ return this;
+ }
+
+ public FarmBuilder setVehicles(Vehicle... vehicles) {
+ this.vehicles = new ArrayList<>(Arrays.asList(vehicles));
+ return this;
+ }
+
+ public Farm build() {
+ return new Farm(farmhouses, stables, chickenCoops, fields, vehicles);
+ }
+}
\ No newline at end of file
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmHouse.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmHouse.java
new file mode 100644
index 00000000..c83c655d
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmHouse.java
@@ -0,0 +1,15 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.animals.person.Person;
+
+import java.util.*;
+
+public class FarmHouse extends Shelter {
+
+ public FarmHouse() {
+ }
+
+ public FarmHouse(Person... people) {
+ super.setAnimals(new ArrayList<>(Arrays.asList(people)));
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmStorage.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmStorage.java
new file mode 100644
index 00000000..2be9698a
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/FarmStorage.java
@@ -0,0 +1,68 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.crops.*;
+
+import java.util.*;
+
+public class FarmStorage {
+
+ private static FarmStorage farmStorage;
+
+ private List extends Edible> list = new ArrayList<>();
+ private Map, List extends Edible>> map = constructMap();
+
+
+
+ private FarmStorage() {
+ }
+
+ public static FarmStorage getInstance() {
+ if (farmStorage == null) {
+ farmStorage = new FarmStorage();
+ return farmStorage;
+ }
+ return farmStorage;
+ }
+
+ public void add(SomeEdible foodItem) {
+ List list = (List) map.get(foodItem.getClass());
+ list.add(foodItem);
+ }
+
+ public void remove(SomeEdible foodItem) {
+ List list = (List) map.get(foodItem.getClass());
+ list.remove(foodItem);
+ }
+
+ private void populateMap() {
+ Tomato tomato = new Tomato();
+ Potato potato = new Potato();
+ Egg egg = new Egg();
+ EarCorn earCorn = new EarCorn();
+ map.put(tomato.getClass(), tomato.createFood(20));
+ map.put(potato.getClass(), potato.createFood(20));
+ map.put(egg.getClass(), egg.createFood(20));
+ map.put(earCorn.getClass(), earCorn.createFood(20));
+ }
+
+
+ private Map, List extends Edible>> constructMap() {
+ map = new HashMap<>();
+ populateMap();
+ return map;
+ }
+
+ public Map, List extends Edible>> getMap() {
+ return map;
+ }
+
+ public SomeEdible getFoodItem(SomeEdible someEdible) {
+ List extends Edible> edibleList = map.get(someEdible.getClass());
+ return (SomeEdible)edibleList.get(0);
+// switch (nameOfFood) {
+// case "tomato":
+// List extends Edible> list = map.get(new Tomato().getClass());
+// return (SomeEdible)list.get(0);
+// }
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/Field.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Field.java
new file mode 100644
index 00000000..4191916e
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Field.java
@@ -0,0 +1,18 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Field {
+
+ private List rowsInField;
+
+ public Field(CropRow... cropRows) { // 5,
+ rowsInField = new ArrayList<>(Arrays.asList(cropRows));
+ }
+
+ public List getRowsInField() {
+ return rowsInField;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/Produce.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Produce.java
new file mode 100644
index 00000000..6b8b1685
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Produce.java
@@ -0,0 +1,10 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+
+public interface Produce {
+
+ //someType yield();
+
+ boolean hasBeenFertilized();
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/Shelter.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Shelter.java
new file mode 100644
index 00000000..4c1a63de
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Shelter.java
@@ -0,0 +1,30 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.animals.Animal;
+
+import java.util.*;
+
+public abstract class Shelter {
+
+ private List animals = new ArrayList();
+
+ public void add(SomeType animal) {
+ animals.add(animal);
+ }
+
+ public void remove(SomeType animal) {
+ animals.remove(animal);
+ }
+
+ public Integer getNumberOfAnimals() {
+ return animals.size();
+ }
+
+ public List getAnimals() {
+ return animals;
+ }
+
+ public void setAnimals(List animals) {
+ this.animals = animals;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/farm/Stable.java b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Stable.java
new file mode 100644
index 00000000..dbac1df5
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/farm/Stable.java
@@ -0,0 +1,15 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+
+import java.util.*;
+
+public class Stable extends Shelter {
+
+ public Stable() {
+ }
+
+ public Stable(Horse... horses) {
+ super.setAnimals(new ArrayList<>(Arrays.asList(horses)));
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Aircraft.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Aircraft.java
new file mode 100644
index 00000000..77f60779
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Aircraft.java
@@ -0,0 +1,7 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+public interface Aircraft {
+
+
+ public boolean fly();
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/CropDuster.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/CropDuster.java
new file mode 100644
index 00000000..31c03d43
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/CropDuster.java
@@ -0,0 +1,30 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.farm.CropRow;
+import com.zipcodewilmington.froilansfarm.farm.Farm;
+
+import java.util.List;
+
+public class CropDuster extends Vehicle implements FarmVehicle, Aircraft {
+
+
+
+ public void fertilize(CropRow row){
+ List crops = row.getCropsInRow();
+ for (SomeCrop crop : crops) {
+ crop.setHasBeenFertilized(true);
+ }
+ }
+
+ @Override
+ public String makeNoise() {
+ return "Buzzzzz!";
+ }
+
+
+ @Override
+ public boolean fly() {
+ return false;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/FarmVehicle.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/FarmVehicle.java
new file mode 100644
index 00000000..96d66cdf
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/FarmVehicle.java
@@ -0,0 +1,17 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+import com.zipcodewilmington.froilansfarm.farm.Farm;
+
+public interface FarmVehicle {
+
+ default public boolean operate(Farm farm) {
+ if (farm != null) {
+ return true;
+ }
+ return false;
+ }
+
+
+}
+
+//in test class use tractor
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Tractor.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Tractor.java
new file mode 100644
index 00000000..2c314efb
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Tractor.java
@@ -0,0 +1,35 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.farm.CropRow;
+import com.zipcodewilmington.froilansfarm.farm.Farm;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class Tractor extends Vehicle implements FarmVehicle {
+
+
+
+ private int crop;
+
+ public Tractor(int crop) {
+
+ this.crop = crop;
+ }
+
+ public void harvest(CropRow cropRow){
+ List list = cropRow.getCropsInRow();
+ for (SomeCrop crop : list) {
+ crop.setHasBeenHarvested(true);
+ }
+
+ }
+
+ @Override
+ public String makeNoise () {
+ return null;
+ }
+}
diff --git a/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Vehicle.java b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Vehicle.java
new file mode 100644
index 00000000..ec82b525
--- /dev/null
+++ b/src/main/java/com/zipcodewilmington/froilansfarm/vehicle/Vehicle.java
@@ -0,0 +1,24 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+import com.zipcodewilmington.froilansfarm.NoiseMaker;
+import com.zipcodewilmington.froilansfarm.Rideable;
+
+public abstract class Vehicle implements NoiseMaker, Rideable {
+
+ public boolean isBeingRidden = false;
+
+ @Override
+ public String makeNoise() {
+ return "Honk!";
+ }
+
+ @Override
+ public boolean getIsBeingRidden() {
+ return isBeingRidden;
+ }
+
+ @Override
+ public void setIsBeingRidden(boolean isBeingRidden) {
+ this.isBeingRidden = isBeingRidden;
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/MainApplicationTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/MainApplicationTest.java
index 1a971b7f..bd91c41b 100644
--- a/src/test/java/com/zipcodewilmington/froilansfarm/MainApplicationTest.java
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/MainApplicationTest.java
@@ -1,7 +1,22 @@
package com.zipcodewilmington.froilansfarm;
+
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+import org.junit.Test;
+
/**
* Created by leon on 2/26/18.
*/
public class MainApplicationTest {
+
+ @Test
+ public void test() {
+ FarmStorage storage = FarmStorage.getInstance();
+ Froilan froilan = new Froilan();
+ System.out.println(storage.getMap().get(new Tomato().getClass()));
+ froilan.eat(storage.getFoodItem(new Tomato()));
+ System.out.println(storage.getMap().get(new Tomato().getClass()));
+ }
+
}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animal/ChickenTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animal/ChickenTest.java
new file mode 100644
index 00000000..6946e9df
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animal/ChickenTest.java
@@ -0,0 +1,28 @@
+package com.zipcodewilmington.froilansfarm.animal;
+
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+import com.zipcodewilmington.froilansfarm.farm.FarmStorage;
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+
+public class ChickenTest {
+ Chicken chicken = new Chicken();
+
+ @Test
+ public void testMakeNoise() {
+ String expected = "cluck!";
+ String actual = chicken.makeNoise();
+ Assertions.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testYield() {
+ // Given
+ //FarmStorage store = FarmStorage.getInstance();
+
+ // When
+
+ // Then
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animal/HorseTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animal/HorseTest.java
new file mode 100644
index 00000000..bc1fe34c
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animal/HorseTest.java
@@ -0,0 +1,27 @@
+package com.zipcodewilmington.froilansfarm.animal;
+
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class HorseTest {
+
+ Horse horse = new Horse();
+
+ @Test
+ void testMakeNoise() {
+ String expected = "neigh!";
+ String actual = horse.makeNoise();
+ Assertions.assertEquals(expected, actual);
+ }
+
+ @Test
+ void move() {
+ }
+
+ @Test
+ void eat() {
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FarmerTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FarmerTest.java
new file mode 100644
index 00000000..f94a1ac5
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FarmerTest.java
@@ -0,0 +1,40 @@
+package com.zipcodewilmington.froilansfarm.animal.person;
+
+import com.zipcodewilmington.froilansfarm.animals.person.Botanist;
+import com.zipcodewilmington.froilansfarm.animals.person.Farmer;
+import com.zipcodewilmington.froilansfarm.animals.person.Person;
+import com.zipcodewilmington.froilansfarm.animals.person.Rider;
+
+import org.junit.Test;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+
+public class FarmerTest {
+ private Farmer farmer = new Farmer();
+
+ @BeforeEach
+ void setUp() {
+ this.farmer = new Farmer();
+ }
+
+ @Test
+ public void testInstanceOf(){
+
+ Assertions.assertTrue(farmer instanceof Person);
+ Assertions.assertTrue(farmer instanceof Rider);
+ Assertions.assertTrue(farmer instanceof Botanist);
+ }
+
+ @Test
+ public void testMakeNoise(){
+ //given
+ String expected = "YeeHaw!";
+
+ //When
+ String actual = farmer.makeNoise();
+
+ //then
+ Assertions.assertEquals(expected, actual);
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FroilandTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FroilandTest.java
new file mode 100644
index 00000000..b72e37ab
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FroilandTest.java
@@ -0,0 +1,4 @@
+package com.zipcodewilmington.froilansfarm.animal.person;
+
+public class FroilandTest {
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FroilandaTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FroilandaTest.java
new file mode 100644
index 00000000..52ef1318
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/FroilandaTest.java
@@ -0,0 +1,4 @@
+//package com.zipcodewilmington.froilansfarm.animal.person;
+//
+//public class FroilandaTest {
+//}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/PersonTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/PersonTest.java
new file mode 100644
index 00000000..8ad791af
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/animal/person/PersonTest.java
@@ -0,0 +1,43 @@
+package com.zipcodewilmington.froilansfarm.animal.person;
+
+import com.zipcodewilmington.froilansfarm.animals.person.Person;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+public class PersonTest {
+
+ private Person person = new Person();
+
+// @BeforeEach
+// void setUp() {
+// this.person = new Person();
+// }
+
+ @Test
+ public void testConstructor(){
+ String actualName = person.getName();
+ String expectedName = null;
+ Assertions.assertEquals(expectedName, actualName);
+ }
+
+ @Test
+ public void testSetName(){
+ String expectedName = "Froilan";
+ person.setName(expectedName);
+ String actualName = person.getName();
+ Assertions.assertEquals(expectedName, actualName);
+ }
+
+ @Test
+ void makeNoise() {
+ }
+
+ @Test
+ void eat() {
+ }
+
+ @Test
+ void getName() {
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/AbstractCropTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/AbstractCropTest.java
new file mode 100644
index 00000000..2db23037
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/AbstractCropTest.java
@@ -0,0 +1,24 @@
+package com.zipcodewilmington.froilansfarm.cropsTest;
+
+import com.zipcodewilmington.froilansfarm.crops.CornStalk;
+import com.zipcodewilmington.froilansfarm.crops.Crop;
+import com.zipcodewilmington.froilansfarm.crops.EarCorn;
+import com.zipcodewilmington.froilansfarm.crops.Edible;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class AbstractCropTest {
+ @Test
+ public void testGetEdible() {
+
+ // Given
+ CornStalk cornStalk = new CornStalk(true, true);
+
+ // When
+ EarCorn earCorn = cornStalk.getEdible(new EarCorn());
+
+ // Then
+ Assert.assertNotNull(earCorn);
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/CornStalkTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/CornStalkTest.java
new file mode 100644
index 00000000..c3b8beaa
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/CornStalkTest.java
@@ -0,0 +1,24 @@
+package com.zipcodewilmington.froilansfarm.cropsTest;
+
+import com.zipcodewilmington.froilansfarm.crops.CornStalk;
+import com.zipcodewilmington.froilansfarm.crops.EarCorn;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class CornStalkTest {
+
+ @Test
+ public void testGetEdible() {
+
+ // Given
+ CornStalk cornStalk = new CornStalk(true, true);
+
+ // When
+ EarCorn earCorn = cornStalk.getEdible(new EarCorn());
+
+ // Then
+ Assert.assertNotNull(earCorn);
+
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/PotatoRootTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/PotatoRootTest.java
new file mode 100644
index 00000000..3601b3f9
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/PotatoRootTest.java
@@ -0,0 +1,23 @@
+package com.zipcodewilmington.froilansfarm.cropsTest;
+
+import com.zipcodewilmington.froilansfarm.crops.Potato;
+import com.zipcodewilmington.froilansfarm.crops.PotatoRoot;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PotatoRootTest {
+
+ @Test
+ public void testGetEdible() {
+
+ // Given
+ PotatoRoot potatoRoot = new PotatoRoot(true, true);
+
+ // When
+ Potato potato = potatoRoot.getEdible(new Potato());
+
+ // Then
+ Assert.assertNotNull(potato);
+
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/TomatoPlantTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/TomatoPlantTest.java
new file mode 100644
index 00000000..2a0beebe
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/cropsTest/TomatoPlantTest.java
@@ -0,0 +1,23 @@
+package com.zipcodewilmington.froilansfarm.cropsTest;
+
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import com.zipcodewilmington.froilansfarm.crops.TomatoPlant;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TomatoPlantTest {
+
+ @Test
+ public void testGetEdible() {
+
+ // Given
+ TomatoPlant tomatoPlant = new TomatoPlant(true, true);
+
+ // When
+ Tomato tomato = tomatoPlant.getEdible(new Tomato());
+
+ // Then
+ Assert.assertNotNull(tomato);
+
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/edible/EarCornTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/edible/EarCornTest.java
new file mode 100644
index 00000000..9261e69b
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/edible/EarCornTest.java
@@ -0,0 +1,20 @@
+package com.zipcodewilmington.froilansfarm.edible;
+
+import com.zipcodewilmington.froilansfarm.crops.EarCorn;
+import org.junit.Assert;
+import org.junit.Test;
+
+
+public class EarCornTest {
+
+ @Test
+ public void earCornIsEdibleTest() {
+ EarCorn edibleEarCorn = new EarCorn();
+
+ boolean expected = true;
+ boolean actual = edibleEarCorn.IsEdible();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/edible/EdibleTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/edible/EdibleTest.java
new file mode 100644
index 00000000..7aaabd48
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/edible/EdibleTest.java
@@ -0,0 +1,25 @@
+package com.zipcodewilmington.froilansfarm.edible;
+
+//import com.sun.org.apache.xpath.internal.operations.Bool;
+import com.zipcodewilmington.froilansfarm.crops.Egg;
+import com.zipcodewilmington.froilansfarm.crops.Potato;
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import com.zipcodewilmington.froilansfarm.crops.TomatoPlant;
+import org.junit.Test;
+
+public class EdibleTest {
+
+ @Test
+ public void EdibleFoodTest() {
+ Egg edibleEgg = new Egg();
+ Egg inedibleEgg = new Egg();
+ inedibleEgg.isInedibleEgg();
+
+ Boolean expected = true;
+ Boolean actual = edibleEgg.IsEdible();
+
+ inedibleEgg.isInedibleEgg();
+ Boolean expected2 = false;
+ Boolean actual2 = inedibleEgg.isInedibleEgg();
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/edible/EggTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/edible/EggTest.java
new file mode 100644
index 00000000..46942385
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/edible/EggTest.java
@@ -0,0 +1,31 @@
+package com.zipcodewilmington.froilansfarm.edible;
+
+import com.sun.org.apache.xpath.internal.operations.Bool;
+import com.zipcodewilmington.froilansfarm.crops.Egg;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class EggTest {
+
+ @Test
+ public void EggIsEdibleTest(){
+ Egg edibleEgg = new Egg();
+
+ Boolean expected = true;
+ Boolean actual = edibleEgg.IsEdible();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+ @Test
+ public void hasBeenFertilizedTest() {
+ // Given
+ //Egg fertilizedEgg = new Egg();
+
+ // When
+ //boolean setEgg = fertilizedEgg.IsEdible();
+
+ // Then
+ //Assert.assertTrue(setEgg);
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/edible/PotatoTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/edible/PotatoTest.java
new file mode 100644
index 00000000..5fdf344f
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/edible/PotatoTest.java
@@ -0,0 +1,19 @@
+package com.zipcodewilmington.froilansfarm.edible;
+
+import com.zipcodewilmington.froilansfarm.crops.Potato;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PotatoTest {
+
+ @Test
+ public void PotatoIsEdibleTest() {
+ Potato ediblePotato = new Potato();
+
+ Boolean expected = true;
+ Boolean actual = ediblePotato.IsEdible();
+
+ Assert.assertEquals(expected, actual);
+ }
+
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/edible/TomatoTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/edible/TomatoTest.java
new file mode 100644
index 00000000..30103669
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/edible/TomatoTest.java
@@ -0,0 +1,18 @@
+package com.zipcodewilmington.froilansfarm.edible;
+
+import com.zipcodewilmington.froilansfarm.crops.EarCorn;
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class TomatoTest {
+ @Test
+ public void TomatoIsEdibleTest() {
+ Tomato edibleTomato = new Tomato();
+
+ boolean expected = true;
+ boolean actual = edibleTomato.IsEdible();
+
+ Assert.assertEquals(expected, actual);
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/farm/CropRowTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/farm/CropRowTest.java
new file mode 100644
index 00000000..0f87097b
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/farm/CropRowTest.java
@@ -0,0 +1,28 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.crops.EarCorn;
+import com.zipcodewilmington.froilansfarm.crops.Potato;
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import com.zipcodewilmington.froilansfarm.crops.TomatoPlant;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+public class CropRowTest {
+
+ @Test
+ public void constructorTest() {
+ // Given
+ TomatoPlant tomato = new TomatoPlant(true, true);
+ CropRow cropRow = new CropRow(tomato);
+ Integer expectedNumberOfCrops = 15;
+
+ // When
+ Integer actualNumberOfCrops = cropRow.getNumberOfCropsInRow();
+
+ // Then
+ Assert.assertEquals(expectedNumberOfCrops, actualNumberOfCrops);
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/farm/FarmTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/farm/FarmTest.java
new file mode 100644
index 00000000..b4f0d9ee
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/farm/FarmTest.java
@@ -0,0 +1,35 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.vehicle.Vehicle;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.*;
+
+public class FarmTest {
+
+// @Test
+// public void constructorTest() {
+// // Given
+// List expectedFarmhouses = new ArrayList<>(Arrays.asList(new FarmHouse()));
+// List expectedStables = new ArrayList<>(Arrays.asList(new Stable()));
+// List expectedChickenCoops = new ArrayList<>(Arrays.asList(new ChickenCoop()));
+// List expectedFields = new ArrayList<>(Arrays.asList(new Field()));
+// List expectedVehicles = new ArrayList<>(Arrays.asList(new Vehicle()));
+//
+// // When
+// Farm farm = new FarmBuilder().setFarmhouses(expectedFarmhouses).setStables(expectedStables).setChickenCoops(expectedChickenCoops).setFields(expectedFields).setVehicles(expectedVehicles).build();
+// List actualFarmhouses = farm.getFarmhouses();
+// List actualStables = farm.getStables();
+// List actualChickenCoops = farm.getChickenCoops();
+// List actualFields = farm.getFields();
+// List actualVehicles = farm.getVehicles();
+//
+// // Then
+// Assert.assertEquals(expectedFarmhouses, actualFarmhouses);
+// Assert.assertEquals(expectedStables, actualStables);
+// Assert.assertEquals(expectedChickenCoops, actualChickenCoops);
+// Assert.assertEquals(expectedFields, actualFields);
+// Assert.assertEquals(expectedVehicles, actualVehicles);
+// }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/farm/FieldTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/farm/FieldTest.java
new file mode 100644
index 00000000..a0ff3de5
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/farm/FieldTest.java
@@ -0,0 +1,29 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+import com.zipcodewilmington.froilansfarm.crops.*;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class FieldTest {
+
+ @Test
+ public void constructorTest() {
+ // Given
+ CropRow cropRow1 = new CropRow(new TomatoPlant(true, true));
+ CropRow cropRow2 = new CropRow(new PotatoRoot(true, true));
+ CropRow cropRow3 = new CropRow(new CornStalk(true, true));
+ List expectedCropRows = Arrays.asList(cropRow1, cropRow2, cropRow3);
+
+ // When
+ Field field = new Field(cropRow1, cropRow2, cropRow3);
+ List actualCropRows = field.getRowsInField();
+
+ // Then
+ Assert.assertEquals(expectedCropRows, actualCropRows);
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/farm/ShelterTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/farm/ShelterTest.java
new file mode 100644
index 00000000..bdff5c73
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/farm/ShelterTest.java
@@ -0,0 +1,105 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.Froilan;
+import com.zipcodewilmington.froilansfarm.FroilansFarm;
+import com.zipcodewilmington.froilansfarm.animals.Chicken;
+import com.zipcodewilmington.froilansfarm.animals.Horse;
+import com.zipcodewilmington.froilansfarm.animals.person.Person;
+import com.zipcodewilmington.froilansfarm.vehicle.Vehicle;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class ShelterTest {
+
+ @Test
+ public void chickenCoopConstructorTest() {
+ // Given
+ Chicken[] chickens = new Chicken[] {new Chicken(), new Chicken(), new Chicken(), new Chicken()};
+ ChickenCoop chickenCoop = new ChickenCoop(chickens);
+ List expectedChickens = new ArrayList<>(Arrays.asList(chickens));
+
+
+ // When
+ List actualChickens = chickenCoop.getAnimals();
+
+ // Then
+ Assert.assertEquals(expectedChickens, actualChickens);
+ }
+
+ @Test
+ public void stableConstructorTest() {
+ // Given
+ Horse[] horses = new Horse[] {new Horse(), new Horse(), new Horse(), new Horse()};
+ Stable stable = new Stable(horses);
+ List expectedHorses = new ArrayList<>(Arrays.asList(horses));
+
+
+ // When
+ List actualHorses = stable.getAnimals();
+
+ // Then
+ Assert.assertEquals(expectedHorses, actualHorses);
+ }
+
+ @Test
+ public void farmHouseConstructorTest() {
+ // Given
+ Person[] people = new Person[] {new Person(), new Person(), new Person(), new Person()};
+ FarmHouse farmHouse = new FarmHouse(people);
+ List expectedPeople = new ArrayList<>(Arrays.asList(people));
+
+
+ // When
+ List actualPeople = farmHouse.getAnimals();
+
+ // Then
+ Assert.assertEquals(expectedPeople, actualPeople);
+ }
+
+ @Test
+ public void addTest() {
+ // Given
+ Person expectedPerson = new Person();
+ FarmHouse farmHouse = new FarmHouse();
+
+
+ // When
+ farmHouse.add(expectedPerson);
+ List people = farmHouse.getAnimals();
+ Person actualPerson = people.get(0);
+
+ // Then
+ Assert.assertEquals(expectedPerson, actualPerson);
+ }
+
+ @Test
+ public void removeTest() {
+ // Given
+ Person person1 = new Person();
+ Person person2 = new Person();
+ FarmHouse farmHouse = new FarmHouse(person1, person2);
+ Integer expectedNumberOfPeople = 1;
+
+
+ // When
+ farmHouse.remove(person1);
+ Integer actualNumberOfPeople = farmHouse.getNumberOfAnimals();
+
+ // Then
+ Assert.assertEquals(expectedNumberOfPeople, actualNumberOfPeople);
+ }
+
+ @Test
+ public void test() {
+// FroilansFarm farm = FroilansFarm.INSTANCE;
+// System.out.println(farm);
+ Froilan froilan = new Froilan();
+ Farm farm = froilan.getFarm();
+ System.out.println(farm);
+
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/farm/StorageTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/farm/StorageTest.java
new file mode 100644
index 00000000..fd2e6ce2
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/farm/StorageTest.java
@@ -0,0 +1,26 @@
+package com.zipcodewilmington.froilansfarm.farm;
+
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.List;
+import java.util.Map;
+
+public class StorageTest {
+
+ @Test
+ public void addTest() {
+ // Given
+ FarmStorage storage = FarmStorage.getInstance();
+ Map> map = storage.getMap();
+
+ // When
+
+
+ // Then
+ for (Map.Entry entry : map.entrySet()) {
+ System.out.println(entry.getKey().toString());
+ }
+ }
+}
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/AircraftTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/AircraftTest.java
new file mode 100644
index 00000000..b70b4fd9
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/AircraftTest.java
@@ -0,0 +1,23 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class AircraftTest {
+
+
+ void flyTest() {
+
+
+
+
+
+
+
+
+
+
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/CropDusterTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/CropDusterTest.java
new file mode 100644
index 00000000..bee9eabe
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/CropDusterTest.java
@@ -0,0 +1,28 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import com.zipcodewilmington.froilansfarm.crops.TomatoPlant;
+import com.zipcodewilmington.froilansfarm.farm.CropRow;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class CropDusterTest {
+
+ @Test
+ void fertilize() {
+ CropDuster cropDus = new CropDuster();
+
+ boolean expected = true;
+ cropDus.fertilize(new CropRow(new TomatoPlant(true, true)));
+
+ Assert.assertTrue(expected);
+
+
+ }
+
+ @Test
+ void operate() {
+ }
+}
\ No newline at end of file
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/FarmVehicleTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/FarmVehicleTest.java
new file mode 100644
index 00000000..941e68a7
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/FarmVehicleTest.java
@@ -0,0 +1,13 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+abstract class FarmVehicleTest {
+
+
+
+
+
+}
\ No newline at end of file
diff --git a/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/TractorTest.java b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/TractorTest.java
new file mode 100644
index 00000000..1c081e62
--- /dev/null
+++ b/src/test/java/com/zipcodewilmington/froilansfarm/vehicle/TractorTest.java
@@ -0,0 +1,28 @@
+package com.zipcodewilmington.froilansfarm.vehicle;
+
+//import com.sun.scenario.effect.Crop;
+
+import com.zipcodewilmington.froilansfarm.crops.Egg;
+import com.zipcodewilmington.froilansfarm.crops.Potato;
+import com.zipcodewilmington.froilansfarm.crops.Tomato;
+import org.junit.Assert;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+class TractorTest {
+
+
+
+// @Test
+// void harvest() {
+// Tractor t = new Tractor(4);
+//
+// boolean expected = true;
+// boolean actual = t.harvest(4);
+//
+// Assert.assertEquals(expected,actual);
+//
+// }
+
+}
\ No newline at end of file