From 77142ec6770d47242f974feb9e2105282bae9dc9 Mon Sep 17 00:00:00 2001 From: mperor Date: Mon, 27 Oct 2025 13:20:14 +0100 Subject: [PATCH 1/2] Refactoring Java tests: 1-5 --- .../src/test/java/pl/mperor/lab/java/Java1.java | 8 ++++---- .../src/test/java/pl/mperor/lab/java/Java3.java | 10 +++++----- .../src/test/java/pl/mperor/lab/java/Java4.java | 9 ++++----- .../src/test/java/pl/mperor/lab/java/Java5.java | 2 +- JavaReleases/src/test/resources/{bean => bean.bin} | Bin 5 files changed, 14 insertions(+), 15 deletions(-) rename JavaReleases/src/test/resources/{bean => bean.bin} (100%) diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java1.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java1.java index e682f39..796142c 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java1.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java1.java @@ -55,7 +55,7 @@ public void testJavaBean() throws IOException, ClassNotFoundException { } private void assertJavaBeanSerializationAndDeserialization(JavaBean bean) throws IOException, ClassNotFoundException { - var file = new File("src/test/resources/bean"); + var file = new File("src/test/resources/bean.bin"); try (ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(file))) { out.writeObject(bean); } @@ -107,13 +107,13 @@ public void testRemoteMethodInvocationAkaRMI() throws RemoteException, NotBoundE HelloService stub = (HelloService) registry.lookup("HelloService"); // Call the remote method and verify the result - Assertions.assertEquals("Hello World!", stub.sayHello()); + Assertions.assertEquals("Hello World!", stub.getMessage()); executor.shutdown(); } interface HelloService extends Remote { - String sayHello() throws RemoteException; + String getMessage() throws RemoteException; } static class HelloServiceImpl extends UnicastRemoteObject implements HelloService { @@ -122,7 +122,7 @@ protected HelloServiceImpl() throws RemoteException { } @Override - public String sayHello() throws RemoteException { + public String getMessage() throws RemoteException { return "Hello World!"; } } diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java3.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java3.java index 58ca3df..73e86e2 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java3.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java3.java @@ -27,14 +27,14 @@ public void testJavaNamingAndDirectoryInterfaceAkaJNDILookup() throws NamingExce String bindingName = "hello"; String bindingResult = "Hello World!"; - Context context = new InitialContext(); - context.bind(bindingName, bindingResult); - String lookupResult = (String) context.lookup(bindingName); + Context ctx = new InitialContext(); + ctx.bind(bindingName, bindingResult); + String lookupResult = (String) ctx.lookup(bindingName); Assertions.assertEquals(bindingResult, lookupResult); - context.unbind(bindingName); + ctx.unbind(bindingName); Assertions.assertThrows(NamingException.class, () -> { - context.lookup(bindingName); + ctx.lookup(bindingName); }); } diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java index 8d59ce0..937680e 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java @@ -12,7 +12,6 @@ import java.nio.channels.SocketChannel; import java.nio.file.Files; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.concurrent.CountDownLatch; import java.util.concurrent.Executors; import java.util.logging.Logger; @@ -35,7 +34,7 @@ public void testAssertionKeyWord() { @Test public void testNewInputOutputAkaNIO() throws IOException { - Path path = Paths.get("src", "test", "resources", "nio.txt"); + Path path = Path.of("src", "test", "resources", "nio.txt"); byte[] fileBytes = Files.readAllBytes(path); String content = new String(fileBytes); Assertions.assertEquals("Hello NIO!", content); @@ -44,12 +43,12 @@ public void testNewInputOutputAkaNIO() throws IOException { @Test public void testRegex() { Pattern pattern = Pattern.compile("(.*)", Pattern.DOTALL); - Matcher matcher = pattern.matcher(getTestHtml()); + Matcher matcher = pattern.matcher(createTestHtml()); Assertions.assertTrue(matcher.find()); Assertions.assertEquals("Title", matcher.group(1)); } - private String getTestHtml() { + private String createTestHtml() { return """ @@ -89,6 +88,7 @@ public void testImageIO() throws IOException { BufferedImage image = ImageIO.read(new File("src/test/resources/imageio.png")); Assertions.assertTrue(ImageIO.write(image, "jpg", File.createTempFile("imageio", ".jpg"))); } + @Test public void testServerClientSocketChannel() throws IOException, InterruptedException { int port = 8004; @@ -124,5 +124,4 @@ private void handleConnectedClient(ServerSocket serverSocket) throws IOException } } - } \ No newline at end of file diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java index 3b42320..2fe602f 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java @@ -31,7 +31,7 @@ public void testGenerics() { Box rawBox = new Box(); rawBox.setContent("Hello").setContent(1); Assertions.assertThrows(ClassCastException.class, () -> { - String rawBoxContent = (String) rawBox.getContent(); + String wrongTypeContent = (String) rawBox.getContent(); }); Integer rawBoxContent = (Integer) rawBox.getContent(); Assertions.assertEquals(1, rawBoxContent); diff --git a/JavaReleases/src/test/resources/bean b/JavaReleases/src/test/resources/bean.bin similarity index 100% rename from JavaReleases/src/test/resources/bean rename to JavaReleases/src/test/resources/bean.bin From bc66cbace6ccde408cd97d1f900d62cfa77f5da2 Mon Sep 17 00:00:00 2001 From: mperor Date: Thu, 25 Dec 2025 08:27:06 +0100 Subject: [PATCH 2/2] Update test classes for Java 4-17 - Refactor Java 6 tests: improve dynamic compilation and add assertions for class accessibility - Adjust wait time in Java 5 concurrency test - Correct file path in Java 17 deserialization test - Remove redundant whitespace in Java 4 file read test - Refactor functional interface declaration in Java 8 tests --- .../test/java/pl/mperor/lab/java/Java17.java | 2 +- .../test/java/pl/mperor/lab/java/Java4.java | 1 + .../test/java/pl/mperor/lab/java/Java5.java | 2 +- .../test/java/pl/mperor/lab/java/Java6.java | 29 +++++++++++++++---- .../test/java/pl/mperor/lab/java/Java8.java | 10 +++---- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java17.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java17.java index 9abbcec..b6ded4c 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java17.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java17.java @@ -146,7 +146,7 @@ public void testRmiActivationRemoved() { @Test public void testDeserializationFilters() throws IOException, ClassNotFoundException { - var file = new File("src/test/resources/bean"); + var file = new File("src/test/resources/bean.bin"); var basePackageFilter = ObjectInputFilter.Config.createFilter("java.base/*;!*"); try (ObjectInputStream in = new ObjectInputStream(new FileInputStream(file))) { diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java index 937680e..b4e1d83 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java4.java @@ -37,6 +37,7 @@ public void testNewInputOutputAkaNIO() throws IOException { Path path = Path.of("src", "test", "resources", "nio.txt"); byte[] fileBytes = Files.readAllBytes(path); String content = new String(fileBytes); + Assertions.assertEquals("Hello NIO!", content); } diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java index 2fe602f..b153c11 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java5.java @@ -124,7 +124,7 @@ public void testScheduledExecutor() throws InterruptedException { latch.countDown(); }, 0, 100, TimeUnit.MILLISECONDS); - boolean completed = latch.await(300, TimeUnit.MILLISECONDS); + boolean completed = latch.await(200, TimeUnit.MILLISECONDS); Assertions.assertTrue(completed, "Task did not execute twice in time"); Assertions.assertEquals(2, counter.get()); diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java6.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java6.java index 50d9a03..0fb6d7c 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java6.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java6.java @@ -2,6 +2,7 @@ import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; +import pl.mperor.lab.common.TestUtils; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; @@ -11,6 +12,10 @@ import java.awt.*; import java.io.File; import java.io.IOException; +import java.lang.reflect.InvocationTargetException; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; import java.nio.file.Files; /** @@ -32,12 +37,12 @@ public void testScriptingLanguageSupport() throws ScriptException { } @Test - public void testJavaDynamicCompilation() throws IOException { - File sourceFile = new File("./HelloWorld.java"); + public void testJavaDynamicCompilation() throws IOException, ClassNotFoundException, InvocationTargetException, NoSuchMethodException, InstantiationException, IllegalAccessException { + File sourceFile = new File("HelloWorld.java"); String javaSourceCode = """ public class HelloWorld { - public static void main(String[] args) { - System.out.println("Hello World!"); + public void sayHello() { + System.out.print("Hello World!"); } } """; @@ -45,11 +50,23 @@ public static void main(String[] args) { JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); Assertions.assertNotNull(compiler, "JavaCompiler should not be null"); - int compilationResult = compiler.run(null, null, null, sourceFile.getAbsolutePath()); Assertions.assertEquals(0, compilationResult, "Compilation should succeed with result 0!"); + assertHelloWorldClassAccessible(); + Assertions.assertTrue(sourceFile.delete(), "Source file should be deleted after compilation"); - Assertions.assertTrue(new File("./HelloWorld.class").delete(), "Now compilation result can be deleted!"); + Assertions.assertTrue(new File("HelloWorld.class").delete(), "Now compilation result can be deleted!"); + } + + private void assertHelloWorldClassAccessible() throws MalformedURLException, ClassNotFoundException, NoSuchMethodException, InvocationTargetException, InstantiationException, IllegalAccessException { + URL[] urls = {new File("").toURI().toURL()}; + URLClassLoader loader = new URLClassLoader(urls); + Class clazz = loader.loadClass("HelloWorld"); + Object instance = clazz.getDeclaredConstructor().newInstance(); + var readableOut = TestUtils.setTempSystemOut(); + clazz.getDeclaredMethod("sayHello").invoke(instance); + Assertions.assertEquals(readableOut.all(), "Hello World!"); + TestUtils.resetSystemOut(); } @Test diff --git a/JavaReleases/src/test/java/pl/mperor/lab/java/Java8.java b/JavaReleases/src/test/java/pl/mperor/lab/java/Java8.java index a510df9..2a4d911 100644 --- a/JavaReleases/src/test/java/pl/mperor/lab/java/Java8.java +++ b/JavaReleases/src/test/java/pl/mperor/lab/java/Java8.java @@ -72,6 +72,11 @@ public void testCustomFunctionalInterface() { assertFunctionalInterface(Testable.class); } + @FunctionalInterface + public interface Testable { + void test(); + } + private static void assertFunctionalInterface(Class clazz) { if (!clazz.isInterface()) { Assertions.fail("Clazz is not an interface!"); @@ -86,11 +91,6 @@ private static void assertFunctionalInterface(Class clazz) { "Functional interface should contain exactly one abstract method, but @FunctionalInterface is optional!"); } - @FunctionalInterface - public interface Testable { - void test(); - } - @Test public void testDefaultAndStaticMethodsInInterface() throws NoSuchMethodException { Tester tester = () -> new Testable[]{