From 428510265b7f4c22c8f9cd6f71d2ae195a68bf78 Mon Sep 17 00:00:00 2001 From: mperor Date: Thu, 22 Oct 2026 22:58:07 +0200 Subject: [PATCH] Document how to run and read the project, add contents to FirstSteps & CleanCode and link patterns to their tests --- CleanCode/README.md | 13 +++++++++- DesignPatterns/README.md | 48 +++++++++++++++++++------------------ FirstSteps/README.md | 37 +++++++++++++++++++++++++++- JavaReleases/README.md | 52 ++++++++++++++++++++-------------------- README.md | 26 ++++++++++++++++++-- 5 files changed, 123 insertions(+), 53 deletions(-) diff --git a/CleanCode/README.md b/CleanCode/README.md index 54e68f2..8346963 100644 --- a/CleanCode/README.md +++ b/CleanCode/README.md @@ -14,4 +14,15 @@ This project contains practical examples and best practices inspired by the principles of **Clean Code**. -[Check it out ๐Ÿ”](src/main/java/pl/mperor/lab/java/Dummy.java) \ No newline at end of file +## Contents ๐Ÿ“š + +### Domain-Driven Design (DDD) ๐Ÿ›๏ธ + +- [Value Object](src/test/java/pl/mperor/lab/java/clean/code/ddd/value/object/ValueObjectTest.java) +- [Command vs Event](src/test/java/pl/mperor/lab/java/clean/code/ddd/CommandVsEventTest.java) + +### GRASP ๐Ÿคฒ + +- [Information Expert](src/test/java/pl/mperor/lab/java/clean/code/grasp/InformationExpertTest.java) + +[Check it out ๐Ÿ”](src/test/java/pl/mperor/lab/java/clean/code) diff --git a/DesignPatterns/README.md b/DesignPatterns/README.md index 04af9d5..861e1eb 100644 --- a/DesignPatterns/README.md +++ b/DesignPatterns/README.md @@ -5,36 +5,38 @@ This project explores various design patterns and their implementations in modern Java. It aims to provide developers with practical examples and best practices for using design patterns to create robust and maintainable code. +Links below lead to the tests showing each pattern in action; the pattern implementations live in the same package under `src/main`. + ## Design Pattern Catalog ๐Ÿ“š ### Behavioral Design Patterns ๐Ÿ’ช -- [Chain of Responsibility](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility) ๐Ÿ”— -- [Command](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/command) ๐Ÿ“ -- [Execute Around Method (EAM)](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/eam) โญ• -- [Interpreter](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter) ๐Ÿ“ฐ -- [Iterator](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/iterator) ๐Ÿ”„ -- [Mediator](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/mediator) ๐Ÿ—ฃ๏ธ -- [Memento](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/memento) ๐Ÿ’พ -- [Observer](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/observer) ๐Ÿ‘€ -- [State](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/state) ๐Ÿ“œ -- [Strategy](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/strategy) ๐ŸŽฏ -- [Template Method](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/template/method) ๐Ÿ“‹ -- [Visitor](src/main/java/pl/mperor/lab/java/design/pattern/behavioral/visitor) ๐Ÿงณ +- [Chain of Responsibility](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/chain/of/responsibility) ๐Ÿ”— +- [Command](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/command) ๐Ÿ“ +- [Execute Around Method (EAM)](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/eam) โญ• +- [Interpreter](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/interpreter) ๐Ÿ“ฐ +- [Iterator](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/iterator) ๐Ÿ”„ +- [Mediator](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/mediator) ๐Ÿ—ฃ๏ธ +- [Memento](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/memento) ๐Ÿ’พ +- [Observer](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/observer) ๐Ÿ‘€ +- [State](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/state) ๐Ÿ“œ +- [Strategy](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/strategy) ๐ŸŽฏ +- [Template Method](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/template/method) ๐Ÿ“‹ +- [Visitor](src/test/java/pl/mperor/lab/java/design/pattern/behavioral/visitor) ๐Ÿงณ ### Creational Design Patterns ๐Ÿญ -- [Factory](src/main/java/pl/mperor/lab/java/design/pattern/creational/factory) ๐Ÿญ -- [Builder](src/main/java/pl/mperor/lab/java/design/pattern/creational/builder) ๐Ÿ—๏ธ -- [Prototype](src/main/java/pl/mperor/lab/java/design/pattern/creational/prototype) ๐Ÿงฌ -- [Singleton](src/main/java/pl/mperor/lab/java/design/pattern/creational/singleton) 1๏ธโƒฃ +- [Factory](src/test/java/pl/mperor/lab/java/design/pattern/creational/factory) ๐Ÿญ +- [Builder](src/test/java/pl/mperor/lab/java/design/pattern/creational/builder) ๐Ÿ—๏ธ +- [Prototype](src/test/java/pl/mperor/lab/java/design/pattern/creational/prototype) ๐Ÿงฌ +- [Singleton](src/test/java/pl/mperor/lab/java/design/pattern/creational/singleton) 1๏ธโƒฃ ### Structural Design Patterns ๐ŸŽ -- [Adapter](src/main/java/pl/mperor/lab/java/design/pattern/structural/adapter) ๐Ÿ”Œ -- [Bridge](src/main/java/pl/mperor/lab/java/design/pattern/structural/bridge) ๐ŸŒ‰ -- [Composite](src/main/java/pl/mperor/lab/java/design/pattern/structural/composite) ๐ŸŒฟ -- [Decorator](src/main/java/pl/mperor/lab/java/design/pattern/structural/decorator) ๐ŸŽจ -- [Facade](src/main/java/pl/mperor/lab/java/design/pattern/structural/facade) ๐Ÿข -- [Flyweight](src/main/java/pl/mperor/lab/java/design/pattern/structural/flyweight) ๐Ÿชถ -- [Proxy](src/main/java/pl/mperor/lab/java/design/pattern/structural/proxy) ๐Ÿ›ก๏ธ +- [Adapter](src/test/java/pl/mperor/lab/java/design/pattern/structural/adapter) ๐Ÿ”Œ +- [Bridge](src/test/java/pl/mperor/lab/java/design/pattern/structural/bridge) ๐ŸŒ‰ +- [Composite](src/test/java/pl/mperor/lab/java/design/pattern/structural/composite) ๐ŸŒฟ +- [Decorator](src/test/java/pl/mperor/lab/java/design/pattern/structural/decorator) ๐ŸŽจ +- [Facade](src/test/java/pl/mperor/lab/java/design/pattern/structural/facade) ๐Ÿข +- [Flyweight](src/test/java/pl/mperor/lab/java/design/pattern/structural/flyweight) ๐Ÿชถ +- [Proxy](src/test/java/pl/mperor/lab/java/design/pattern/structural/proxy) ๐Ÿ›ก๏ธ diff --git a/FirstSteps/README.md b/FirstSteps/README.md index 999e4d1..5766a60 100644 --- a/FirstSteps/README.md +++ b/FirstSteps/README.md @@ -4,4 +4,39 @@ **FirstSteps** is a project that serves as a course for this language, attempting to describe it exclusively through examples of source code. -[Check it out ๐Ÿ”](src/main/java/pl/mperor/lab/java/Dummy.java) \ No newline at end of file +## Contents ๐Ÿ“š + +### Fundamentals ๐ŸŒฑ + +- [Java Fundamentals](src/test/java/pl/mperor/lab/java/JavaFundamentalsTest.java) +- [Console Support](src/test/java/pl/mperor/lab/java/ConsoleSupportTest.java) + +### Data Types ๐Ÿ”ข + +- [Primitive Types](src/test/java/pl/mperor/lab/java/data/type/PrimitiveTypesTest.java) +- [Primitive Types Conversion](src/test/java/pl/mperor/lab/java/data/type/PrimitiveTypesConversionTest.java) +- [Number Systems](src/test/java/pl/mperor/lab/java/data/type/NumberSystemsTest.java) +- [Reference Types](src/test/java/pl/mperor/lab/java/data/type/ReferenceTypesTest.java) +- [Strings](src/test/java/pl/mperor/lab/java/data/type/StringTest.java) +- [Arrays](src/test/java/pl/mperor/lab/java/data/type/ArraysTest.java) + +### Data Operations โž• + +- [Basic Arithmetic](src/test/java/pl/mperor/lab/java/data/operation/BasicArithmeticTest.java) +- [Operators](src/test/java/pl/mperor/lab/java/data/operation/OperatorsTest.java) +- [Expression Types](src/test/java/pl/mperor/lab/java/data/operation/ExpressionTypeTest.java) +- [Primitive vs Reference Types Comparison](src/test/java/pl/mperor/lab/java/data/operation/PrimitiveAndReferenceTypesComparisonTest.java) + +### Statements ๐Ÿ”€ + +- [Control Statements](src/test/java/pl/mperor/lab/java/statement/ControlStatementTest.java) +- [Iteration Statements](src/test/java/pl/mperor/lab/java/statement/IterationStatementTest.java) + +### Language Elements ๐Ÿงฑ + +- [Methods](src/test/java/pl/mperor/lab/java/lang/element/MethodTest.java) +- [Enums](src/test/java/pl/mperor/lab/java/lang/element/EnumTest.java) +- [Packages](src/test/java/pl/mperor/lab/java/lang/element/PackageTest.java) +- [Optional](src/test/java/pl/mperor/lab/java/lang/element/OptionalTest.java) + +[Check it out ๐Ÿ”](src/test/java/pl/mperor/lab/java) diff --git a/JavaReleases/README.md b/JavaReleases/README.md index f748b7b..0f76ef4 100644 --- a/JavaReleases/README.md +++ b/JavaReleases/README.md @@ -4,32 +4,32 @@ This project includes unit tests for key functionalities introduced in each Java version. -- [Java 1.0 (Java 0)](src/test/java/pl/mperor/lab/java/Java0.java) -- [Java 1.1 (Java 1โ„ข)](src/test/java/pl/mperor/lab/java/Java1.java) -- [Java 1.2 (Java 2โ„ข)](src/test/java/pl/mperor/lab/java/Java2.java) -- [Java 1.3 (Java 3โ„ข)](src/test/java/pl/mperor/lab/java/Java3.java) -- [Java 1.4 (Java 4โ„ข)](src/test/java/pl/mperor/lab/java/Java4.java) -- [Java 1.5 (Java 5โ„ข)](src/test/java/pl/mperor/lab/java/Java5.java) -- [Java 1.6 (Java 6โ„ข)](src/test/java/pl/mperor/lab/java/Java6.java) -- [Java 1.7 (Java 7โ„ข)](src/test/java/pl/mperor/lab/java/Java7.java) -- [Java 1.8 (Java 8โ„ข)](src/test/java/pl/mperor/lab/java/Java8.java) -- [Java 9โ„ข](src/test/java/pl/mperor/lab/java/Java9.java) -- [Java 10โ„ข](src/test/java/pl/mperor/lab/java/Java10.java) -- [Java 11โ„ข](src/test/java/pl/mperor/lab/java/Java11.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) -- [Java 16โ„ข](src/test/java/pl/mperor/lab/java/Java16.java) -- [Java 17โ„ข](src/test/java/pl/mperor/lab/java/Java17.java) -- [Java 18โ„ข](src/test/java/pl/mperor/lab/java/Java18.java) -- [Java 19โ„ข](src/test/java/pl/mperor/lab/java/Java19.java) -- [Java 20โ„ข](src/test/java/pl/mperor/lab/java/Java20.java) -- [Java 21โ„ข](src/test/java/pl/mperor/lab/java/Java21.java) -- [Java 22โ„ข](src/test/java/pl/mperor/lab/java/Java22.java) -- [Java 23โ„ข](src/test/java/pl/mperor/lab/java/Java23.java) -- [Java 24โ„ข](src/test/java/pl/mperor/lab/java/Java24.java) -- [Java 25โ„ข](src/test/java/pl/mperor/lab/java/Java25.java) +- [Java 1.0 (Java 0)](src/test/java/pl/mperor/lab/java/Java0.java) โ€” classes & interfaces, exceptions, threads, legacy collections, AWT +- [Java 1.1 (Java 1โ„ข)](src/test/java/pl/mperor/lab/java/Java1.java) โ€” inner classes, JDBC, reflection, serialization, `java.text` i18n, `BigDecimal` +- [Java 1.2 (Java 2โ„ข)](src/test/java/pl/mperor/lab/java/Java2.java) โ€” Collections Framework, Swing +- [Java 1.3 (Java 3โ„ข)](src/test/java/pl/mperor/lab/java/Java3.java) โ€” JNDI, Java Sound, `Timer` +- [Java 1.4 (Java 4โ„ข)](src/test/java/pl/mperor/lab/java/Java4.java) โ€” `assert`, NIO, regex, exception chaining, logging, ImageIO +- [Java 1.5 (Java 5โ„ข)](src/test/java/pl/mperor/lab/java/Java5.java) โ€” generics, for-each, autoboxing, varargs, enums, annotations, `java.util.concurrent` +- [Java 1.6 (Java 6โ„ข)](src/test/java/pl/mperor/lab/java/Java6.java) โ€” scripting engines, Compiler API, system tray +- [Java 1.7 (Java 7โ„ข)](src/test/java/pl/mperor/lab/java/Java7.java) โ€” try-with-resources, multi-catch, diamond, switch on strings, NIO.2, Fork/Join +- [Java 1.8 (Java 8โ„ข)](src/test/java/pl/mperor/lab/java/Java8.java) โ€” lambdas, functional interfaces, streams, `Optional`, `java.time` +- [Java 9โ„ข](src/test/java/pl/mperor/lab/java/Java9.java) โ€” `List.of`/`Map.of`, private interface methods, Process API, JShell +- [Java 10โ„ข](src/test/java/pl/mperor/lab/java/Java10.java) โ€” `var` +- [Java 11โ„ข](src/test/java/pl/mperor/lab/java/Java11.java) โ€” HTTP Client, single-file source launch, `var` in lambdas +- [Java 12โ„ข](src/test/java/pl/mperor/lab/java/Java12.java) โ€” JVM Constants API, switch expressions (preview) +- [Java 13โ„ข](src/test/java/pl/mperor/lab/java/Java13.java) โ€” dynamic CDS archives, text blocks (preview) +- [Java 14โ„ข](src/test/java/pl/mperor/lab/java/Java14.java) โ€” switch expressions, helpful NullPointerExceptions, records (preview) +- [Java 15โ„ข](src/test/java/pl/mperor/lab/java/Java15.java) โ€” text blocks, hidden classes, ZGC & Shenandoah +- [Java 16โ„ข](src/test/java/pl/mperor/lab/java/Java16.java) โ€” records, pattern matching for `instanceof`, `jpackage` +- [Java 17โ„ข](src/test/java/pl/mperor/lab/java/Java17.java) โ€” sealed classes, strong encapsulation of JDK internals, new PRNGs +- [Java 18โ„ข](src/test/java/pl/mperor/lab/java/Java18.java) โ€” UTF-8 by default, Simple Web Server, code snippets in Javadoc +- [Java 19โ„ข](src/test/java/pl/mperor/lab/java/Java19.java) โ€” virtual threads & record patterns (preview) +- [Java 20โ„ข](src/test/java/pl/mperor/lab/java/Java20.java) โ€” scoped values (incubator), second previews +- [Java 21โ„ข](src/test/java/pl/mperor/lab/java/Java21.java) โ€” virtual threads, sequenced collections, record patterns, pattern matching for switch +- [Java 22โ„ข](src/test/java/pl/mperor/lab/java/Java22.java) โ€” Foreign Function & Memory API, unnamed variables & patterns +- [Java 23โ„ข](src/test/java/pl/mperor/lab/java/Java23.java) โ€” Markdown documentation comments +- [Java 24โ„ข](src/test/java/pl/mperor/lab/java/Java24.java) โ€” Stream Gatherers, Class-File API, virtual threads without pinning +- [Java 25โ„ข](src/test/java/pl/mperor/lab/java/Java25.java) โ€” scoped values, module imports, compact source files, flexible constructor bodies For detailed examples and tests of each feature, please refer to the individual source files linked above. diff --git a/README.md b/README.md index ffd9b0c..f85ed21 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # JavaLab ๐Ÿงช [![Java CI with Gradle](https://github.com/mperor/JavaLab/actions/workflows/gradle.yml/badge.svg)](https://github.com/mperor/JavaLab/actions/workflows/gradle.yml) -[![Test Results](https://gist.githubusercontent.com/mperor/710a27220e46b738c4a2ccb888676388/raw/badge.svg)](JavaReleases/src/test/java/pl/mperor/lab/java) +[![Test Results](https://gist.githubusercontent.com/mperor/710a27220e46b738c4a2ccb888676388/raw/badge.svg)](https://github.com/mperor/JavaLab/actions/workflows/gradle.yml) ## Description ๐Ÿ“„ **JavaLab** serves as an experimental playground and knowledge base for the Java programming language. @@ -13,4 +13,26 @@ Each test aims to provide clear examples and answers to common (and not-so-commo - **[JavaReleases ๐Ÿ“…](JavaReleases/README.md): Key features by version** - **[FirstSteps ๐Ÿ‘ฃ](FirstSteps/README.md): Java Basics** - **[DesignPatterns ๐Ÿงฉ](DesignPatterns/README.md): Design Patterns in Modern Java** -- **[CleanCode ๐Ÿงผ](CleanCode/README.md): Clean Code** \ No newline at end of file +- **[CleanCode ๐Ÿงผ](CleanCode/README.md): Clean Code** +- **Common ๐Ÿ”ง: Shared test utilities (e.g. capturing `System.out` in assertions)** + +## Getting Started ๐Ÿš€ + +Requires **JDK 25**. + +```shell +./gradlew test # all modules +./gradlew :JavaReleases:test # single module +./gradlew :JavaReleases:test --tests "pl.mperor.lab.java.Java8" # single test class +``` + +## How to Read It ๐Ÿ“– + +- **Tests are the documentation.** Each test method demonstrates one behavior and asserts it, so every example is verified on every build. + Supporting classes live in `src/main`, but the story is told in `src/test`. +- **Start with what you need:** + [FirstSteps](FirstSteps/README.md) for language fundamentals, + [JavaReleases](JavaReleases/README.md) to see what each version added, + [DesignPatterns](DesignPatterns/README.md) and [CleanCode](CleanCode/README.md) for design. +- **Each `JavaN` class starts with a header** listing the release's features + (language, libraries and tools for Java 1.0โ€“9, JEP numbers for Java 10+), followed by tests for the most relevant ones.