From 53a8f49da63254856aef7e72c31252a9f115a9b2 Mon Sep 17 00:00:00 2001 From: jcb <77278746+jc-bellido@users.noreply.github.com> Date: Mon, 14 Aug 2023 14:33:45 +0200 Subject: [PATCH 1/4] [broken] Checking CI / CD --- src/test/java/com/mojang/serialization/samples_00.java | 1 + .../com/mojang/serialization/samples_01_optional_fields.java | 0 2 files changed, 1 insertion(+) create mode 100644 src/test/java/com/mojang/serialization/samples_00.java create mode 100644 src/test/java/com/mojang/serialization/samples_01_optional_fields.java diff --git a/src/test/java/com/mojang/serialization/samples_00.java b/src/test/java/com/mojang/serialization/samples_00.java new file mode 100644 index 00000000..4f04b3c6 --- /dev/null +++ b/src/test/java/com/mojang/serialization/samples_00.java @@ -0,0 +1 @@ +RecordBuilder \ No newline at end of file diff --git a/src/test/java/com/mojang/serialization/samples_01_optional_fields.java b/src/test/java/com/mojang/serialization/samples_01_optional_fields.java new file mode 100644 index 00000000..e69de29b From 5bf87aa76a20bdaa58f71fb43e89c29e94a6ce4d Mon Sep 17 00:00:00 2001 From: jcb <77278746+jc-bellido@users.noreply.github.com> Date: Tue, 15 Aug 2023 09:37:52 +0200 Subject: [PATCH 2/4] [broken] Testing permissions and CI / CD access --- .../java/com/mojang/serialization/intro_00_record_reader.java | 1 + src/test/java/com/mojang/serialization/samples_00.java | 1 - .../com/mojang/serialization/samples_01_optional_fields.java | 0 3 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 src/test/java/com/mojang/serialization/intro_00_record_reader.java delete mode 100644 src/test/java/com/mojang/serialization/samples_00.java delete mode 100644 src/test/java/com/mojang/serialization/samples_01_optional_fields.java diff --git a/src/test/java/com/mojang/serialization/intro_00_record_reader.java b/src/test/java/com/mojang/serialization/intro_00_record_reader.java new file mode 100644 index 00000000..3baedb5d --- /dev/null +++ b/src/test/java/com/mojang/serialization/intro_00_record_reader.java @@ -0,0 +1 @@ +go ka-boom! diff --git a/src/test/java/com/mojang/serialization/samples_00.java b/src/test/java/com/mojang/serialization/samples_00.java deleted file mode 100644 index 4f04b3c6..00000000 --- a/src/test/java/com/mojang/serialization/samples_00.java +++ /dev/null @@ -1 +0,0 @@ -RecordBuilder \ No newline at end of file diff --git a/src/test/java/com/mojang/serialization/samples_01_optional_fields.java b/src/test/java/com/mojang/serialization/samples_01_optional_fields.java deleted file mode 100644 index e69de29b..00000000 From 15212771093910ae67d774227e809052fc1d7f54 Mon Sep 17 00:00:00 2001 From: jcb <77278746+jc-bellido@users.noreply.github.com> Date: Tue, 15 Aug 2023 11:42:59 +0200 Subject: [PATCH 3/4] [broken] Bumped junit4 to junit5 --- build.gradle | 6 +++-- .../IntroCodecsRecordReaderTest.java | 23 +++++++++++++++++++ .../mojang/serialization/RoundtripTest.java | 9 ++++---- .../serialization/intro_00_record_reader.java | 1 - 4 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java delete mode 100644 src/test/java/com/mojang/serialization/intro_00_record_reader.java diff --git a/build.gradle b/build.gradle index a9574cc2..1fbc8761 100644 --- a/build.gradle +++ b/build.gradle @@ -33,8 +33,8 @@ dependencies { implementation 'org.slf4j:slf4j-api:1.8.0-beta4' implementation 'org.apache.commons:commons-lang3:3.12.0' - testImplementation 'junit:junit-dep:4.10' - testImplementation "org.slf4j:slf4j-simple:1.8.0-beta4" + testImplementation 'org.junit.jupiter:junit-jupiter:5.9.2' + testImplementation 'org.hamcrest:hamcrest:2.2' } task sourcesJar(type: Jar) { @@ -67,6 +67,8 @@ artifacts { } test { + useJUnitPlatform() + testLogging { events "failed", "skipped" showStandardStreams = true diff --git a/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java b/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java new file mode 100644 index 00000000..8e4ba4a6 --- /dev/null +++ b/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java @@ -0,0 +1,23 @@ +package com.mojang.serialization; + +// Potential points for comment: +// Introduce here a reference to scodec ? +// Re-iterate on the dependencies between DFU s + Dynamics + Codecs here? + +import org.junit.jupiter.api.Test; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; + +record PlaceholderRecord(String name, int age) {} + +public class IntroCodecsRecordReaderTest { + public IntroCodecsRecordReaderTest() {} + + // Define the Codec around here + + @Test + public void FailOnPurpose() { + assertThat("Works", false, is(true)); + } +} diff --git a/src/test/java/com/mojang/serialization/RoundtripTest.java b/src/test/java/com/mojang/serialization/RoundtripTest.java index b5efa1ae..e06e1a0d 100644 --- a/src/test/java/com/mojang/serialization/RoundtripTest.java +++ b/src/test/java/com/mojang/serialization/RoundtripTest.java @@ -2,7 +2,7 @@ import com.mojang.datafixers.util.Pair; import com.mojang.serialization.codecs.RecordCodecBuilder; -import org.junit.Test; +import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.List; @@ -13,7 +13,8 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; -import static org.junit.Assert.assertEquals; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; public class RoundtripTest { // Constructors, equals and hashcode are auto-generated @@ -249,7 +250,7 @@ private void testWriteRead(final DynamicOps ops) { final DataResult encoded = TestData.CODEC.encodeStart(ops, data); final DataResult decoded = encoded.flatMap(r -> TestData.CODEC.parse(ops, r)); - assertEquals("read(write(x)) == x", DataResult.success(data), decoded); + assertThat("read(write(x)) == x", DataResult.success(data), equalTo(decoded)); } private void testReadWrite(final DynamicOps ops) { @@ -259,7 +260,7 @@ private void testReadWrite(final DynamicOps ops) { final DataResult decoded = encoded.flatMap(r -> TestData.CODEC.parse(ops, r)); final DataResult reEncoded = decoded.flatMap(r -> TestData.CODEC.encodeStart(ops, r)); - assertEquals("write(read(x)) == x", encoded, reEncoded); + assertThat("write(read(x)) == x", encoded, equalTo(reEncoded)); } @Test diff --git a/src/test/java/com/mojang/serialization/intro_00_record_reader.java b/src/test/java/com/mojang/serialization/intro_00_record_reader.java deleted file mode 100644 index 3baedb5d..00000000 --- a/src/test/java/com/mojang/serialization/intro_00_record_reader.java +++ /dev/null @@ -1 +0,0 @@ -go ka-boom! From 74501f4dc4e3838db7bf9cb286e3d975e60713b1 Mon Sep 17 00:00:00 2001 From: jcb <77278746+jc-bellido@users.noreply.github.com> Date: Tue, 15 Aug 2023 15:33:21 +0200 Subject: [PATCH 4/4] Sketch of a potential reference for a very simple record reader --- .../IntroCodecsRecordReaderTest.java | 47 +++++++++++++++---- .../resources/IntroCodecsRecordReader_00.json | 4 ++ 2 files changed, 43 insertions(+), 8 deletions(-) create mode 100644 src/test/resources/IntroCodecsRecordReader_00.json diff --git a/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java b/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java index 8e4ba4a6..9395e471 100644 --- a/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java +++ b/src/test/java/com/mojang/serialization/IntroCodecsRecordReaderTest.java @@ -1,23 +1,54 @@ package com.mojang.serialization; -// Potential points for comment: -// Introduce here a reference to scodec ? -// Re-iterate on the dependencies between DFU s + Dynamics + Codecs here? - +import com.google.gson.internal.Streams; +import com.google.gson.stream.JsonReader; +import com.mojang.serialization.codecs.RecordCodecBuilder; import org.junit.jupiter.api.Test; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.Objects; + import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.is; -record PlaceholderRecord(String name, int age) {} +// Suggested reading material +// http://scodec.org + +record PersonRecord(String name, int age) {} public class IntroCodecsRecordReaderTest { public IntroCodecsRecordReaderTest() {} - // Define the Codec around here + static final Codec CODEC = RecordCodecBuilder.create(i -> i.group( + Codec.STRING.fieldOf("name").forGetter(PersonRecord::name), + Codec.INT.fieldOf("age").forGetter(PersonRecord::age) + ).apply(i, PersonRecord::new)); + + private Path GetResourcePath(String resource_name) { + final ClassLoader classLoader = getClass().getClassLoader(); + return Path.of(Objects.requireNonNull(classLoader.getResource(resource_name)).getPath()); + } + + @Test + public void CanDeserializeAPersonRecord() throws IOException { + final Path path = GetResourcePath("IntroCodecsRecordReader_00.json"); + try (final JsonReader reader = new JsonReader(Files.newBufferedReader(path, StandardCharsets.UTF_8))) { + reader.setLenient(true); + final DataResult dr_pr = CODEC.parse(JsonOps.INSTANCE, Streams.parse(reader)); + assertThat("We were expecting a PersonRecord here", dr_pr.result().isPresent()); + + final PersonRecord pr = dr_pr.result().get(); + assertThat("Person age should be 77", pr.age(), is(77)); + } + } @Test - public void FailOnPurpose() { - assertThat("Works", false, is(true)); + public void CanSerializeAPersonRecord() { + final PersonRecord pr = new PersonRecord("name person", 66); + final var enc_pr = CODEC.encodeStart(JsonOps.INSTANCE, pr); + assertThat("Should be possible to encode a person record", enc_pr.result().isPresent()); } } diff --git a/src/test/resources/IntroCodecsRecordReader_00.json b/src/test/resources/IntroCodecsRecordReader_00.json new file mode 100644 index 00000000..9516cc2a --- /dev/null +++ b/src/test/resources/IntroCodecsRecordReader_00.json @@ -0,0 +1,4 @@ +{ + "name" : "person name", + "age": 77 +}