From 67773cdc3cec68d347b3c01dd1897363ca04d4ac Mon Sep 17 00:00:00 2001 From: mperor Date: Thu, 17 Oct 2024 15:25:10 +0200 Subject: [PATCH] Add Java 15 test class ... - Sealed Classes --- README.md | 1 + .../pl/mperor/lab/java/sealed/AlsoFinal.java | 4 +++ .../pl/mperor/lab/java/sealed/AlsoSealed.java | 8 +++++ .../java/pl/mperor/lab/java/sealed/Final.java | 8 +++++ .../pl/mperor/lab/java/sealed/NonSealed.java | 8 +++++ .../pl/mperor/lab/java/sealed/Sealed.java | 9 +++++ src/test/java/pl/mperor/lab/java/Java15.java | 33 +++++++++++++++++++ 7 files changed, 71 insertions(+) create mode 100644 src/main/java/pl/mperor/lab/java/sealed/AlsoFinal.java create mode 100644 src/main/java/pl/mperor/lab/java/sealed/AlsoSealed.java create mode 100644 src/main/java/pl/mperor/lab/java/sealed/Final.java create mode 100644 src/main/java/pl/mperor/lab/java/sealed/NonSealed.java create mode 100644 src/main/java/pl/mperor/lab/java/sealed/Sealed.java create mode 100644 src/test/java/pl/mperor/lab/java/Java15.java diff --git a/README.md b/README.md index f18851e..50c04f1 100644 --- a/README.md +++ b/README.md @@ -26,5 +26,6 @@ This project includes unit tests for key functionalities introduced in each Java - [Java 12](src/test/java/pl/mperor/lab/java/Java12.java) - [Java 13](src/test/java/pl/mperor/lab/java/Java13.java) - [Java 14](src/test/java/pl/mperor/lab/java/Java14.java) +- [Java 15](src/test/java/pl/mperor/lab/java/Java15.java) For detailed examples and tests of each feature, please refer to the individual source files linked above. \ No newline at end of file diff --git a/src/main/java/pl/mperor/lab/java/sealed/AlsoFinal.java b/src/main/java/pl/mperor/lab/java/sealed/AlsoFinal.java new file mode 100644 index 0000000..1c67216 --- /dev/null +++ b/src/main/java/pl/mperor/lab/java/sealed/AlsoFinal.java @@ -0,0 +1,4 @@ +package pl.mperor.lab.java.sealed; + +public final class AlsoFinal extends AlsoSealed { +} diff --git a/src/main/java/pl/mperor/lab/java/sealed/AlsoSealed.java b/src/main/java/pl/mperor/lab/java/sealed/AlsoSealed.java new file mode 100644 index 0000000..e2d3d81 --- /dev/null +++ b/src/main/java/pl/mperor/lab/java/sealed/AlsoSealed.java @@ -0,0 +1,8 @@ +package pl.mperor.lab.java.sealed; + +public sealed class AlsoSealed implements Sealed permits AlsoFinal { + + public String alsoSealedMethod() { + return "sealed"; + } +} diff --git a/src/main/java/pl/mperor/lab/java/sealed/Final.java b/src/main/java/pl/mperor/lab/java/sealed/Final.java new file mode 100644 index 0000000..2373b35 --- /dev/null +++ b/src/main/java/pl/mperor/lab/java/sealed/Final.java @@ -0,0 +1,8 @@ +package pl.mperor.lab.java.sealed; + +public final class Final implements Sealed { + + public String finalMethod() { + return "final"; + } +} diff --git a/src/main/java/pl/mperor/lab/java/sealed/NonSealed.java b/src/main/java/pl/mperor/lab/java/sealed/NonSealed.java new file mode 100644 index 0000000..6432614 --- /dev/null +++ b/src/main/java/pl/mperor/lab/java/sealed/NonSealed.java @@ -0,0 +1,8 @@ +package pl.mperor.lab.java.sealed; + +public non-sealed class NonSealed implements Sealed { + + public String nonSealedMethod() { + return "non-sealed"; + } +} diff --git a/src/main/java/pl/mperor/lab/java/sealed/Sealed.java b/src/main/java/pl/mperor/lab/java/sealed/Sealed.java new file mode 100644 index 0000000..9adac06 --- /dev/null +++ b/src/main/java/pl/mperor/lab/java/sealed/Sealed.java @@ -0,0 +1,9 @@ +package pl.mperor.lab.java.sealed; + +public sealed interface Sealed permits AlsoSealed, NonSealed, Final { + + default String sealedMethod() { + return "sealed"; + } + +} diff --git a/src/test/java/pl/mperor/lab/java/Java15.java b/src/test/java/pl/mperor/lab/java/Java15.java new file mode 100644 index 0000000..e1514f5 --- /dev/null +++ b/src/test/java/pl/mperor/lab/java/Java15.java @@ -0,0 +1,33 @@ +package pl.mperor.lab.java; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; +import pl.mperor.lab.java.sealed.*; + +/** + * Java 15 (September 2020) + */ +public class Java15 { + + @Test + public void testSealedClasses() { + Assertions.assertTrue(Sealed.class.isSealed()); + Assertions.assertFalse(NonSealed.class.isSealed()); + Assertions.assertFalse(Final.class.isSealed()); + Assertions.assertTrue(AlsoSealed.class.isSealed()); + Assertions.assertFalse(AlsoFinal.class.isSealed()); + + Assertions.assertEquals("final", switchSealed(new Final())); + Assertions.assertEquals("non-sealed", switchSealed(new NonSealed())); + Assertions.assertEquals("sealed", switchSealed(new AlsoSealed())); + } + + private String switchSealed(Sealed sealed) { + return switch (sealed) { + case AlsoSealed a -> a.alsoSealedMethod(); + case Final f -> f.finalMethod(); + case NonSealed ns -> ns.nonSealedMethod(); + }; + } + +} \ No newline at end of file