summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java11
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java19
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java19
-rw-r--r--src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java19
-rw-r--r--src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java128
5 files changed, 192 insertions, 4 deletions
diff --git a/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java b/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
index e8e5d163..8f50db29 100644
--- a/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
+++ b/src/main/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializer.java
@@ -2,6 +2,11 @@ package org.luxons.sevenwonders.game.data.serializers;
import java.lang.reflect.Type;
+import org.luxons.sevenwonders.game.effects.Effect;
+import org.luxons.sevenwonders.game.effects.GoldIncrease;
+import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
+import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
+
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
@@ -9,10 +14,6 @@ import com.google.gson.JsonParseException;
import com.google.gson.JsonPrimitive;
import com.google.gson.JsonSerializationContext;
import com.google.gson.JsonSerializer;
-import org.luxons.sevenwonders.game.effects.Effect;
-import org.luxons.sevenwonders.game.effects.GoldIncrease;
-import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
-import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
public class NumericEffectSerializer implements JsonSerializer<Effect>, JsonDeserializer<Effect> {
@@ -25,6 +26,8 @@ public class NumericEffectSerializer implements JsonSerializer<Effect>, JsonDese
value = ((GoldIncrease)effect).getAmount();
} else if (RawPointsIncrease.class.equals(typeOfSrc)) {
value = ((RawPointsIncrease)effect).getPoints();
+ } else {
+ throw new IllegalArgumentException("Unknown numeric effet " + typeOfSrc.getTypeName());
}
return new JsonPrimitive(value);
}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java b/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
index c2250d23..8a319ab6 100644
--- a/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
+++ b/src/main/java/org/luxons/sevenwonders/game/effects/GoldIncrease.java
@@ -1,5 +1,7 @@
package org.luxons.sevenwonders.game.effects;
+import java.util.Objects;
+
import org.luxons.sevenwonders.game.boards.Board;
public class GoldIncrease extends InstantEffect {
@@ -18,4 +20,21 @@ public class GoldIncrease extends InstantEffect {
public void apply(Board board, Board leftNeighbourBoard, Board rightNeighbourBoard) {
board.setGold(board.getGold() + amount);
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ GoldIncrease that = (GoldIncrease)o;
+ return amount == that.amount;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(amount);
+ }
}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java b/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
index 7cfa4905..ad1497dd 100644
--- a/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
+++ b/src/main/java/org/luxons/sevenwonders/game/effects/MilitaryReinforcements.java
@@ -1,5 +1,7 @@
package org.luxons.sevenwonders.game.effects;
+import java.util.Objects;
+
import org.luxons.sevenwonders.game.boards.Board;
public class MilitaryReinforcements extends InstantEffect {
@@ -18,4 +20,21 @@ public class MilitaryReinforcements extends InstantEffect {
public void apply(Board board, Board leftNeighbourBoard, Board rightNeighbourBoard) {
board.setNbWarSymbols(board.getNbWarSymbols() + count);
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ MilitaryReinforcements that = (MilitaryReinforcements)o;
+ return count == that.count;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(count);
+ }
}
diff --git a/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java b/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
index 53fcecd4..76ab30b0 100644
--- a/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
+++ b/src/main/java/org/luxons/sevenwonders/game/effects/RawPointsIncrease.java
@@ -1,5 +1,7 @@
package org.luxons.sevenwonders.game.effects;
+import java.util.Objects;
+
import org.luxons.sevenwonders.game.boards.Board;
public class RawPointsIncrease extends EndGameEffect {
@@ -18,4 +20,21 @@ public class RawPointsIncrease extends EndGameEffect {
public int computePoints(Board board, Board leftNeighbourBoard, Board rightNeighbourBoard) {
return points;
}
+
+ @Override
+ public boolean equals(Object o) {
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ RawPointsIncrease that = (RawPointsIncrease)o;
+ return points == that.points;
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(points);
+ }
}
diff --git a/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java b/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java
new file mode 100644
index 00000000..753a26cf
--- /dev/null
+++ b/src/test/java/org/luxons/sevenwonders/game/data/serializers/NumericEffectSerializerTest.java
@@ -0,0 +1,128 @@
+package org.luxons.sevenwonders.game.data.serializers;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+import org.luxons.sevenwonders.game.effects.GoldIncrease;
+import org.luxons.sevenwonders.game.effects.MilitaryReinforcements;
+import org.luxons.sevenwonders.game.effects.ProductionIncrease;
+import org.luxons.sevenwonders.game.effects.RawPointsIncrease;
+
+import com.google.gson.Gson;
+import com.google.gson.GsonBuilder;
+import static org.junit.Assert.*;
+
+@RunWith(Theories.class)
+public class NumericEffectSerializerTest {
+
+ @DataPoints
+ public static int[] dataPoints() {
+ return new int[] {-2, -1, 0, 1, 2, 5};
+ }
+
+ private Gson gson;
+
+ @Before
+ public void setUp() {
+ gson = new GsonBuilder().registerTypeAdapter(MilitaryReinforcements.class, new NumericEffectSerializer())
+ .registerTypeAdapter(RawPointsIncrease.class, new NumericEffectSerializer())
+ .registerTypeAdapter(GoldIncrease.class, new NumericEffectSerializer())
+ // ProductionIncrease is not a numeric effect, it is here for negative testing purpose
+ .registerTypeAdapter(ProductionIncrease.class, new NumericEffectSerializer())
+ .create();
+ }
+
+ @Test
+ public void serialize_militaryReinforcements_null() {
+ assertEquals("null", gson.toJson(null, MilitaryReinforcements.class));
+ }
+
+ @Test
+ public void serialize_rawPointsIncrease_null() {
+ assertEquals("null", gson.toJson(null, RawPointsIncrease.class));
+ }
+
+ @Test
+ public void serialize_goldIncrease_null() {
+ assertEquals("null", gson.toJson(null, GoldIncrease.class));
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void serialize_failOnUnknownType() {
+ gson.toJson(new ProductionIncrease());
+ }
+
+ @Theory
+ public void serialize_militaryReinforcements(int count) {
+ MilitaryReinforcements reinforcements = new MilitaryReinforcements(count);
+ assertEquals(String.valueOf(count), gson.toJson(reinforcements));
+ }
+
+ @Theory
+ public void serialize_rawPointsIncrease(int count) {
+ RawPointsIncrease points = new RawPointsIncrease(count);
+ assertEquals(String.valueOf(count), gson.toJson(points));
+ }
+
+ @Theory
+ public void serialize_goldIncrease(int count) {
+ GoldIncrease goldIncrease = new GoldIncrease(count);
+ assertEquals(String.valueOf(count), gson.toJson(goldIncrease));
+ }
+
+ @Theory
+ public void deserialize_militaryReinforcements(int count) {
+ MilitaryReinforcements reinforcements = new MilitaryReinforcements(count);
+ assertEquals(reinforcements, gson.fromJson(String.valueOf(count), MilitaryReinforcements.class));
+ }
+
+ @Theory
+ public void deserialize_rawPointsIncrease(int count) {
+ RawPointsIncrease points = new RawPointsIncrease(count);
+ assertEquals(points, gson.fromJson(String.valueOf(count), RawPointsIncrease.class));
+ }
+
+ @Theory
+ public void deserialize_goldIncrease(int count) {
+ GoldIncrease goldIncrease = new GoldIncrease(count);
+ assertEquals(goldIncrease, gson.fromJson(String.valueOf(count), GoldIncrease.class));
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void deserialize_militaryReinforcements_failOnEmptyString() {
+ gson.fromJson("\"\"", MilitaryReinforcements.class);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void deserialize_rawPointsIncrease_failOnEmptyString() {
+ gson.fromJson("\"\"", RawPointsIncrease.class);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void deserialize_goldIncrease_failOnEmptyString() {
+ gson.fromJson("\"\"", GoldIncrease.class);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void deserialize_militaryReinforcements_failOnNonNumericString() {
+ gson.fromJson("\"abc\"", MilitaryReinforcements.class);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void deserialize_rawPointsIncrease_failOnNonNumericString() {
+ gson.fromJson("\"abc\"", RawPointsIncrease.class);
+ }
+
+ @Test(expected = NumberFormatException.class)
+ public void deserialize_goldIncrease_failOnNonNumericString() {
+ gson.fromJson("\"abc\"", GoldIncrease.class);
+ }
+
+ @Test(expected = IllegalArgumentException.class)
+ public void deserialize_failOnUnknownType() {
+ gson.fromJson("\"2\"", ProductionIncrease.class);
+ }
+} \ No newline at end of file
bgstack15