test: Added some tests

This commit is contained in:
Jakub Žitník 2025-03-02 20:52:01 +01:00
parent 30af2b6feb
commit fed35d3a02
Signed by: jzitnik
GPG Key ID: C577A802A6AF4EF3
25 changed files with 194 additions and 5 deletions

View File

@ -21,6 +21,11 @@
<version>1.18.36</version> <version>1.18.36</version>
<scope>provided</scope> <scope>provided</scope>
</dependency> </dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
</dependency>
<dependency> <dependency>

View File

@ -200,14 +200,17 @@ public class SpriteLoader {
SPRITES_MAP.put(SPRITES.ITEM_COAL_ORE, new SimpleSprite("items/coal_ore.ans")); SPRITES_MAP.put(SPRITES.ITEM_COAL_ORE, new SimpleSprite("items/coal_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_IRON_ORE, new SimpleSprite("items/iron_ore.ans")); SPRITES_MAP.put(SPRITES.ITEM_IRON_ORE, new SimpleSprite("items/iron_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_GOLD_ORE, new SimpleSprite("items/gold_ore.ans")); SPRITES_MAP.put(SPRITES.ITEM_GOLD_ORE, new SimpleSprite("items/gold_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_DIAMOND_ORE, new SimpleSprite("items/diamond_ore.ans"));
SPRITES_MAP.put(SPRITES.ITEM_COAL_BLOCK, new SimpleSprite("items/coal_block.ans")); SPRITES_MAP.put(SPRITES.ITEM_COAL_BLOCK, new SimpleSprite("items/coal_block.ans"));
SPRITES_MAP.put(SPRITES.ITEM_IRON_BLOCK, new SimpleSprite("items/iron_block.ans")); SPRITES_MAP.put(SPRITES.ITEM_IRON_BLOCK, new SimpleSprite("items/iron_block.ans"));
SPRITES_MAP.put(SPRITES.ITEM_GOLD_BLOCK, new SimpleSprite("items/gold_block.ans")); SPRITES_MAP.put(SPRITES.ITEM_GOLD_BLOCK, new SimpleSprite("items/gold_block.ans"));
SPRITES_MAP.put(SPRITES.ITEM_DIAMOND_BLOCK, new SimpleSprite("items/diamond_block.ans"));
SPRITES_MAP.put(SPRITES.COAL, new SimpleSprite("items/coal.ans")); SPRITES_MAP.put(SPRITES.COAL, new SimpleSprite("items/coal.ans"));
SPRITES_MAP.put(SPRITES.ITEM_IRON_INGOT, new SimpleSprite("items/iron_ingot.ans")); SPRITES_MAP.put(SPRITES.ITEM_IRON_INGOT, new SimpleSprite("items/iron_ingot.ans"));
SPRITES_MAP.put(SPRITES.ITEM_GOLD_INGOT, new SimpleSprite("items/gold_ingot.ans")); SPRITES_MAP.put(SPRITES.ITEM_GOLD_INGOT, new SimpleSprite("items/gold_ingot.ans"));
SPRITES_MAP.put(SPRITES.DIAMOND, new SimpleSprite("items/diamond.ans"));
// Work Items // Work Items
SPRITES_MAP.put(SPRITES.ITEM_CRAFTING_TABLE, new SimpleSprite("items/crafting_table.ans")); SPRITES_MAP.put(SPRITES.ITEM_CRAFTING_TABLE, new SimpleSprite("items/crafting_table.ans"));

View File

@ -8,6 +8,6 @@ import cz.jzitnik.game.entities.items.ItemType;
@ItemRegistry("coal") @ItemRegistry("coal")
public class CoalItem extends Item { public class CoalItem extends Item {
public CoalItem() { public CoalItem() {
super("coal", "Coal", ItemType.USELESS_ITEM, SpriteLoader.SPRITES.ITEM_COAL_ORE); super("coal", "Coal", ItemType.USELESS_ITEM, SpriteLoader.SPRITES.COAL);
} }
} }

View File

@ -8,6 +8,6 @@ import cz.jzitnik.game.entities.items.ItemType;
@ItemRegistry("steak") @ItemRegistry("steak")
public class SteakItem extends Item { public class SteakItem extends Item {
public SteakItem() { public SteakItem() {
super("steak", "Steak", ItemType.FOOD, SpriteLoader.SPRITES.ITEM_BEEF, 4); super("steak", "Steak", ItemType.FOOD, SpriteLoader.SPRITES.ITEM_STEAK, 4);
} }
} }

View File

@ -35,6 +35,7 @@ public class Generation {
// Spawn player at a valid starting point // Spawn player at a valid starting point
world[terrainHeight[256] - 1][256].add(steveBlock2); world[terrainHeight[256] - 1][256].add(steveBlock2);
world[terrainHeight[256] - 2][256].add(steveBlock); world[terrainHeight[256] - 2][256].add(steveBlock);
world[terrainHeight[256] - 1][256 + 1].add(ItemBlockSupplier.getBlock("water"));
} }
private static void initializeWorld(List<Block>[][] world) { private static void initializeWorld(List<Block>[][] world) {

View File

@ -2,6 +2,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Air extends Sprite { public class Air extends Sprite {
public String getSprite() { public String getSprite() {
StringBuilder sprite = new StringBuilder(); StringBuilder sprite = new StringBuilder();
@ -15,4 +17,9 @@ public class Air extends Sprite {
public String getSprite(Enum e) { public String getSprite(Enum e) {
throw new RuntimeException("Imposible state"); throw new RuntimeException("Imposible state");
} }
@Override
public Optional<Class<Enum>> getStates() {
return Optional.empty();
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Bed extends Sprite { public class Bed extends Sprite {
public enum BedState { public enum BedState {
LEFT, LEFT,
@ -22,4 +24,9 @@ public class Bed extends Sprite {
} }
); );
} }
@Override
public Optional<Class<BedState>> getStates() {
return Optional.of(BedState.class);
}
} }

View File

@ -4,6 +4,7 @@ import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
public class Breaking extends Sprite { public class Breaking extends Sprite {
public enum BreakingState { public enum BreakingState {
@ -28,4 +29,9 @@ public class Breaking extends Sprite {
default -> throw new IllegalStateException("Unexpected value: " + key); default -> throw new IllegalStateException("Unexpected value: " + key);
}))); })));
} }
@Override
public Optional<Class<BreakingState>> getStates() {
return Optional.of(BreakingState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Cow extends Sprite { public class Cow extends Sprite {
public enum CowState{ public enum CowState{
LEFT, LEFT,
@ -26,4 +28,9 @@ public class Cow extends Sprite {
} }
); );
} }
@Override
public Optional<Class<CowState>> getStates() {
return Optional.of(CowState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Furnace extends Sprite { public class Furnace extends Sprite {
public enum FurnaceState { public enum FurnaceState {
OFF, OFF,
@ -22,4 +24,9 @@ public class Furnace extends Sprite {
} }
); );
} }
@Override
public Optional<Class<FurnaceState>> getStates() {
return Optional.of(FurnaceState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Heart extends Sprite { public class Heart extends Sprite {
public enum HeartState { public enum HeartState {
OFF, OFF,
@ -10,7 +12,7 @@ public class Heart extends Sprite {
} }
public String getSprite() { public String getSprite() {
throw new RuntimeException("Idk"); return getSprite(HeartState.OFF);
} }
public String getSprite(Enum e) { public String getSprite(Enum e) {
@ -22,4 +24,9 @@ public class Heart extends Sprite {
} }
); );
} }
@Override
public Optional<Class<HeartState>> getStates() {
return Optional.of(HeartState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Hunger extends Sprite { public class Hunger extends Sprite {
public enum HungerState { public enum HungerState {
OFF, OFF,
@ -10,7 +12,7 @@ public class Hunger extends Sprite {
} }
public String getSprite() { public String getSprite() {
throw new RuntimeException("Idk"); return getSprite(HungerState.OFF);
} }
public String getSprite(Enum e) { public String getSprite(Enum e) {
@ -22,4 +24,9 @@ public class Hunger extends Sprite {
} }
); );
} }
@Override
public Optional<Class<HungerState>> getStates() {
return Optional.of(HungerState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class OakDoor extends Sprite { public class OakDoor extends Sprite {
public enum OakDoorState { public enum OakDoorState {
TOP, TOP,
@ -26,4 +28,9 @@ public class OakDoor extends Sprite {
} }
); );
} }
@Override
public Optional<Class<OakDoorState>> getStates() {
return Optional.of(OakDoorState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Pig extends Sprite { public class Pig extends Sprite {
public enum PigState{ public enum PigState{
LEFT, LEFT,
@ -26,4 +28,9 @@ public class Pig extends Sprite {
} }
); );
} }
@Override
public Optional<Class<PigState>> getStates() {
return Optional.of(PigState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Sheep extends Sprite { public class Sheep extends Sprite {
public enum SheepState { public enum SheepState {
WHITE_LEFT, WHITE_LEFT,
@ -77,4 +79,9 @@ public class Sheep extends Sprite {
} }
); );
} }
@Override
public Optional<Class<SheepState>> getStates() {
return Optional.of(SheepState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class SimpleSprite extends Sprite { public class SimpleSprite extends Sprite {
private final String resource; private final String resource;
@ -17,4 +19,9 @@ public class SimpleSprite extends Sprite {
public String getSprite(Enum key) { public String getSprite(Enum key) {
throw new RuntimeException("Imposible state"); throw new RuntimeException("Imposible state");
} }
@Override
public Optional<Class<Enum>> getStates() {
return Optional.empty();
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Steve extends Sprite { public class Steve extends Sprite {
public enum SteveState{ public enum SteveState{
FIRST, FIRST,
@ -10,7 +12,7 @@ public class Steve extends Sprite {
} }
public String getSprite() { public String getSprite() {
throw new RuntimeException("Error"); return getSprite(SteveState.FIRST);
} }
public String getSprite(Enum e) { public String getSprite(Enum e) {
@ -22,4 +24,9 @@ public class Steve extends Sprite {
} }
); );
} }
@Override
public Optional<Class<SteveState>> getStates() {
return Optional.of(SteveState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Water extends Sprite { public class Water extends Sprite {
public enum WaterState { public enum WaterState {
FIRST, FIRST,
@ -52,4 +54,9 @@ public class Water extends Sprite {
return stringBuilder.toString(); return stringBuilder.toString();
} }
@Override
public Optional<Class<WaterState>> getStates() {
return Optional.of(WaterState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Wool extends Sprite { public class Wool extends Sprite {
public enum WoolState { public enum WoolState {
WHITE, WHITE,
@ -31,4 +33,9 @@ public class Wool extends Sprite {
} }
); );
} }
@Override
public Optional<Class<WoolState>> getStates() {
return Optional.of(WoolState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class WoolItem extends Sprite { public class WoolItem extends Sprite {
public enum WoolItemState { public enum WoolItemState {
WHITE, WHITE,
@ -31,4 +33,9 @@ public class WoolItem extends Sprite {
} }
); );
} }
@Override
public Optional<Class<WoolItemState>> getStates() {
return Optional.of(WoolItemState.class);
}
} }

View File

@ -3,6 +3,8 @@ package cz.jzitnik.game.sprites.ui;
import cz.jzitnik.tui.ResourceLoader; import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Optional;
public class Font extends Sprite { public class Font extends Sprite {
public enum FontState { public enum FontState {
A,B,C,D,E,F,G,H,I,J,K, A,B,C,D,E,F,G,H,I,J,K,
@ -24,4 +26,9 @@ public class Font extends Sprite {
return null; return null;
} }
@Override
public Optional<Class<Enum>> getStates() {
return Optional.empty();
}
} }

View File

@ -4,6 +4,7 @@ import cz.jzitnik.tui.ResourceLoader;
import cz.jzitnik.tui.Sprite; import cz.jzitnik.tui.Sprite;
import java.util.Objects; import java.util.Objects;
import java.util.Optional;
public class Number extends Sprite { public class Number extends Sprite {
public enum NumberState { public enum NumberState {
@ -58,4 +59,9 @@ public class Number extends Sprite {
default -> throw new IllegalStateException("Unexpected value: " + key); default -> throw new IllegalStateException("Unexpected value: " + key);
}))); })));
} }
@Override
public Optional<Class<NumberState>> getStates() {
return Optional.of(NumberState.class);
}
} }

View File

@ -1,6 +1,9 @@
package cz.jzitnik.tui; package cz.jzitnik.tui;
import java.util.Optional;
public abstract class Sprite<E extends Enum<E>> { public abstract class Sprite<E extends Enum<E>> {
public abstract String getSprite(); public abstract String getSprite();
public abstract String getSprite(E key); public abstract String getSprite(E key);
public abstract Optional<Class<Enum>> getStates();
} }

View File

@ -0,0 +1,35 @@
package cz.jzitnik.game;
import cz.jzitnik.tui.Sprite;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.DisplayName;
import static org.junit.jupiter.api.Assertions.*;
public class SpriteLoaderTest {
@Test
@DisplayName("Verify all SPRITES enum values are present in SPRITES_MAP")
void testAllSpritesArePresent() {
for (SpriteLoader.SPRITES spriteEnum : SpriteLoader.SPRITES.values()) {
assertTrue(SpriteLoader.SPRITES_MAP.containsKey(spriteEnum), "Missing sprite: " + spriteEnum);
assertNotNull(SpriteLoader.SPRITES_MAP.get(spriteEnum), "Sprite is null: " + spriteEnum);
}
}
@Test
@DisplayName("Ensure that for each sprite all the resources are present.")
void testAllResourcesArePresent() {
for (SpriteLoader.SPRITES spriteEnum : SpriteLoader.SPRITES_MAP.keySet()) {
Sprite sprite = SpriteLoader.SPRITES_MAP.get(spriteEnum);
assertNotNull(sprite.getSprite(),
"getSprite() couldn't find file for: " + spriteEnum);
if (sprite.getStates().isPresent()) {
for (Enum state : ((Class<Enum>) SpriteLoader.SPRITES_MAP.get(spriteEnum).getStates().get()).getEnumConstants()) {
assertNotNull(SpriteLoader.SPRITES_MAP.get(spriteEnum).getSprite(state),
"getSprite("+state+") couldn't find file for: " + spriteEnum);
}
}
}
}
}

View File

@ -0,0 +1,25 @@
package cz.jzitnik.game.smelting;
import cz.jzitnik.game.entities.items.Item;
import cz.jzitnik.game.entities.items.ItemBlockSupplier;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.function.Executable;
import java.util.function.Supplier;
import static org.junit.jupiter.api.Assertions.*;
public class SmeltingTest {
@Test
@DisplayName("Verity that all items in Smelting are actual items")
void testAllItems() {
for (String item : Smelting.smeltingList.keySet()) {
assertDoesNotThrow(() -> ItemBlockSupplier.getItem(item));
}
for (Supplier<Item> supplier: Smelting.smeltingList.values()) {
assertDoesNotThrow(supplier::get);
}
}
}