From 69972bd0283cd36e933e62211da7fb075ede4edc Mon Sep 17 00:00:00 2001 From: Scribble Date: Sun, 31 Mar 2024 16:59:14 +0200 Subject: [PATCH] [PlaybackController] Switch from Properties to Hashmap, add tests --- .../playback/metadata/PlaybackMetadata.java | 29 +++-- .../metadata/PlaybackMetadataTest.java | 105 +++++++++++++++++- 2 files changed, 125 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/minecrafttas/tasmod/playback/metadata/PlaybackMetadata.java b/src/main/java/com/minecrafttas/tasmod/playback/metadata/PlaybackMetadata.java index 47a76bbe..1b09f09e 100644 --- a/src/main/java/com/minecrafttas/tasmod/playback/metadata/PlaybackMetadata.java +++ b/src/main/java/com/minecrafttas/tasmod/playback/metadata/PlaybackMetadata.java @@ -1,8 +1,13 @@ package com.minecrafttas.tasmod.playback.metadata; import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.LinkedHashMap; import java.util.List; import java.util.Properties; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -15,10 +20,10 @@ public class PlaybackMetadata { * Debug extension name */ private String extensionName; - private Properties metadata; + private LinkedHashMap metadata; public PlaybackMetadata() { - this.metadata = new Properties(); + this.metadata = new LinkedHashMap(); } public PlaybackMetadata(String extensionName) { @@ -30,24 +35,23 @@ public void setValue(String key, String value) { if (key.contains("=")) { throw new IllegalArgumentException(String.format("%sKeyname %s can't contain =", extensionName != null ? extensionName + ": " : "", key)); } - metadata.setProperty(key, value); + metadata.put(key, value); } public String getValue(String key) { - return metadata.getProperty(key); + return metadata.get(key); } @Override public String toString() { String out = ""; - for (Object keyObj : metadata.keySet()) { - String key = (String) keyObj; + for (String key : metadata.keySet()) { String value = getValue(key); out += (String.format("%s=%s\n", key, value)); } return out; } - + public List toStringList() { List out = new ArrayList<>(); for (Object keyObj : metadata.keySet()) { @@ -62,10 +66,19 @@ public String getExtensionName() { return extensionName; } - public Properties getMetadata() { + public HashMap getMetadata() { return metadata; } + @Override + public boolean equals(Object obj) { + if(obj instanceof PlaybackMetadata) { + PlaybackMetadata other = (PlaybackMetadata) obj; + return other.metadata.equals(metadata) && other.extensionName.equals(extensionName); + } + return super.equals(obj); + } + public static PlaybackMetadata fromStringList(String extensionName, List list) { return fromStringList(list); } diff --git a/src/test/java/tasmod/playback/metadata/PlaybackMetadataTest.java b/src/test/java/tasmod/playback/metadata/PlaybackMetadataTest.java index 28e2dae5..beb6f124 100644 --- a/src/test/java/tasmod/playback/metadata/PlaybackMetadataTest.java +++ b/src/test/java/tasmod/playback/metadata/PlaybackMetadataTest.java @@ -1,10 +1,13 @@ package tasmod.playback.metadata; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertIterableEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; -import java.util.Properties; +import java.util.ArrayList; +import java.util.List; import org.junit.jupiter.api.Test; @@ -36,5 +39,105 @@ void testSettingAndReading() { assertEquals("Test", actual); } + @Test + void testToString() { + PlaybackMetadata metadata = new PlaybackMetadata("Test"); + metadata.setValue("1", "One"); + metadata.setValue("2", "Two"); + metadata.setValue("3", "Three"); + metadata.setValue("4", "Four"); + + String actual = metadata.toString(); + + String expected = "1=One\n" + + "2=Two\n" + + "3=Three\n" + + "4=Four\n"; + + assertEquals(expected, actual); + } + + @Test + void testToStringList() { + PlaybackMetadata metadata = new PlaybackMetadata("Test"); + metadata.setValue("1", "One"); + metadata.setValue("2", "Two"); + metadata.setValue("3", "Three"); + metadata.setValue("4", "Four"); + + List actual = metadata.toStringList(); + + List expected = new ArrayList<>(); + expected.add("1=One\n"); + expected.add("2=Two\n"); + expected.add("3=Three\n"); + expected.add("4=Four\n"); + + assertIterableEquals(expected, actual); + } + + @Test + void testEquals() { + PlaybackMetadata metadata = new PlaybackMetadata("Test"); + metadata.setValue("1", "One"); + metadata.setValue("2", "Two"); + metadata.setValue("3", "Three"); + metadata.setValue("4", "Four"); + + PlaybackMetadata metadata2 = new PlaybackMetadata("Test"); + metadata2.setValue("1", "One"); + metadata2.setValue("2", "Two"); + metadata2.setValue("3", "Three"); + metadata2.setValue("4", "Four"); + + assertEquals(metadata, metadata2); + } + @Test + void testFailedEquals() { + //Key difference + PlaybackMetadata metadata = new PlaybackMetadata("Test"); + metadata.setValue("2", "One"); + metadata.setValue("2", "Two"); + metadata.setValue("3", "Three"); + metadata.setValue("4", "Four"); + + PlaybackMetadata metadata2 = new PlaybackMetadata("Test"); + metadata2.setValue("1", "One"); + metadata2.setValue("2", "Two"); + metadata2.setValue("3", "Three"); + metadata2.setValue("4", "Four"); + + assertNotEquals(metadata, metadata2); + + // Value difference + metadata = new PlaybackMetadata("Test"); + metadata.setValue("1", "On"); + metadata.setValue("2", "Two"); + metadata.setValue("3", "Three"); + metadata.setValue("4", "Four"); + + metadata2 = new PlaybackMetadata("Test"); + metadata2.setValue("1", "One"); + metadata2.setValue("2", "Two"); + metadata2.setValue("3", "Three"); + metadata2.setValue("4", "Four"); + + assertNotEquals(metadata, metadata2); + + // Name difference + metadata = new PlaybackMetadata("Tes"); + metadata.setValue("1", "One"); + metadata.setValue("2", "Two"); + metadata.setValue("3", "Three"); + metadata.setValue("4", "Four"); + + metadata2 = new PlaybackMetadata("Test"); + metadata2.setValue("1", "One"); + metadata2.setValue("2", "Two"); + metadata2.setValue("3", "Three"); + metadata2.setValue("4", "Four"); + + assertNotEquals(metadata, metadata2); + } }