From 613dd63d1cd24dabca42c9930748fd661b1d45ef Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 22:41:24 +0200 Subject: [PATCH 01/57] Native image --- .github/workflows/create-github-release.yaml | 105 ++++++++++++++++++ ...{release.yml => publish-maven-release.yml} | 0 CHANGELOG.md | 7 ++ ...ow-to-build-a-native-executable-locally.md | 31 ++++++ pom.xml | 28 +++++ .../cli/FileTreePrettyPrinterCommandLine.java | 21 ++++ 6 files changed, 192 insertions(+) create mode 100644 .github/workflows/create-github-release.yaml rename .github/workflows/{release.yml => publish-maven-release.yml} (100%) create mode 100644 docs/How-to-build-a-native-executable-locally.md create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml new file mode 100644 index 0000000..bd7eb76 --- /dev/null +++ b/.github/workflows/create-github-release.yaml @@ -0,0 +1,105 @@ +name: Create Github release + +on: + push: + tags: + - "v*.*.*" # triggers on tags like vX.Y.Z + +jobs: + build-native: + name: Build on ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Set up GraalVM + uses: graalvm/setup-graalvm@v1 + with: + java-version: "21" + distribution: "graalvm" + components: "native-image" + + - name: Build native image + run: mvn -B clean package -Pnative + + - name: Locate built executable + id: find_exe + shell: bash + run: | + mkdir dist + BIN_PATH=$(find target -type f \( -name "*.exe" -o -perm -111 \) | head -n 1) + echo "Found binary: $BIN_PATH" + cp "$BIN_PATH" dist/ + echo "bin_path=$BIN_PATH" >> $GITHUB_OUTPUT + + - name: Zip executable + id: zip_exe + shell: bash + run: | + VERSION=${GITHUB_REF_NAME} + OS_NAME=${{ matrix.os }} + SAFE_OS_NAME=$(echo "$OS_NAME" | sed 's/-latest//') + ZIP_NAME="jfiletreeprettyprinter-${VERSION}-${SAFE_OS_NAME}.zip" + + cd dist + zip "$ZIP_NAME" * > /dev/null + echo "zip_path=$(pwd)/$ZIP_NAME" >> $GITHUB_OUTPUT + cd .. + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: release-zips-${{ matrix.os }} + path: ${{ steps.zip_exe.outputs.zip_path }} + + release: + name: Create GitHub Release + runs-on: ubuntu-latest + needs: build-native + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Download build artifacts + uses: actions/download-artifact@v4 + with: + path: release_zips + + - name: Extract changelog for current version + id: changelog + shell: bash + run: | + TAG="${GITHUB_REF_NAME#v}" # Remove leading "v" (e.g. vX.Y.Z → X.Y.Z) + echo "Extracting changelog for version $TAG" + + # Extract section for this version up to the next version header + awk "/## \\[$TAG\\]/,/^---/" CHANGELOG.md > release_notes.tmp + + # Clean up formatting (remove trailing ---) + sed -i '/^---/d' release_notes.tmp + + # Verify + echo "==== Extracted release notes ====" + cat release_notes.tmp + echo "================================" + + echo "body_path=release_notes.tmp" >> $GITHUB_OUTPUT + + - name: Create GitHub Release + uses: softprops/action-gh-release@v2 + with: + name: "JFileTreePrettyPrinter v${{ github.ref_name }}" + body_path: ${{ steps.changelog.outputs.body_path }} + files: release_zips/**/*.zip + draft: true + prerelease: false + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/publish-maven-release.yml similarity index 100% rename from .github/workflows/release.yml rename to .github/workflows/publish-maven-release.yml diff --git a/CHANGELOG.md b/CHANGELOG.md index 8dacc86..d2f2ef0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,13 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +--- +## [0.1.1] - 2025-10-17 - Native executable + +### Added +- Work in progress: run JFileTreePrettyPrinter using command line /!\ not yet fully functional /!\ +- Native executable attachment to the Github release + --- ## [0.1.0] - 2025-10-13 - First beta release diff --git a/docs/How-to-build-a-native-executable-locally.md b/docs/How-to-build-a-native-executable-locally.md new file mode 100644 index 0000000..24d1f66 --- /dev/null +++ b/docs/How-to-build-a-native-executable-locally.md @@ -0,0 +1,31 @@ +# How to build a native executable locally + +## Windows +1. Install `GraalVM`: https://www.graalvm.org/downloads/ + 1. Configure environment variable: + ``` + GRAALVM_HOME= + GRAALVM_PATH=%GRAALVM_HOME%\bin + ``` +1. Install `Visual Studio Code`: https://visualstudio.microsoft.com/fr/downloads/ + 1. IMPORTANT: Be sure to install `Desktop development with C++` to avoid `Failed to find a suitable version of Visual Studio with 'vswhere.exe'` error +1. Configure Maven plugin: https://graalvm.github.io/native-build-tools/latest/end-to-end-maven-guide.html#add-plugin + 1. Use `native` profile + 1. Set `native.maven.plugin.version` property to latest version from https://mvnrepository.com/artifact/org.graalvm.buildtools/native-maven-plugin + 1. Set appropriate main class +1. From the project root, run `mvn -Pnative package` +1. After a few seconds, `jfiletreeprettyprinter.exe` has been generated inside `target/` folder + +### UTF-8 console +If printed tree format looks like `Ôöé` instead of `├─`, then your console is likely not configured to UTF-8 encoding. +To configure your console to UTF-8 code page, run: +``` +chcp 65001 +``` +More info on [chcp Windows command](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/chcp). + +## Linux +No doc for now. + +## MacOS +No doc for now. \ No newline at end of file diff --git a/pom.xml b/pom.xml index 0504be2..ba73343 100644 --- a/pom.xml +++ b/pom.xml @@ -55,6 +55,7 @@ 3.3.1 3.11.2 3.2.7 + 0.11.1 @@ -290,6 +291,33 @@ + + + native + + + + org.graalvm.buildtools + native-maven-plugin + ${native.maven.plugin.version} + true + + + build-native + + compile-no-fork + + package + + + + io.github.computerdaddyguy.jfiletreeprettyprinter.cli.FileTreePrettyPrinterCommandLine + + + + + + diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java new file mode 100644 index 0000000..2b680f4 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java @@ -0,0 +1,21 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; + +public class FileTreePrettyPrinterCommandLine { + + public static void main(String[] args) { + String path = "."; + if (args != null && args.length > 0) { + path = args[0]; + } + try { + var printer = FileTreePrettyPrinter.createDefault(); + var result = printer.prettyPrint(path); + System.out.println(result); + } catch (Exception e) { + System.err.print("Error while pretty printing: " + e.getMessage()); + } + } + +} From a61c7c9836ee4da12f97fc344374a6181d91f2b6 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 22:53:44 +0200 Subject: [PATCH 02/57] Use tar instead of zip --- .github/workflows/create-github-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index bd7eb76..ceef074 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -47,7 +47,7 @@ jobs: ZIP_NAME="jfiletreeprettyprinter-${VERSION}-${SAFE_OS_NAME}.zip" cd dist - zip "$ZIP_NAME" * > /dev/null + tar -a -c -f "$ZIP_NAME" * echo "zip_path=$(pwd)/$ZIP_NAME" >> $GITHUB_OUTPUT cd .. From af2a6cb9c8e6078406db77876a15d597d2538f5e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:06:55 +0200 Subject: [PATCH 03/57] Fix native executable github action --- .github/workflows/create-github-release.yaml | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index ceef074..04c7dee 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -22,7 +22,6 @@ jobs: with: java-version: "21" distribution: "graalvm" - components: "native-image" - name: Build native image run: mvn -B clean package -Pnative @@ -43,12 +42,17 @@ jobs: run: | VERSION=${GITHUB_REF_NAME} OS_NAME=${{ matrix.os }} - SAFE_OS_NAME=$(echo "$OS_NAME" | sed 's/-latest//') + case "$OS_NAME" in + ubuntu-latest) SAFE_OS_NAME="linux" ;; + windows-latest) SAFE_OS_NAME="windows" ;; + macos-latest) SAFE_OS_NAME="macos" ;; + *) SAFE_OS_NAME="$OS_NAME" ;; + esac ZIP_NAME="jfiletreeprettyprinter-${VERSION}-${SAFE_OS_NAME}.zip" cd dist tar -a -c -f "$ZIP_NAME" * - echo "zip_path=$(pwd)/$ZIP_NAME" >> $GITHUB_OUTPUT + echo "zip_path=dist/$ZIP_NAME" >> $GITHUB_OUTPUT cd .. - name: Upload artifact From 3e99f298606eb8a18029f3d27c74ab6e99026084 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:13:34 +0200 Subject: [PATCH 04/57] Fix zip for Windows --- .github/workflows/create-github-release.yaml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 04c7dee..76fb80b 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -51,7 +51,11 @@ jobs: ZIP_NAME="jfiletreeprettyprinter-${VERSION}-${SAFE_OS_NAME}.zip" cd dist - tar -a -c -f "$ZIP_NAME" * + if [[ "$SAFE_OS_NAME" == "windows" ]]; then + powershell Compress-Archive -Path * -DestinationPath "$ZIP_NAME" + else + tar -a -c -f "$ZIP_NAME" * + fi echo "zip_path=dist/$ZIP_NAME" >> $GITHUB_OUTPUT cd .. @@ -100,7 +104,7 @@ jobs: - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: - name: "JFileTreePrettyPrinter v${{ github.ref_name }}" + name: "JFileTreePrettyPrinter ${{ github.ref_name }}" body_path: ${{ steps.changelog.outputs.body_path }} files: release_zips/**/*.zip draft: true From 6b4a85a070922ada85e783bdcebc5bf9f71ea462 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:27:06 +0200 Subject: [PATCH 05/57] Fix MacOS native build + doc --- .github/workflows/create-github-release.yaml | 8 ++++++++ release_process.md | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 76fb80b..e9b6673 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -31,7 +31,15 @@ jobs: shell: bash run: | mkdir dist + + # Linux/macOS binaries may have no extension, Windows has .exe BIN_PATH=$(find target -type f \( -name "*.exe" -o -perm -111 \) | head -n 1) + + # MacOS fallback: if not found, pick any file in target + if [[ -z "$BIN_PATH" ]]; then + BIN_PATH=$(find target -type f | head -n 1) + fi + echo "Found binary: $BIN_PATH" cp "$BIN_PATH" dist/ echo "bin_path=$BIN_PATH" >> $GITHUB_OUTPUT diff --git a/release_process.md b/release_process.md index 9dfd641..8c563d5 100644 --- a/release_process.md +++ b/release_process.md @@ -10,7 +10,7 @@ - **In `main` branch:** - Set project version in `pom.xml` to `X.Y.Z` (remove the `-SNAPSHOT`) - Update `README.md` (with new `X.Y.Z` dependency version) - - Update `CHANGELOG.md` with changes + - Update `CHANGELOG.md` with changes **!IMPORTANT: Respect format!** - Update `ROADMAP.md` if necessary - Update `SECURITY.md` if necessary - Commit locally @@ -18,7 +18,8 @@ - Push code & tags - **In Github:** - - Create new release based on `vX.Y.Z` tag: copy content of `CHANGELOG.md` for this version + - Action `create-github-release` triggers automatically on tag push `vX.Y.Z` on `main` branch + - Content matching of `CHANGELOG.md` for this version is used - Github `release` workflow will run automatically - Few minutes later, artifact is available on Maven Central 🎉 - Update wiki if required From bbf493eb3dd0ad9154d26499d7cb3508a3bbad55 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:36:44 +0200 Subject: [PATCH 06/57] Fix MacOS native build --- .github/workflows/create-github-release.yaml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index e9b6673..3e5db52 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -32,12 +32,10 @@ jobs: run: | mkdir dist - # Linux/macOS binaries may have no extension, Windows has .exe - BIN_PATH=$(find target -type f \( -name "*.exe" -o -perm -111 \) | head -n 1) - - # MacOS fallback: if not found, pick any file in target - if [[ -z "$BIN_PATH" ]]; then - BIN_PATH=$(find target -type f | head -n 1) + if [[ "$SAFE_OS_NAME" == "windows" ]]; then + BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter.exe") + else + BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter") fi echo "Found binary: $BIN_PATH" From 552e720825c54ab9dd82a4ead7f284a0001e27cc Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:46:56 +0200 Subject: [PATCH 07/57] Fix Windows native build --- .github/workflows/create-github-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 3e5db52..89aaca8 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -33,7 +33,7 @@ jobs: mkdir dist if [[ "$SAFE_OS_NAME" == "windows" ]]; then - BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter.exe") + BIN_PATH=$(find target -type f -name "*.exe" | head -n 1) else BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter") fi From 9e99471501a3c168272294986a2867429ffb167b Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:52:18 +0200 Subject: [PATCH 08/57] Fix Windows native build --- .github/workflows/create-github-release.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 89aaca8..81bce49 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -32,8 +32,8 @@ jobs: run: | mkdir dist - if [[ "$SAFE_OS_NAME" == "windows" ]]; then - BIN_PATH=$(find target -type f -name "*.exe" | head -n 1) + if [[ "$OS_NAME" == "windows-latest" ]]; then + BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter.exe") else BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter") fi From 11441eb97d701040a1dcfa5280f676f799387c92 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Fri, 17 Oct 2025 23:57:18 +0200 Subject: [PATCH 09/57] Fix Windows native build --- .github/workflows/create-github-release.yaml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 81bce49..89b40e0 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -31,7 +31,8 @@ jobs: shell: bash run: | mkdir dist - + + OS_NAME=${{ matrix.os }} if [[ "$OS_NAME" == "windows-latest" ]]; then BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter.exe") else @@ -55,6 +56,7 @@ jobs: *) SAFE_OS_NAME="$OS_NAME" ;; esac ZIP_NAME="jfiletreeprettyprinter-${VERSION}-${SAFE_OS_NAME}.zip" + echo "Zip to create: $ZIP_NAME" cd dist if [[ "$SAFE_OS_NAME" == "windows" ]]; then From cfcc647f026da938b64a1b860c03007453c9d7fe Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 18 Oct 2025 00:08:34 +0200 Subject: [PATCH 10/57] Run release only on main branch --- .github/workflows/create-github-release.yaml | 21 ++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 89b40e0..9eeb38f 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -6,6 +6,27 @@ on: - "v*.*.*" # triggers on tags like vX.Y.Z jobs: + + run-only-on-main-branch: + name: Create GitHub Release + runs-on: ubuntu-latest + needs: build-native + permissions: + contents: write + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + - name: Check if tag is on main + run: | + git fetch origin main + if git merge-base --is-ancestor $GITHUB_SHA origin/main; then + echo "Tag is on main" + else + echo "Tag is NOT on main, skipping" + exit 0 + fi + build-native: name: Build on ${{ matrix.os }} runs-on: ${{ matrix.os }} From 7162c3b7b52acac9e2f82f31eebe317ddfa0f84b Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 18 Oct 2025 00:11:11 +0200 Subject: [PATCH 11/57] Fix control --- .github/workflows/create-github-release.yaml | 30 +++++++++----------- 1 file changed, 14 insertions(+), 16 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 9eeb38f..2dd4ae8 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -8,24 +8,22 @@ on: jobs: run-only-on-main-branch: - name: Create GitHub Release + name: Verify main branch runs-on: ubuntu-latest - needs: build-native - permissions: - contents: write - steps: - - name: Checkout repository - uses: actions/checkout@v4 - - name: Check if tag is on main - run: | - git fetch origin main - if git merge-base --is-ancestor $GITHUB_SHA origin/main; then - echo "Tag is on main" - else - echo "Tag is NOT on main, skipping" - exit 0 - fi + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Check if tag is on main + run: | + git fetch origin main + if git merge-base --is-ancestor $GITHUB_SHA origin/main; then + echo "Tag is on main" + else + echo "Tag is NOT on main, skipping" + exit 0 + fi build-native: name: Build on ${{ matrix.os }} From 4cbdec6f10dd5b3f8088d9b2d9cc6f99093e9cd2 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 18 Oct 2025 00:13:08 +0200 Subject: [PATCH 12/57] Fix control --- .github/workflows/create-github-release.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 2dd4ae8..cedb2c7 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -28,6 +28,7 @@ jobs: build-native: name: Build on ${{ matrix.os }} runs-on: ${{ matrix.os }} + needs: run-only-on-main-branch strategy: matrix: os: [windows-latest, ubuntu-latest, macos-latest] From 3e5e0b628837caccba6ff188327a69093c63aa0b Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 18 Oct 2025 00:16:38 +0200 Subject: [PATCH 13/57] Fix control --- .github/workflows/create-github-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index cedb2c7..72de3d3 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -22,7 +22,7 @@ jobs: echo "Tag is on main" else echo "Tag is NOT on main, skipping" - exit 0 + exit 1 fi build-native: From 7f0cd4dbbda5f198815480e174991e7fe648be33 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 18 Oct 2025 00:25:50 +0200 Subject: [PATCH 14/57] Update doc --- ROADMAP.md | 8 ++++---- release_process.md => docs/Release-process.md | 14 +++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) rename release_process.md => docs/Release-process.md (65%) diff --git a/ROADMAP.md b/ROADMAP.md index c2946ad..2d0eaff 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -28,15 +28,15 @@ - [x] SonarCloud integration - [x] **Workflows & lifecycle** - [x] Github actions - - [x] Publish `0.0.x` alpha on Maven Central! - - [x] Publish `0.x.0` beta on Maven Central! + - [x] Publish `0.0.x` **alpha** on Maven Central! + - [x] Publish `0.x.0` **beta** on Maven Central! ## To do - [ ] Gather feedback +- [ ] Use as command line (options as arguments of provided in external file) +- [x] Executable file distributed with release files in Github ## Backlog / To analyze / To implement if requested -- [ ] Export options to/import options from external file -- [ ] Executable file distributed with release files in Github - [ ] Rework/fix Github wiki to be up to date - [ ] Refactor unit tests (custom assert?) - [ ] Option: Follow symlink diff --git a/release_process.md b/docs/Release-process.md similarity index 65% rename from release_process.md rename to docs/Release-process.md index 8c563d5..bf9a5e4 100644 --- a/release_process.md +++ b/docs/Release-process.md @@ -1,4 +1,4 @@ -# JFileTreePrettyPrinter release flow +# JFileTreePrettyPrinter release process - **In `develop` branch:** - Run tests @@ -15,13 +15,17 @@ - Update `SECURITY.md` if necessary - Commit locally - Tag with appropriate `vX.Y.Z` - - Push code & tags + - Push code & tag - **In Github:** - Action `create-github-release` triggers automatically on tag push `vX.Y.Z` on `main` branch - - Content matching of `CHANGELOG.md` for this version is used - - Github `release` workflow will run automatically - - Few minutes later, artifact is available on Maven Central 🎉 + - Builds native executables for Linux/Windows/MacOS + - Creates a **draft** Github release with: + - Executables as attached zipped files + - Appropriate section of `CHANGELOG.md` for this version + - Review the Github release and **publish it manually** + - Github `publish-maven-release` workflow will run automatically + - Few minutes later, artifact is available on Maven Central 🎉 - Update wiki if required - **Merge `main` back into `develop` branch** From 3371861ba4fb9568586b8745ba0cd6cd32964d28 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 19 Oct 2025 16:04:24 +0200 Subject: [PATCH 15/57] CLI: Work in progress --- pom.xml | 20 +++ .../cli/FileTreePrettyPrinterCommandLine.java | 15 +- .../cli/PrettyPrintCommand.java | 68 +++++++++ .../cli/RecordUtils.java | 63 ++++++++ .../cli/options/ExternalOptionsReader.java | 59 ++++++++ .../cli/options/model/ChildLimit.java | 44 ++++++ .../cli/options/model/ExternalOptions.java | 15 ++ .../cli/options/model/Matcher.java | 79 ++++++++++ .../reachability-metadata.json | 142 ++++++++++++++++++ 9 files changed, 493 insertions(+), 12 deletions(-) create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java create mode 100644 src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json diff --git a/pom.xml b/pom.xml index ba73343..31c6451 100644 --- a/pom.xml +++ b/pom.xml @@ -39,6 +39,9 @@ UTF-8 + 3.0.0 + 9.0.1.Final + 4.7.7 1.0.0 5.13.4 3.27.4 @@ -59,7 +62,23 @@ + + + tools.jackson.core + jackson-databind + ${jackson.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + + + info.picocli + picocli + ${picocli.version} + org.jspecify jspecify @@ -134,6 +153,7 @@ ${java.version} ${java.version} + UTF-8 diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java index 2b680f4..72c37e6 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java @@ -1,21 +1,12 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; -import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; +import picocli.CommandLine; public class FileTreePrettyPrinterCommandLine { public static void main(String[] args) { - String path = "."; - if (args != null && args.length > 0) { - path = args[0]; - } - try { - var printer = FileTreePrettyPrinter.createDefault(); - var result = printer.prettyPrint(path); - System.out.println(result); - } catch (Exception e) { - System.err.print("Error while pretty printing: " + e.getMessage()); - } + int exitCode = new CommandLine(new PrettyPrintCommand()).execute(args); + System.exit(exitCode); } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java new file mode 100644 index 0000000..b00af64 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java @@ -0,0 +1,68 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsReader; +import java.io.File; +import java.nio.file.Path; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.Logger; +import picocli.CommandLine.Command; +import picocli.CommandLine.Option; +import picocli.CommandLine.Parameters; + +// @formatter:off +@Command( + name = "prettyprint", + mixinStandardHelpOptions = true, + version = "checksum 4.0", + description = "Prints the checksum (SHA-256 by default) of a file to STDOUT." +) +// @formatter:on +public class PrettyPrintCommand implements Callable { + + @Parameters(index = "0", description = "The path to pretty print", arity = "0") + private File file; + + @Option(names = { "-o", "--options" }, paramLabel = "OPTIONS", description = "the options file", arity = "0") + private File optionsFile; + + @Override + public Integer call() throws Exception { + + LogManager.getLogManager().reset(); + Logger.getLogger("org.hibernate.validator").setLevel(Level.OFF); + + var reader = new ExternalOptionsReader(); + reader.readOptions(); + + Path path = detectPathToPrint(); + if (optionsFile != null) { + path = optionsFile.toPath(); + } + try { + var printer = FileTreePrettyPrinter.createDefault(); + var result = printer.prettyPrint(path); + System.out.println(result); + } catch (Exception e) { + System.err.print("Error while pretty printing: " + e.getMessage()); + return 1; + } + + return 0; + } + + private static Path detectPathToPrint() { + for (var p : List.of("tmp", "target/tmp")) { + var path = Path.of(p); + if (path.toFile().exists()) { + return path; + } + } + return Path.of("."); + + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java new file mode 100644 index 0000000..513c9ae --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java @@ -0,0 +1,63 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; + +public class RecordUtils { + + /** + * Inspired from: https://sormuras.github.io/blog/2020-05-06-records-to-text-block.html + */ + public static String toTextBlock(Record record) { + var lines = new ArrayList(); + toTextBlock(lines, "", null, record, " "); + return String.join(System.lineSeparator(), lines); + } + + private static void toTextBlock(List lines, String shift, String attrName, Object value, String indent) { + var nested = value.getClass(); + if (nested.isRecord()) { + toTextBlockRecord(lines, shift, attrName, (Record) value, indent); + } else if (value instanceof Collection coll) { + toTextBlockColl(lines, shift, attrName, coll, indent); + } else { + lines.add(String.format("%s%s = %s", shift, attrName, value)); + } + } + + private static void toTextBlockRecord(List lines, String shift, String attrName, Record record, String indent) { + if (attrName == null) { + lines.add(String.format("%s%s", shift, record.getClass().getSimpleName())); + } else { + lines.add(String.format("%s%s -> %s", shift, attrName, record.getClass().getSimpleName())); + } + + var components = record.getClass().getRecordComponents(); + + for (var component : components) { + var compName = component.getName(); + try { + var value = component.getAccessor().invoke(record); + toTextBlock(lines, shift + indent, compName, value, indent); + } catch (ReflectiveOperationException e) { + lines.add("// Reflection over " + component + " failed: " + e); + } + } + } + + private static void toTextBlockColl(List lines, String shift, String attrName, Collection coll, String indent) { + if (attrName == null) { + lines.add(String.format("%s[", shift)); + } else { + lines.add(String.format("%s%s = [", shift, attrName)); + } + int i = 0; + for (var item : coll) { + toTextBlock(lines, shift + indent, "[" + i + "]", item, indent); + i++; + } + lines.add(String.format("%s]", shift)); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java new file mode 100644 index 0000000..97fb652 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java @@ -0,0 +1,59 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.RecordUtils; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import java.nio.file.Path; +import java.util.logging.Level; +import java.util.logging.LogManager; +import java.util.logging.Logger; +import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; +import tools.jackson.databind.json.JsonMapper; + +public class ExternalOptionsReader { + + public void readOptions() { + + /* + * READ + */ + var mapper = JsonMapper.builder() +// .withConfigOverride( +// Object.class, cfg -> { +// cfg.setNullHandling(JsonSetter.Value.forValueNulls(Nulls.FAIL, Nulls.FAIL)); +// } +// ) + .build(); + var path = ".prettyprint"; + ExternalOptions externalOptions = mapper.readValue(Path.of(path), ExternalOptions.class); + + /* + * VALIDATE + */ + var validatorFactory = Validation.byDefaultProvider() + .configure() + .messageInterpolator(new ParameterMessageInterpolator()) + .buildValidatorFactory(); + var validator = validatorFactory.getValidator(); + + var violations = validator.validate(externalOptions); + if (!violations.isEmpty()) { + throw new ConstraintViolationException(violations); + } + + /* + * PROCESS + */ + System.out.println("OK -->\n" + RecordUtils.toTextBlock(externalOptions)); + } + + public static void main(String[] args) { + LogManager.getLogManager().reset(); + Logger.getLogger("org.hibernate.validator").setLevel(Level.OFF); + + var reader = new ExternalOptionsReader(); + reader.readOptions(); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java new file mode 100644 index 0000000..740f496 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java @@ -0,0 +1,44 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.List; + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") +public sealed interface ChildLimit { + + /** + * + * @param limit + */ + @JsonTypeName("static") + public record StaticLimit( + @NotNull Integer limit + ) implements ChildLimit { + + } + + /** + * + */ + @JsonTypeName("dynamic") + public record DynamicLimit( + @Valid @NotNull @NotEmpty List<@Valid @NotNull DynamicLimitItem> limits + ) implements ChildLimit { + + } + + /** + * + */ + public record DynamicLimitItem( + @NotNull Integer limit, + @Valid @NotNull Matcher matcher + ) { + + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java new file mode 100644 index 0000000..f287b36 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java @@ -0,0 +1,15 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; + +import jakarta.validation.Valid; + +public record ExternalOptions( + Boolean emojis, + @Valid ChildLimit childLimit +) { + + public ExternalOptions(Boolean emojis, ChildLimit childLimit) { + this.emojis = emojis == null ? false : emojis; + this.childLimit = childLimit; + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java new file mode 100644 index 0000000..2031ace --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java @@ -0,0 +1,79 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; + +import com.fasterxml.jackson.annotation.JsonTypeInfo; +import com.fasterxml.jackson.annotation.JsonTypeName; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import java.util.List; + +@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") +public sealed interface Matcher { + + /** + * + */ + @JsonTypeName("everything") + public final record AlwaysTrue() implements Matcher { + + } + + /** + * + */ + @JsonTypeName("nothing") + public final record AlwaysFalse() implements Matcher { + + } + + /** + * + */ + @JsonTypeName("allOf") + public final record AllOf( + @Valid @NotNull @NotEmpty List<@Valid @NotNull Matcher> matchers + ) implements Matcher { + + } + + /** + * + */ + @JsonTypeName("anyOf") + public final record AnyOf( + @Valid @NotNull @NotEmpty List<@Valid @NotNull Matcher> matchers + ) implements Matcher { + + } + + /** + * + */ + @JsonTypeName("noneOf") + public final record NoneOf( + @Valid @NotNull @NotEmpty List<@Valid @NotNull Matcher> matchers + ) implements Matcher { + + } + + /** + * + */ + @JsonTypeName("name") + public final record NameGlob( + @NotNull @NotEmpty String glob + ) implements Matcher { + + } + + /** + * + */ + @JsonTypeName("path") + public final record PathGlob( + @NotNull @NotEmpty String glob + ) implements Matcher { + + } + +} \ No newline at end of file diff --git a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json new file mode 100644 index 0000000..f562b1e --- /dev/null +++ b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json @@ -0,0 +1,142 @@ +{ + "reflection": [ + { + "type": "picocli.CommandLine$AutoHelpMixin", + "allDeclaredConstructors": true, + "allDeclaredMethods": true, + "allDeclaredFields": true + }, + { + "type": "picocli.CommandLine", + "allDeclaredConstructors": true, + "allDeclaredMethods": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.PrettyPrintCommand", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$StaticLimit", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$DynamicLimit", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$DynamicLimitItem", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AlwaysTrue", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AlwaysFalse", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AllOf", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AnyOf", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$NoneOf", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$NameGlob", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$PathGlob", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + } + ] +} + \ No newline at end of file From b193b5d1a3504a80651061e31816fd795eb283e7 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Wed, 22 Oct 2025 00:24:31 +0200 Subject: [PATCH 16/57] CLI: Work in progress --- README.md | 2 +- pom.xml | 38 +++++- .../cli/ConsoleOutput.java | 53 +++++++++ .../cli/FileTreePrettyPrinterCommandLine.java | 5 +- .../cli/ManifestVersionProvider.java | 45 +++++++ .../cli/PrettyPrintCommand.java | 88 +++++++++----- .../cli/options/{model => }/ChildLimit.java | 4 +- .../options/{model => }/ExternalOptions.java | 4 +- .../cli/options/ExternalOptionsReader.java | 112 ++++++++++++++---- .../cli/options/{model => }/Matcher.java | 4 +- .../cli/{ => options}/RecordUtils.java | 26 ++-- .../reachability-metadata.json | 42 +++++-- 12 files changed, 335 insertions(+), 88 deletions(-) create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{model => }/ChildLimit.java (94%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{model => }/ExternalOptions.java (87%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{model => }/Matcher.java (96%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/{ => options}/RecordUtils.java (61%) diff --git a/README.md b/README.md index 2ad1993..94ea62a 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ [![Javadoc](https://javadoc.io/badge2/io.github.computerdaddyguy/jfiletreeprettyprinter/javadoc.svg?color=blue)](https://javadoc.io/doc/io.github.computerdaddyguy/jfiletreeprettyprinter) [![Apache License 2.0](https://img.shields.io/:license-Apache%20License%202.0-blue.svg)](https://github.com/computerdaddyguy/jfiletreeprettyprinter/blob/main/LICENSE) -**A lightweight and flexible Java library to pretty-print directory structures — ideal for documentation, project overviews, or CLI tools.** +**A lightweight and flexible Java library with a native CLI to pretty-print directory structures - ideal for documentation, project overviews, or CLI tools.** Supports various [options](#customization-options) to customize the directories scanning and rendering: - Filtering & sorting files and folders diff --git a/pom.xml b/pom.xml index 31c6451..9358965 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ jar JFileTreePrettyPrinter - A lightweight and flexible Java library to pretty-print directory structures — ideal for documentation, project overviews, or CLI tools. + A lightweight and flexible Java library with a native CLI to pretty-print directory structures - ideal for documentation, project overviews, or CLI tools. https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter @@ -29,7 +29,7 @@ scm:git:git://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter.git scm:git:ssh://github.com:ComputerDaddyGuy/JFileTreePrettyPrinter.git - https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter/tree/main + https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter @@ -59,6 +59,7 @@ 3.11.2 3.2.7 0.11.1 + 9.0.2 @@ -135,6 +136,26 @@ + + io.github.git-commit-id + git-commit-id-maven-plugin + ${git-commit-id-maven-plugin.version} + + + get-the-git-infos + + revision + + initialize + + + + false + + full + + + org.apache.maven.plugins maven-jar-plugin @@ -143,6 +164,19 @@ src/example/** + + + true + false + + + ${git.build.time} + ${git.commit.id.full} + ${git.commit.time} + ${project.description} + ${scm.url} + + diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java new file mode 100644 index 0000000..77d2725 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java @@ -0,0 +1,53 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import java.io.PrintStream; +import java.util.logging.Level; +import java.util.logging.Logger; +import org.jspecify.annotations.NullMarked; + +@NullMarked +public class ConsoleOutput { + + private static final Logger ROOT_LOGGER = Logger.getLogger(""); + + private boolean debug; + + public ConsoleOutput(boolean debug) { + this.debug = debug; + disableAllLoggers(); + } + + private void disableAllLoggers() { + ROOT_LOGGER.setLevel(Level.OFF); + Logger.getLogger("org.hibernate.validator").setLevel(Level.OFF); + } + + private void printOut(String msg, Object... args) { + printf(System.out, msg, args); + } + + private void printErr(String msg, Object... args) { + printf(System.err, msg, args); + } + + private void printf(PrintStream dest, String msg, Object... args) { + dest.printf(msg, args); + dest.println(); // Because "printf" does not print line return + } + + public void printDebug(String msg, Object... args) { + // Could not (yet) make Logger level work within native image, so fallback to plain console output (for now) + if (debug && msg != null) { + printOut(msg, args); + } + } + + public void print(String msg, Object... args) { + printOut(msg, args); + } + + public void printError(String msg, Object... args) { + printErr(msg, args); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java index 72c37e6..7aa925d 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java @@ -2,10 +2,11 @@ import picocli.CommandLine; -public class FileTreePrettyPrinterCommandLine { +class FileTreePrettyPrinterCommandLine { public static void main(String[] args) { - int exitCode = new CommandLine(new PrettyPrintCommand()).execute(args); + var cmd = new CommandLine(new PrettyPrintCommand()); + int exitCode = cmd.execute(args); System.exit(exitCode); } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java new file mode 100644 index 0000000..5406805 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java @@ -0,0 +1,45 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import java.io.InputStream; +import java.util.jar.Manifest; +import picocli.CommandLine.IVersionProvider; + +class ManifestVersionProvider implements IVersionProvider { + + @Override + public String[] getVersion() throws Exception { + String implTitle = null; + String implVersion = null; + String projectDesc = null; + String commitId = null; + String commitTime = null; + String scmUrl = null; + String buildTime = null; + + try (InputStream is = getClass().getResourceAsStream("/META-INF/MANIFEST.MF")) { + if (is != null) { + Manifest manifest = new Manifest(is); + implTitle = manifest.getMainAttributes().getValue("Implementation-Title"); + implVersion = manifest.getMainAttributes().getValue("Implementation-Version"); + projectDesc = manifest.getMainAttributes().getValue("Project-Desc"); + commitId = manifest.getMainAttributes().getValue("Commit-Id"); + commitTime = manifest.getMainAttributes().getValue("Commit-Time"); + scmUrl = manifest.getMainAttributes().getValue("Scm-Url"); + buildTime = manifest.getMainAttributes().getValue("Build-Time"); + } + } + + return new String[] { + valueOrUnknown(implTitle) + " " + valueOrUnknown(implVersion), + valueOrUnknown(projectDesc), + "Repository: " + valueOrUnknown(scmUrl), + "Commit: " + valueOrUnknown(commitId) + " (" + valueOrUnknown(commitTime) + ")", + "Built on: " + valueOrUnknown(buildTime) + }; + } + + private static final String valueOrUnknown(String value) { + return value != null ? value : "unknown"; + } + +} \ No newline at end of file diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java index b00af64..1af5dbb 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java @@ -2,13 +2,13 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsReader; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import java.io.File; import java.nio.file.Path; -import java.util.List; +import java.util.ArrayList; import java.util.concurrent.Callable; -import java.util.logging.Level; -import java.util.logging.LogManager; -import java.util.logging.Logger; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import picocli.CommandLine.Command; import picocli.CommandLine.Option; import picocli.CommandLine.Parameters; @@ -17,51 +17,83 @@ @Command( name = "prettyprint", mixinStandardHelpOptions = true, - version = "checksum 4.0", - description = "Prints the checksum (SHA-256 by default) of a file to STDOUT." + versionProvider = ManifestVersionProvider.class, + description = "Pretty-prints directory structure" ) // @formatter:on -public class PrettyPrintCommand implements Callable { +@NullMarked +class PrettyPrintCommand implements Callable { - @Parameters(index = "0", description = "The path to pretty print", arity = "0") - private File file; + @Nullable + @Parameters(index = "0", description = "The path to pretty print", arity = "0..1") + private File target; + @Nullable @Option(names = { "-o", "--options" }, paramLabel = "OPTIONS", description = "the options file", arity = "0") private File optionsFile; + @Option(names = { "-d", "--debug" }, description = "debug mode") + private boolean debug; + @Override public Integer call() throws Exception { - LogManager.getLogManager().reset(); - Logger.getLogger("org.hibernate.validator").setLevel(Level.OFF); - - var reader = new ExternalOptionsReader(); - reader.readOptions(); + var output = new ConsoleOutput(debug); - Path path = detectPathToPrint(); - if (optionsFile != null) { - path = optionsFile.toPath(); + var targetPath = detectTargetPath(output); + if (!targetPath.toFile().exists()) { + output.printError("Path not found: %s", targetPath); + return 1; } + + var options = detectOptions(targetPath, output); + try { - var printer = FileTreePrettyPrinter.createDefault(); - var result = printer.prettyPrint(path); - System.out.println(result); + var printer = FileTreePrettyPrinter.builder().withOptions(options).build(); + var result = printer.prettyPrint(targetPath); + output.print(result); + return 0; } catch (Exception e) { - System.err.print("Error while pretty printing: " + e.getMessage()); + output.printError("Error while pretty printing: " + e.getMessage()); return 1; } + } - return 0; + private Path detectTargetPath(ConsoleOutput output) { + Path path = null; + if (target != null) { + path = target.toPath(); + } else { + output.printDebug("No target provided: use current directory"); + path = Path.of("."); + } + path = path.toAbsolutePath().normalize(); + output.printDebug("Target path: %s", path); + return path; } - private static Path detectPathToPrint() { - for (var p : List.of("tmp", "target/tmp")) { - var path = Path.of(p); - if (path.toFile().exists()) { - return path; + private PrettyPrintOptions detectOptions(Path targetPath, ConsoleOutput output) { + + var reader = new ExternalOptionsReader(output); + if (optionsFile != null) { + var path = optionsFile.toPath().toAbsolutePath().normalize(); + var options = reader.readOptions(path); + if (options == null) { + System.exit(1); + } + return options; + } else { + var potentialOptions = new ArrayList(); + potentialOptions.add(targetPath.resolve(".prettyprint")); + potentialOptions.add(Path.of(".").resolve(".prettyprint")); + potentialOptions.add(Path.of(System.getProperty("user.home")).resolve(".prettyprint")); + var options = reader.readOptions(potentialOptions); + if (options != null) { + return options; } + output.printDebug("No options file provided/found!"); + return PrettyPrintOptions.createDefault(); } - return Path.of("."); } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ChildLimit.java similarity index 94% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ChildLimit.java index 740f496..761b5fb 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ChildLimit.java @@ -1,4 +1,4 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -8,7 +8,7 @@ import java.util.List; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") -public sealed interface ChildLimit { +sealed interface ChildLimit { /** * diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java similarity index 87% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java index f287b36..af81155 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java @@ -1,8 +1,8 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import jakarta.validation.Valid; -public record ExternalOptions( +record ExternalOptions( Boolean emojis, @Valid ChildLimit childLimit ) { diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java index 97fb652..f62dae3 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java @@ -1,32 +1,95 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.RecordUtils; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import jakarta.validation.ConstraintViolationException; import jakarta.validation.Validation; import java.nio.file.Path; -import java.util.logging.Level; -import java.util.logging.LogManager; -import java.util.logging.Logger; import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; import tools.jackson.databind.json.JsonMapper; +@NullMarked public class ExternalOptionsReader { - public void readOptions() { + private final ConsoleOutput output; + public ExternalOptionsReader(ConsoleOutput output) { + this.output = output; + } + + @Nullable + public PrettyPrintOptions readOptions(Path optionsPath) { + optionsPath = optionsPath.toAbsolutePath().normalize(); + return tryCandidate(optionsPath, true); + } + + @Nullable + public PrettyPrintOptions readOptions(Iterable potentialOptions) { + + PrettyPrintOptions options = null; + + for (var candidateOptionPath : potentialOptions) { + candidateOptionPath = candidateOptionPath.toAbsolutePath().normalize(); + options = tryCandidate(candidateOptionPath, false); + if (options != null) { + break; + } + } + + return options; + + } + + private void printFailure(boolean required, String msg, Object... args) { + if (required) { + output.printError(msg, args); + } else { + output.printDebug(msg, args); + } + } + + @Nullable + private PrettyPrintOptions tryCandidate(Path optionsPath, boolean required) { + + if (!optionsPath.toFile().exists()) { + printFailure(required, "Options file not found: %s", optionsPath); + return null; + } + + if (!optionsPath.toFile().isFile()) { + printFailure(required, "Options file is actually not a file: %s", optionsPath); + return null; + } + + if (!optionsPath.toFile().canRead()) { + printFailure(required, "Options file exist but is not readable: %s", optionsPath); + return null; + } + + output.printDebug("Options file found: %s", optionsPath); + + ExternalOptions externalOptions; + try { + externalOptions = loadAndValidate(optionsPath); + } catch (ConstraintViolationException e) { + printFailure(required, "Invalid options file: %s\n%s", optionsPath, e.getMessage()); + return null; + } catch (RuntimeException e) { + printFailure(required, "IO error or malformed options file: %s\n%s", optionsPath, e.getMessage()); + return null; + } + + return mapToOptions(externalOptions); + } + + private ExternalOptions loadAndValidate(Path optionsPath) { /* * READ */ - var mapper = JsonMapper.builder() -// .withConfigOverride( -// Object.class, cfg -> { -// cfg.setNullHandling(JsonSetter.Value.forValueNulls(Nulls.FAIL, Nulls.FAIL)); -// } -// ) - .build(); - var path = ".prettyprint"; - ExternalOptions externalOptions = mapper.readValue(Path.of(path), ExternalOptions.class); + var mapper = JsonMapper.builder().build(); + ExternalOptions externalOptions = mapper.readValue(optionsPath, ExternalOptions.class); /* * VALIDATE @@ -42,18 +105,19 @@ public void readOptions() { throw new ConstraintViolationException(violations); } - /* - * PROCESS - */ - System.out.println("OK -->\n" + RecordUtils.toTextBlock(externalOptions)); + output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); + + return externalOptions; } - public static void main(String[] args) { - LogManager.getLogManager().reset(); - Logger.getLogger("org.hibernate.validator").setLevel(Level.OFF); + private PrettyPrintOptions mapToOptions(ExternalOptions externalOptions) { + var options = PrettyPrintOptions.createDefault(); + + if (externalOptions.emojis()) { + options = options.withDefaultEmojis(); + } - var reader = new ExternalOptionsReader(); - reader.readOptions(); + return options; } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/Matcher.java similarity index 96% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/Matcher.java index 2031ace..6e8b189 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/Matcher.java @@ -1,4 +1,4 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -8,7 +8,7 @@ import java.util.List; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") -public sealed interface Matcher { +sealed interface Matcher { /** * diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java similarity index 61% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java index 513c9ae..0eff36a 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java @@ -1,17 +1,19 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import java.util.ArrayList; import java.util.Collection; import java.util.List; +import org.jspecify.annotations.NullMarked; -public class RecordUtils { +@NullMarked +class RecordUtils { /** * Inspired from: https://sormuras.github.io/blog/2020-05-06-records-to-text-block.html */ - public static String toTextBlock(Record record) { + static String toTextBlock(Record rec) { var lines = new ArrayList(); - toTextBlock(lines, "", null, record, " "); + toTextBlock(lines, "", null, rec, " "); return String.join(System.lineSeparator(), lines); } @@ -19,26 +21,26 @@ private static void toTextBlock(List lines, String shift, String attrNam var nested = value.getClass(); if (nested.isRecord()) { toTextBlockRecord(lines, shift, attrName, (Record) value, indent); - } else if (value instanceof Collection coll) { - toTextBlockColl(lines, shift, attrName, coll, indent); + } else if (value instanceof Collection coll) { + toTextBlockCollection(lines, shift, attrName, coll, indent); } else { lines.add(String.format("%s%s = %s", shift, attrName, value)); } } - private static void toTextBlockRecord(List lines, String shift, String attrName, Record record, String indent) { + private static void toTextBlockRecord(List lines, String shift, String attrName, Record rec, String indent) { if (attrName == null) { - lines.add(String.format("%s%s", shift, record.getClass().getSimpleName())); + lines.add(String.format("%s%s", shift, rec.getClass().getSimpleName())); } else { - lines.add(String.format("%s%s -> %s", shift, attrName, record.getClass().getSimpleName())); + lines.add(String.format("%s%s -> %s", shift, attrName, rec.getClass().getSimpleName())); } - var components = record.getClass().getRecordComponents(); + var components = rec.getClass().getRecordComponents(); for (var component : components) { var compName = component.getName(); try { - var value = component.getAccessor().invoke(record); + var value = component.getAccessor().invoke(rec); toTextBlock(lines, shift + indent, compName, value, indent); } catch (ReflectiveOperationException e) { lines.add("// Reflection over " + component + " failed: " + e); @@ -46,7 +48,7 @@ private static void toTextBlockRecord(List lines, String shift, String a } } - private static void toTextBlockColl(List lines, String shift, String attrName, Collection coll, String indent) { + private static void toTextBlockCollection(List lines, String shift, String attrName, Collection coll, String indent) { if (attrName == null) { lines.add(String.format("%s[", shift)); } else { diff --git a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json index f562b1e..0547b6c 100644 --- a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json +++ b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json @@ -21,7 +21,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ManifestVersionProvider", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -30,7 +30,16 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptions", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -39,7 +48,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$StaticLimit", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit$StaticLimit", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -48,7 +57,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$DynamicLimit", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit$DynamicLimit", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -57,7 +66,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$DynamicLimitItem", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit$DynamicLimitItem", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -66,7 +75,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -75,7 +84,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AlwaysTrue", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AlwaysTrue", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -84,7 +93,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AlwaysFalse", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AlwaysFalse", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -93,7 +102,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AllOf", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AllOf", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -102,7 +111,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AnyOf", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AnyOf", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -111,7 +120,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$NoneOf", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$NoneOf", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -120,7 +129,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$NameGlob", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$NameGlob", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -129,7 +138,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$PathGlob", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$PathGlob", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -137,6 +146,13 @@ "allDeclaredFields": true, "allPublicFields": true } + ], + + "resources": [ + { + "glob": "/META-INF/MANIFEST.MF" + } ] + } \ No newline at end of file From 152f1a5a1db20fad520f4fb640bb2f59fcc9bf96 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Wed, 29 Oct 2025 08:42:10 +0100 Subject: [PATCH 17/57] Fix Sonar --- pom.xml | 1 - .../cli/ConsoleOutput.java | 8 ++++---- .../cli/PrettyPrintCommand.java | 8 +++++--- .../cli/options/ExternalOptions.java | 7 ++++--- .../cli/options/ExternalOptionsReader.java | 2 +- .../cli/options/RecordUtils.java | 16 ++++++++++++---- 6 files changed, 26 insertions(+), 16 deletions(-) diff --git a/pom.xml b/pom.xml index 9358965..b589d7f 100644 --- a/pom.xml +++ b/pom.xml @@ -151,7 +151,6 @@ false - full diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java index 77d2725..492d7ec 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java @@ -23,21 +23,21 @@ private void disableAllLoggers() { } private void printOut(String msg, Object... args) { - printf(System.out, msg, args); + printfln(System.out, msg, args); } private void printErr(String msg, Object... args) { - printf(System.err, msg, args); + printfln(System.err, msg, args); } - private void printf(PrintStream dest, String msg, Object... args) { + private void printfln(PrintStream dest, String msg, Object... args) { dest.printf(msg, args); dest.println(); // Because "printf" does not print line return } public void printDebug(String msg, Object... args) { // Could not (yet) make Logger level work within native image, so fallback to plain console output (for now) - if (debug && msg != null) { + if (debug) { printOut(msg, args); } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java index 1af5dbb..d61ca57 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java @@ -24,6 +24,8 @@ @NullMarked class PrettyPrintCommand implements Callable { + private static final String DEFAULT_OPTION_FILENAME = ".prettyprint"; + @Nullable @Parameters(index = "0", description = "The path to pretty print", arity = "0..1") private File target; @@ -84,9 +86,9 @@ private PrettyPrintOptions detectOptions(Path targetPath, ConsoleOutput output) return options; } else { var potentialOptions = new ArrayList(); - potentialOptions.add(targetPath.resolve(".prettyprint")); - potentialOptions.add(Path.of(".").resolve(".prettyprint")); - potentialOptions.add(Path.of(System.getProperty("user.home")).resolve(".prettyprint")); + potentialOptions.add(targetPath.resolve(DEFAULT_OPTION_FILENAME)); + potentialOptions.add(Path.of(".").resolve(DEFAULT_OPTION_FILENAME)); + potentialOptions.add(Path.of(System.getProperty("user.home")).resolve(DEFAULT_OPTION_FILENAME)); var options = reader.readOptions(potentialOptions); if (options != null) { return options; diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java index af81155..3bd991f 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java @@ -1,14 +1,15 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import jakarta.validation.Valid; +import org.jspecify.annotations.Nullable; record ExternalOptions( - Boolean emojis, - @Valid ChildLimit childLimit + @Nullable Boolean emojis, + @Valid @Nullable ChildLimit childLimit ) { public ExternalOptions(Boolean emojis, ChildLimit childLimit) { - this.emojis = emojis == null ? false : emojis; + this.emojis = emojis; this.childLimit = childLimit; } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java index f62dae3..c6202ea 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java @@ -113,7 +113,7 @@ private ExternalOptions loadAndValidate(Path optionsPath) { private PrettyPrintOptions mapToOptions(ExternalOptions externalOptions) { var options = PrettyPrintOptions.createDefault(); - if (externalOptions.emojis()) { + if (Boolean.TRUE.equals(externalOptions.emojis())) { options = options.withDefaultEmojis(); } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java index 0eff36a..63ccfbf 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java @@ -4,20 +4,28 @@ import java.util.Collection; import java.util.List; import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; @NullMarked class RecordUtils { + private RecordUtils() { + // Helper class + } + /** * Inspired from: https://sormuras.github.io/blog/2020-05-06-records-to-text-block.html */ - static String toTextBlock(Record rec) { + static String toTextBlock(@Nullable Record rec) { + if (rec == null) { + return "null"; + } var lines = new ArrayList(); toTextBlock(lines, "", null, rec, " "); return String.join(System.lineSeparator(), lines); } - private static void toTextBlock(List lines, String shift, String attrName, Object value, String indent) { + private static void toTextBlock(List lines, String shift, @Nullable String attrName, Object value, String indent) { var nested = value.getClass(); if (nested.isRecord()) { toTextBlockRecord(lines, shift, attrName, (Record) value, indent); @@ -28,7 +36,7 @@ private static void toTextBlock(List lines, String shift, String attrNam } } - private static void toTextBlockRecord(List lines, String shift, String attrName, Record rec, String indent) { + private static void toTextBlockRecord(List lines, String shift, @Nullable String attrName, Record rec, String indent) { if (attrName == null) { lines.add(String.format("%s%s", shift, rec.getClass().getSimpleName())); } else { @@ -48,7 +56,7 @@ private static void toTextBlockRecord(List lines, String shift, String a } } - private static void toTextBlockCollection(List lines, String shift, String attrName, Collection coll, String indent) { + private static void toTextBlockCollection(List lines, String shift, @Nullable String attrName, Collection coll, String indent) { if (attrName == null) { lines.add(String.format("%s[", shift)); } else { From a0d46fca3a2ffdd2354345c5840af39d0515e8d1 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Wed, 29 Oct 2025 09:19:27 +0100 Subject: [PATCH 18/57] Fix Sonar --- .github/workflows/create-github-release.yaml | 4 +- .../cli/options/ExternalOptions.java | 5 -- .../cli/options/ExternalOptionsReader.java | 62 +++++++++---------- 3 files changed, 31 insertions(+), 40 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 72de3d3..af26184 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -38,7 +38,7 @@ jobs: uses: actions/checkout@v4 - name: Set up GraalVM - uses: graalvm/setup-graalvm@v1 + uses: graalvm/setup-graalvm@eec48106e0bf45f2976c2ff0c3e22395cced8243 with: java-version: "21" distribution: "graalvm" @@ -130,7 +130,7 @@ jobs: echo "body_path=release_notes.tmp" >> $GITHUB_OUTPUT - name: Create GitHub Release - uses: softprops/action-gh-release@v2 + uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 with: name: "JFileTreePrettyPrinter ${{ github.ref_name }}" body_path: ${{ steps.changelog.outputs.body_path }} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java index 3bd991f..681d5f2 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java @@ -8,9 +8,4 @@ record ExternalOptions( @Valid @Nullable ChildLimit childLimit ) { - public ExternalOptions(Boolean emojis, ChildLimit childLimit) { - this.emojis = emojis; - this.childLimit = childLimit; - } - } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java index c6202ea..b12cea4 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java @@ -53,61 +53,57 @@ private void printFailure(boolean required, String msg, Object... args) { @Nullable private PrettyPrintOptions tryCandidate(Path optionsPath, boolean required) { - if (!optionsPath.toFile().exists()) { + var optionsFile = optionsPath.toFile(); + if (!optionsFile.exists()) { printFailure(required, "Options file not found: %s", optionsPath); return null; } - if (!optionsPath.toFile().isFile()) { + if (!optionsFile.isFile()) { printFailure(required, "Options file is actually not a file: %s", optionsPath); return null; } - if (!optionsPath.toFile().canRead()) { + if (!optionsFile.canRead()) { printFailure(required, "Options file exist but is not readable: %s", optionsPath); return null; } output.printDebug("Options file found: %s", optionsPath); - ExternalOptions externalOptions; + ExternalOptions externalOptions = load(optionsPath, required); + validate(optionsPath, externalOptions, required); + + return mapToOptions(externalOptions); + } + + private ExternalOptions load(Path optionsPath, boolean required) { try { - externalOptions = loadAndValidate(optionsPath); - } catch (ConstraintViolationException e) { - printFailure(required, "Invalid options file: %s\n%s", optionsPath, e.getMessage()); - return null; + var mapper = JsonMapper.builder().build(); + ExternalOptions externalOptions = mapper.readValue(optionsPath, ExternalOptions.class); + output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); + return externalOptions; } catch (RuntimeException e) { printFailure(required, "IO error or malformed options file: %s\n%s", optionsPath, e.getMessage()); return null; } - - return mapToOptions(externalOptions); } - private ExternalOptions loadAndValidate(Path optionsPath) { - /* - * READ - */ - var mapper = JsonMapper.builder().build(); - ExternalOptions externalOptions = mapper.readValue(optionsPath, ExternalOptions.class); - - /* - * VALIDATE - */ - var validatorFactory = Validation.byDefaultProvider() - .configure() - .messageInterpolator(new ParameterMessageInterpolator()) - .buildValidatorFactory(); - var validator = validatorFactory.getValidator(); - - var violations = validator.validate(externalOptions); - if (!violations.isEmpty()) { - throw new ConstraintViolationException(violations); + private void validate(Path optionsPath, ExternalOptions externalOptions, boolean required) { + try { + var validatorFactory = Validation.byDefaultProvider() + .configure() + .messageInterpolator(new ParameterMessageInterpolator()) + .buildValidatorFactory(); + var validator = validatorFactory.getValidator(); + + var violations = validator.validate(externalOptions); + if (!violations.isEmpty()) { + throw new ConstraintViolationException(violations); + } + } catch (ConstraintViolationException e) { + printFailure(required, "Invalid options file: %s\n%s", optionsPath, e.getMessage()); } - - output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); - - return externalOptions; } private PrettyPrintOptions mapToOptions(ExternalOptions externalOptions) { From 4e8610d6296a752308fb7156f477efb11b4c6fb5 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Wed, 29 Oct 2025 09:19:41 +0100 Subject: [PATCH 19/57] Map external child limit --- .../cli/PrettyPrintCommand.java | 4 +- .../cli/options/ExternalOptionsReader.java | 54 +++++++++++++++---- 2 files changed, 47 insertions(+), 11 deletions(-) diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java index d61ca57..0074a48 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java @@ -79,7 +79,7 @@ private PrettyPrintOptions detectOptions(Path targetPath, ConsoleOutput output) var reader = new ExternalOptionsReader(output); if (optionsFile != null) { var path = optionsFile.toPath().toAbsolutePath().normalize(); - var options = reader.readOptions(path); + var options = reader.readOptions(targetPath, path); if (options == null) { System.exit(1); } @@ -89,7 +89,7 @@ private PrettyPrintOptions detectOptions(Path targetPath, ConsoleOutput output) potentialOptions.add(targetPath.resolve(DEFAULT_OPTION_FILENAME)); potentialOptions.add(Path.of(".").resolve(DEFAULT_OPTION_FILENAME)); potentialOptions.add(Path.of(System.getProperty("user.home")).resolve(DEFAULT_OPTION_FILENAME)); - var options = reader.readOptions(potentialOptions); + var options = reader.readOptions(targetPath, potentialOptions); if (options != null) { return options; } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java index b12cea4..57806e1 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java @@ -1,10 +1,13 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import jakarta.validation.ConstraintViolationException; import jakarta.validation.Validation; import java.nio.file.Path; +import java.nio.file.PathMatcher; import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; @@ -20,19 +23,19 @@ public ExternalOptionsReader(ConsoleOutput output) { } @Nullable - public PrettyPrintOptions readOptions(Path optionsPath) { + public PrettyPrintOptions readOptions(Path targetPath, Path optionsPath) { optionsPath = optionsPath.toAbsolutePath().normalize(); - return tryCandidate(optionsPath, true); + return tryCandidate(targetPath, optionsPath, true); } @Nullable - public PrettyPrintOptions readOptions(Iterable potentialOptions) { + public PrettyPrintOptions readOptions(Path targetPath, Iterable potentialOptions) { PrettyPrintOptions options = null; for (var candidateOptionPath : potentialOptions) { candidateOptionPath = candidateOptionPath.toAbsolutePath().normalize(); - options = tryCandidate(candidateOptionPath, false); + options = tryCandidate(targetPath, candidateOptionPath, false); if (options != null) { break; } @@ -51,7 +54,7 @@ private void printFailure(boolean required, String msg, Object... args) { } @Nullable - private PrettyPrintOptions tryCandidate(Path optionsPath, boolean required) { + private PrettyPrintOptions tryCandidate(Path targetPath, Path optionsPath, boolean required) { var optionsFile = optionsPath.toFile(); if (!optionsFile.exists()) { @@ -74,7 +77,7 @@ private PrettyPrintOptions tryCandidate(Path optionsPath, boolean required) { ExternalOptions externalOptions = load(optionsPath, required); validate(optionsPath, externalOptions, required); - return mapToOptions(externalOptions); + return mapToOptions(targetPath, externalOptions); } private ExternalOptions load(Path optionsPath, boolean required) { @@ -106,14 +109,47 @@ private void validate(Path optionsPath, ExternalOptions externalOptions, boolean } } - private PrettyPrintOptions mapToOptions(ExternalOptions externalOptions) { + private PrettyPrintOptions mapToOptions(Path targetPath, ExternalOptions externalOptions) { var options = PrettyPrintOptions.createDefault(); + options = mapEmojis(options, externalOptions); + options = mapChildLimit(options, externalOptions, targetPath); + return options; + } + private PrettyPrintOptions mapEmojis(PrettyPrintOptions options, ExternalOptions externalOptions) { if (Boolean.TRUE.equals(externalOptions.emojis())) { - options = options.withDefaultEmojis(); + return options.withDefaultEmojis(); } - return options; } + private PrettyPrintOptions mapChildLimit(PrettyPrintOptions options, ExternalOptions externalOptions, Path targetPath) { + if (externalOptions.childLimit() == null) { + return options; + } + return switch (externalOptions.childLimit()) { + case ChildLimit.StaticLimit staticLimit -> options.withChildLimit(staticLimit.limit()); + case ChildLimit.DynamicLimit dynLimit -> { + var limitBuilder = ChildLimits.builder(); + for (var limit : dynLimit.limits()) { + limitBuilder.add(mapMatcher(limit.matcher(), targetPath), limit.limit()); + } + options.withChildLimit(limitBuilder.build()); + yield options; + } + }; + } + + private PathMatcher mapMatcher(Matcher matcher, Path targetPath) { + return switch (matcher) { + case Matcher.AlwaysTrue alwaysTrue -> (p) -> true; + case Matcher.AlwaysFalse alwaysFalse -> (p) -> false; + case Matcher.AllOf allOf -> PathMatchers.allOf(allOf.matchers().stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); + case Matcher.AnyOf anyOf -> PathMatchers.anyOf(anyOf.matchers().stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); + case Matcher.NoneOf noneOf -> PathMatchers.noneOf(noneOf.matchers().stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); + case Matcher.NameGlob nameGlob -> PathMatchers.hasNameMatchingGlob(nameGlob.glob()); + case Matcher.PathGlob pathGlob -> PathMatchers.hasRelativePathMatchingGlob(targetPath, pathGlob.glob()); + }; + } + } From 23cf1139157ffa046378fb602fe7750a107c6bc1 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Tue, 4 Nov 2025 21:56:32 +0100 Subject: [PATCH 20/57] Work in progress --- .../cli/ConsoleOutput.java | 7 +- .../cli/FileTreePrettyPrinterCommandLine.java | 15 +- .../cli/PrettyPrintCommand.java | 55 +++--- .../options/DefaultExternalOptionsMapper.java | 58 +++++++ .../cli/options/ExternalOptionsException.java | 25 +++ .../cli/options/ExternalOptionsMapper.java | 17 ++ .../cli/options/ExternalOptionsReader.java | 157 ++---------------- .../FallbackExternalOptionsReader.java | 51 ++++++ .../options/SimpleExternalOptionsReader.java | 72 ++++++++ .../FileTreePrettyPrinterCommandLineTest.java | 47 ++++++ 10 files changed, 327 insertions(+), 177 deletions(-) create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java create mode 100644 src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java index 492d7ec..7cdcf85 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java @@ -31,14 +31,13 @@ private void printErr(String msg, Object... args) { } private void printfln(PrintStream dest, String msg, Object... args) { - dest.printf(msg, args); - dest.println(); // Because "printf" does not print line return + dest.printf(msg + "\n", args);// Because "printf" does not print line return } public void printDebug(String msg, Object... args) { // Could not (yet) make Logger level work within native image, so fallback to plain console output (for now) if (debug) { - printOut(msg, args); + printOut("[DEBUG] " + msg, args); } } @@ -47,7 +46,7 @@ public void print(String msg, Object... args) { } public void printError(String msg, Object... args) { - printErr(msg, args); + printErr("[ERROR] " + msg, args); } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java index 7aa925d..2190d57 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java @@ -1,13 +1,22 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsMapper; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsReader; import picocli.CommandLine; class FileTreePrettyPrinterCommandLine { public static void main(String[] args) { - var cmd = new CommandLine(new PrettyPrintCommand()); - int exitCode = cmd.execute(args); - System.exit(exitCode); + System.exit(executeCommand(args)); + } + + static int executeCommand(String[] args) { + var reader = ExternalOptionsReader.createDefault(); + var mapper = ExternalOptionsMapper.createDefault(); + + var cmd = new CommandLine(new PrettyPrintCommand(reader, mapper)); + + return cmd.execute(args); } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java index 0074a48..812d46a 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java @@ -1,11 +1,14 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsException; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsMapper; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsReader; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; +import jakarta.validation.ConstraintViolationException; import java.io.File; import java.nio.file.Path; -import java.util.ArrayList; +import java.util.Objects; import java.util.concurrent.Callable; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; @@ -24,7 +27,15 @@ @NullMarked class PrettyPrintCommand implements Callable { - private static final String DEFAULT_OPTION_FILENAME = ".prettyprint"; + private final ExternalOptionsReader reader; + private final ExternalOptionsMapper mapper; + + public PrettyPrintCommand(ExternalOptionsReader reader, ExternalOptionsMapper mapper) { + this.reader = Objects.requireNonNull(reader, "reader is null"); + this.mapper = Objects.requireNonNull(mapper, "mapper is null"); + } + + // ---------- CLI args ---------- @Nullable @Parameters(index = "0", description = "The path to pretty print", arity = "0..1") @@ -37,6 +48,8 @@ class PrettyPrintCommand implements Callable { @Option(names = { "-d", "--debug" }, description = "debug mode") private boolean debug; + // ---------- Command ---------- + @Override public Integer call() throws Exception { @@ -48,7 +61,18 @@ public Integer call() throws Exception { return 1; } - var options = detectOptions(targetPath, output); + PrettyPrintOptions options; + try { + Path optionsPath = optionsFile == null ? null : optionsFile.toPath().toAbsolutePath().normalize(); + var externalOptions = reader.readExternalOptions(output, targetPath, optionsPath); + options = mapper.mapToOptions(targetPath, externalOptions); + } catch (ExternalOptionsException e) { + output.printError(e.getMessage() + ": " + optionsFile.toString()); + return 1; + } catch (ConstraintViolationException e) { + output.printError(e.getMessage() + ": " + optionsFile.toString()); + return 1; + } try { var printer = FileTreePrettyPrinter.builder().withOptions(options).build(); @@ -74,29 +98,4 @@ private Path detectTargetPath(ConsoleOutput output) { return path; } - private PrettyPrintOptions detectOptions(Path targetPath, ConsoleOutput output) { - - var reader = new ExternalOptionsReader(output); - if (optionsFile != null) { - var path = optionsFile.toPath().toAbsolutePath().normalize(); - var options = reader.readOptions(targetPath, path); - if (options == null) { - System.exit(1); - } - return options; - } else { - var potentialOptions = new ArrayList(); - potentialOptions.add(targetPath.resolve(DEFAULT_OPTION_FILENAME)); - potentialOptions.add(Path.of(".").resolve(DEFAULT_OPTION_FILENAME)); - potentialOptions.add(Path.of(System.getProperty("user.home")).resolve(DEFAULT_OPTION_FILENAME)); - var options = reader.readOptions(targetPath, potentialOptions); - if (options != null) { - return options; - } - output.printDebug("No options file provided/found!"); - return PrettyPrintOptions.createDefault(); - } - - } - } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java new file mode 100644 index 0000000..621a062 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java @@ -0,0 +1,58 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; +import java.nio.file.Path; +import java.nio.file.PathMatcher; +import org.jspecify.annotations.Nullable; + +class DefaultExternalOptionsMapper implements ExternalOptionsMapper { + + @Override + public PrettyPrintOptions mapToOptions(Path targetPath, @Nullable ExternalOptions externalOptions) { + var options = PrettyPrintOptions.createDefault(); + if (externalOptions != null) { + options = mapEmojis(options, externalOptions); + options = mapChildLimit(options, externalOptions, targetPath); + } + return options; + } + + private PrettyPrintOptions mapEmojis(PrettyPrintOptions options, ExternalOptions externalOptions) { + if (Boolean.TRUE.equals(externalOptions.emojis())) { + return options.withDefaultEmojis(); + } + return options; + } + + private PrettyPrintOptions mapChildLimit(PrettyPrintOptions options, ExternalOptions externalOptions, Path targetPath) { + if (externalOptions.childLimit() == null) { + return options; + } + return switch (externalOptions.childLimit()) { + case ChildLimit.StaticLimit(var limit) -> options.withChildLimit(limit); + case ChildLimit.DynamicLimit(var limits) -> { + var limitBuilder = ChildLimits.builder(); + for (var limit : limits) { + limitBuilder.add(mapMatcher(limit.matcher(), targetPath), limit.limit()); + } + options.withChildLimit(limitBuilder.build()); + yield options; + } + }; + } + + private PathMatcher mapMatcher(Matcher matcher, Path targetPath) { + return switch (matcher) { + case Matcher.AlwaysTrue() -> (p) -> true; + case Matcher.AlwaysFalse() -> (p) -> false; + case Matcher.AllOf(var matchers) -> PathMatchers.allOf(matchers.stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); + case Matcher.AnyOf(var matchers) -> PathMatchers.anyOf(matchers.stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); + case Matcher.NoneOf(var matchers) -> PathMatchers.noneOf(matchers.stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); + case Matcher.NameGlob(var glob) -> PathMatchers.hasNameMatchingGlob(glob); + case Matcher.PathGlob(var glob) -> PathMatchers.hasRelativePathMatchingGlob(targetPath, glob); + }; + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java new file mode 100644 index 0000000..9bcc31b --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java @@ -0,0 +1,25 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import java.nio.file.Path; +import org.jspecify.annotations.NullMarked; + +@NullMarked +public class ExternalOptionsException extends RuntimeException { + + private final Path optionsPath; + + public ExternalOptionsException(Path optionsPath, String message, Throwable cause) { + super(message, cause); + this.optionsPath = optionsPath; + } + + public ExternalOptionsException(Path optionsPath, String message) { + super(message); + this.optionsPath = optionsPath; + } + + public Path getOptionsPath() { + return optionsPath; + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java new file mode 100644 index 0000000..5cbc054 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java @@ -0,0 +1,17 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; +import java.nio.file.Path; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +@NullMarked +public interface ExternalOptionsMapper { + + PrettyPrintOptions mapToOptions(Path targetPath, @Nullable ExternalOptions externalOptions); + + static ExternalOptionsMapper createDefault() { + return new DefaultExternalOptionsMapper(); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java index 57806e1..3e35333 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java @@ -1,155 +1,28 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; -import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; -import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; -import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; -import jakarta.validation.ConstraintViolationException; -import jakarta.validation.Validation; import java.nio.file.Path; -import java.nio.file.PathMatcher; -import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; +import java.util.List; +import java.util.function.Function; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; -import tools.jackson.databind.json.JsonMapper; @NullMarked -public class ExternalOptionsReader { - - private final ConsoleOutput output; - - public ExternalOptionsReader(ConsoleOutput output) { - this.output = output; - } +public interface ExternalOptionsReader { @Nullable - public PrettyPrintOptions readOptions(Path targetPath, Path optionsPath) { - optionsPath = optionsPath.toAbsolutePath().normalize(); - return tryCandidate(targetPath, optionsPath, true); - } - - @Nullable - public PrettyPrintOptions readOptions(Path targetPath, Iterable potentialOptions) { - - PrettyPrintOptions options = null; - - for (var candidateOptionPath : potentialOptions) { - candidateOptionPath = candidateOptionPath.toAbsolutePath().normalize(); - options = tryCandidate(targetPath, candidateOptionPath, false); - if (options != null) { - break; - } - } - - return options; - - } - - private void printFailure(boolean required, String msg, Object... args) { - if (required) { - output.printError(msg, args); - } else { - output.printDebug(msg, args); - } - } - - @Nullable - private PrettyPrintOptions tryCandidate(Path targetPath, Path optionsPath, boolean required) { - - var optionsFile = optionsPath.toFile(); - if (!optionsFile.exists()) { - printFailure(required, "Options file not found: %s", optionsPath); - return null; - } - - if (!optionsFile.isFile()) { - printFailure(required, "Options file is actually not a file: %s", optionsPath); - return null; - } - - if (!optionsFile.canRead()) { - printFailure(required, "Options file exist but is not readable: %s", optionsPath); - return null; - } - - output.printDebug("Options file found: %s", optionsPath); - - ExternalOptions externalOptions = load(optionsPath, required); - validate(optionsPath, externalOptions, required); - - return mapToOptions(targetPath, externalOptions); - } - - private ExternalOptions load(Path optionsPath, boolean required) { - try { - var mapper = JsonMapper.builder().build(); - ExternalOptions externalOptions = mapper.readValue(optionsPath, ExternalOptions.class); - output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); - return externalOptions; - } catch (RuntimeException e) { - printFailure(required, "IO error or malformed options file: %s\n%s", optionsPath, e.getMessage()); - return null; - } - } - - private void validate(Path optionsPath, ExternalOptions externalOptions, boolean required) { - try { - var validatorFactory = Validation.byDefaultProvider() - .configure() - .messageInterpolator(new ParameterMessageInterpolator()) - .buildValidatorFactory(); - var validator = validatorFactory.getValidator(); - - var violations = validator.validate(externalOptions); - if (!violations.isEmpty()) { - throw new ConstraintViolationException(violations); - } - } catch (ConstraintViolationException e) { - printFailure(required, "Invalid options file: %s\n%s", optionsPath, e.getMessage()); - } - } - - private PrettyPrintOptions mapToOptions(Path targetPath, ExternalOptions externalOptions) { - var options = PrettyPrintOptions.createDefault(); - options = mapEmojis(options, externalOptions); - options = mapChildLimit(options, externalOptions, targetPath); - return options; - } - - private PrettyPrintOptions mapEmojis(PrettyPrintOptions options, ExternalOptions externalOptions) { - if (Boolean.TRUE.equals(externalOptions.emojis())) { - return options.withDefaultEmojis(); - } - return options; - } - - private PrettyPrintOptions mapChildLimit(PrettyPrintOptions options, ExternalOptions externalOptions, Path targetPath) { - if (externalOptions.childLimit() == null) { - return options; - } - return switch (externalOptions.childLimit()) { - case ChildLimit.StaticLimit staticLimit -> options.withChildLimit(staticLimit.limit()); - case ChildLimit.DynamicLimit dynLimit -> { - var limitBuilder = ChildLimits.builder(); - for (var limit : dynLimit.limits()) { - limitBuilder.add(mapMatcher(limit.matcher(), targetPath), limit.limit()); - } - options.withChildLimit(limitBuilder.build()); - yield options; - } - }; - } - - private PathMatcher mapMatcher(Matcher matcher, Path targetPath) { - return switch (matcher) { - case Matcher.AlwaysTrue alwaysTrue -> (p) -> true; - case Matcher.AlwaysFalse alwaysFalse -> (p) -> false; - case Matcher.AllOf allOf -> PathMatchers.allOf(allOf.matchers().stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); - case Matcher.AnyOf anyOf -> PathMatchers.anyOf(anyOf.matchers().stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); - case Matcher.NoneOf noneOf -> PathMatchers.noneOf(noneOf.matchers().stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); - case Matcher.NameGlob nameGlob -> PathMatchers.hasNameMatchingGlob(nameGlob.glob()); - case Matcher.PathGlob pathGlob -> PathMatchers.hasRelativePathMatchingGlob(targetPath, pathGlob.glob()); - }; + ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath, @Nullable Path optionsPath); + + static ExternalOptionsReader createDefault() { + final String DEFAULT_OPTION_FILENAME = ".prettyprint"; + + var simpleReader = new SimpleExternalOptionsReader(); + Function> fallbackOptionsFunction = targetPath -> List.of( + targetPath.resolve(DEFAULT_OPTION_FILENAME), + Path.of(".").resolve(DEFAULT_OPTION_FILENAME), + Path.of(System.getProperty("user.home")).resolve(DEFAULT_OPTION_FILENAME) + ); + return new FallbackExternalOptionsReader(simpleReader, fallbackOptionsFunction); } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java new file mode 100644 index 0000000..4dc1c32 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java @@ -0,0 +1,51 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import java.nio.file.Path; +import java.util.Objects; +import java.util.function.Function; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +@NullMarked +public class FallbackExternalOptionsReader implements ExternalOptionsReader { + + private final ExternalOptionsReader delegateReader; + private final Function> fallbackPathsFunction; + + public FallbackExternalOptionsReader(ExternalOptionsReader delegateReader, Function> fallbackPathsFunction) { + super(); + this.delegateReader = Objects.requireNonNull(delegateReader, "delegateReader is null"); + this.fallbackPathsFunction = Objects.requireNonNull(fallbackPathsFunction, "fallbackPathsFunction is null"); + } + + @Override + @Nullable + public ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath, @Nullable Path optionsPath) { + if (optionsPath != null) { + var options = delegateReader.readExternalOptions(output, targetPath, optionsPath); + if (options == null) { + throw new ExternalOptionsException(optionsPath, "Options file does not exist"); + } + return options; + } + output.printDebug("No options file provided, looking for fallback options files..."); + var fallbackOptions = fallbackPathsFunction.apply(targetPath); + return readFallbackOptions(output, targetPath, fallbackOptions); + } + + @Nullable + private ExternalOptions readFallbackOptions(ConsoleOutput output, Path targetPath, Iterable fallbackOptionsPaths) { + for (var fallbackOptionsPath : fallbackOptionsPaths) { + Objects.requireNonNull(fallbackOptionsPath, "one of fallback option paths is null"); + var options = delegateReader.readExternalOptions(output, targetPath, fallbackOptionsPath); + if (options != null) { + return options; + } + output.printDebug("Options file does not exist: " + fallbackOptionsPath.toString()); + } + output.printDebug("No options file provided/found"); + return null; + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java new file mode 100644 index 0000000..de739ae --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java @@ -0,0 +1,72 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validation; +import java.nio.file.Path; +import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; +import tools.jackson.databind.json.JsonMapper; + +@NullMarked +public class SimpleExternalOptionsReader implements ExternalOptionsReader { + + @Override + @Nullable + public ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath, Path optionsPath) { + + if (optionsPath == null) { + throw new ExternalOptionsException(optionsPath, "null options path"); + } + + optionsPath = optionsPath.toAbsolutePath().normalize(); + var optionsFile = optionsPath.toFile(); + if (!optionsFile.exists()) { + return null; + } + if (!optionsFile.isFile()) { + throw new ExternalOptionsException(optionsPath, "Options file is actually not a file"); + } + if (!optionsFile.canRead()) { + throw new ExternalOptionsException(optionsPath, "Options file exist but is not readable"); + } + + output.printDebug("Options file found: %s", optionsPath); + + var externalOptions = load(output, optionsPath); + validate(output, optionsPath, externalOptions); + return externalOptions; + } + + private ExternalOptions load(ConsoleOutput output, Path optionsPath) { + try { + var mapper = JsonMapper.builder().build(); + ExternalOptions externalOptions = mapper.readValue(optionsPath, ExternalOptions.class); + output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); + return externalOptions; + } catch (RuntimeException e) { + throw new ExternalOptionsException(optionsPath, "IO error or malformed options file", e); + } + } + + private void validate(ConsoleOutput output, Path optionsPath, ExternalOptions externalOptions) { + try { + var validatorFactory = Validation.byDefaultProvider() + .configure() + .messageInterpolator(new ParameterMessageInterpolator()) + .buildValidatorFactory(); + var validator = validatorFactory.getValidator(); + + var violations = validator.validate(externalOptions); + if (!violations.isEmpty()) { + throw new ConstraintViolationException(violations); + } + + output.printDebug("Options file is valid"); + } catch (ConstraintViolationException e) { + throw new ExternalOptionsException(optionsPath, "Invalid options file", e); + } + } + +} diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java new file mode 100644 index 0000000..eb43c44 --- /dev/null +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -0,0 +1,47 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.PrintStream; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +class FileTreePrettyPrinterCommandLineTest { + + private final PrintStream DEFAULT_SYSTEM_OUT = System.out; + + private ByteArrayOutputStream modifiedOut; + + @BeforeEach + void prepareSystemOut() { + modifiedOut = new ByteArrayOutputStream(); + System.setOut(new PrintStream(modifiedOut)); + } + + @AfterEach + void restoreSystemOut() { + if (modifiedOut != null) { + + } + System.setOut(DEFAULT_SYSTEM_OUT); + } + + @Test + void nominal() throws IOException { + String targetPath = "src/example/resources/base"; + String[] args = { targetPath }; + + FileTreePrettyPrinterCommandLine.executeCommand(args); + + modifiedOut.flush(); + String allWrittenLines = new String(modifiedOut.toByteArray()); + System.setOut(DEFAULT_SYSTEM_OUT); + + assertThat(allWrittenLines).isEqualTo(FileTreePrettyPrinter.createDefault().prettyPrint(targetPath) + "\n"); + } + +} From 5f0504761f4997700b389e9732c5d491bfe057bb Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Thu, 6 Nov 2025 23:28:16 +0100 Subject: [PATCH 21/57] Refactor & tests --- pom.xml | 5 + .../cli/ConsoleOutput.java | 52 ----- .../cli/FileTreePrettyPrinterCommandLine.java | 39 +++- .../cli/PrettyPrintCommand.java | 46 ++-- .../cli/{options => }/RecordUtils.java | 9 +- .../DefaultExecutionExceptionHandler.java | 45 ++++ .../ExternalOptionsException.java | 4 +- .../cli/io/ConsoleOutput.java | 25 +++ .../cli/io/DefaultConsoleOutput.java | 76 +++++++ .../cli/options/DefaultOptionsLoader.java | 32 +++ .../cli/options/OptionsLoader.java | 22 ++ .../DefaultExternalOptionsMapper.java | 18 +- .../{ => mapper}/ExternalOptionsMapper.java | 6 +- .../cli/options/{ => model}/ChildLimit.java | 4 +- .../options/{ => model}/ExternalOptions.java | 4 +- .../cli/options/{ => model}/Matcher.java | 4 +- .../{ => reader}/ExternalOptionsReader.java | 13 +- .../FallbackExternalOptionsReader.java | 22 +- .../SimpleExternalOptionsReader.java | 27 ++- .../reachability-metadata.json | 26 +-- .../FileTreePrettyPrinterCommandLineTest.java | 202 ++++++++++++++++-- .../cli/ManifestVersionProviderTest.java | 31 +++ .../cli/RecordUtilsTest.java | 41 ++++ .../resources/cli/base/folder_a/file_1.txt | 0 .../resources/cli/base/folder_a/file_2.java | 0 .../resources/cli/base/folder_a/file_3.php | 0 .../resources/cli/base/folder_a/file_4.jpeg | 0 .../resources/cli/base/folder_b/file_1.txt | 0 .../resources/cli/base/folder_b/file_2.java | 0 .../resources/cli/base/folder_b/file_3.php | 0 .../resources/cli/base/folder_b/file_4.jpeg | 0 .../resources/cli/base/folder_c/file_1.txt | 0 .../resources/cli/base/folder_c/file_2.java | 0 .../resources/cli/base/folder_c/file_3.php | 0 .../resources/cli/base/folder_c/file_4.jpeg | 0 .../resources/cli/base/folder_d/file_1.txt | 0 .../resources/cli/base/folder_d/file_2.java | 0 .../resources/cli/base/folder_d/file_3.php | 0 .../resources/cli/base/folder_d/file_4.jpeg | 0 .../folder_z1/folder_z2/folder_z3/file_1.txt | 0 .../folder_z1/folder_z2/folder_z3/file_2.java | 0 .../folder_z1/folder_z2/folder_z3/file_3.php | 0 .../folder_z1/folder_z2/folder_z3/file_4.jpeg | 0 .../cli/options/childLimit_dynamic_allOf.yaml | 19 ++ .../cli/options/childLimit_dynamic_anyOf.yaml | 19 ++ .../childLimit_dynamic_everything.yaml | 6 + .../cli/options/childLimit_dynamic_glob.yaml | 11 + .../options/childLimit_dynamic_noneOf.yaml | 19 ++ .../cli/options/childLimit_static.yaml | 3 + src/test/resources/cli/options/emojis.yaml | 1 + 50 files changed, 663 insertions(+), 168 deletions(-) delete mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/{options => }/RecordUtils.java (92%) create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/{options => exception}/ExternalOptionsException.java (80%) create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => mapper}/DefaultExternalOptionsMapper.java (78%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => mapper}/ExternalOptionsMapper.java (66%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => model}/ChildLimit.java (94%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => model}/ExternalOptions.java (83%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => model}/Matcher.java (96%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => reader}/ExternalOptionsReader.java (56%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => reader}/FallbackExternalOptionsReader.java (56%) rename src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/{ => reader}/SimpleExternalOptionsReader.java (67%) create mode 100644 src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java create mode 100644 src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java create mode 100644 src/test/resources/cli/base/folder_a/file_1.txt create mode 100644 src/test/resources/cli/base/folder_a/file_2.java create mode 100644 src/test/resources/cli/base/folder_a/file_3.php create mode 100644 src/test/resources/cli/base/folder_a/file_4.jpeg create mode 100644 src/test/resources/cli/base/folder_b/file_1.txt create mode 100644 src/test/resources/cli/base/folder_b/file_2.java create mode 100644 src/test/resources/cli/base/folder_b/file_3.php create mode 100644 src/test/resources/cli/base/folder_b/file_4.jpeg create mode 100644 src/test/resources/cli/base/folder_c/file_1.txt create mode 100644 src/test/resources/cli/base/folder_c/file_2.java create mode 100644 src/test/resources/cli/base/folder_c/file_3.php create mode 100644 src/test/resources/cli/base/folder_c/file_4.jpeg create mode 100644 src/test/resources/cli/base/folder_d/file_1.txt create mode 100644 src/test/resources/cli/base/folder_d/file_2.java create mode 100644 src/test/resources/cli/base/folder_d/file_3.php create mode 100644 src/test/resources/cli/base/folder_d/file_4.jpeg create mode 100644 src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt create mode 100644 src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java create mode 100644 src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php create mode 100644 src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg create mode 100644 src/test/resources/cli/options/childLimit_dynamic_allOf.yaml create mode 100644 src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml create mode 100644 src/test/resources/cli/options/childLimit_dynamic_everything.yaml create mode 100644 src/test/resources/cli/options/childLimit_dynamic_glob.yaml create mode 100644 src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml create mode 100644 src/test/resources/cli/options/childLimit_static.yaml create mode 100644 src/test/resources/cli/options/emojis.yaml diff --git a/pom.xml b/pom.xml index b589d7f..04f63f5 100644 --- a/pom.xml +++ b/pom.xml @@ -70,6 +70,11 @@ jackson-databind ${jackson.version} + + tools.jackson.dataformat + jackson-dataformat-yaml + ${jackson.version} + org.hibernate.validator hibernate-validator diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java deleted file mode 100644 index 7cdcf85..0000000 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ConsoleOutput.java +++ /dev/null @@ -1,52 +0,0 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; - -import java.io.PrintStream; -import java.util.logging.Level; -import java.util.logging.Logger; -import org.jspecify.annotations.NullMarked; - -@NullMarked -public class ConsoleOutput { - - private static final Logger ROOT_LOGGER = Logger.getLogger(""); - - private boolean debug; - - public ConsoleOutput(boolean debug) { - this.debug = debug; - disableAllLoggers(); - } - - private void disableAllLoggers() { - ROOT_LOGGER.setLevel(Level.OFF); - Logger.getLogger("org.hibernate.validator").setLevel(Level.OFF); - } - - private void printOut(String msg, Object... args) { - printfln(System.out, msg, args); - } - - private void printErr(String msg, Object... args) { - printfln(System.err, msg, args); - } - - private void printfln(PrintStream dest, String msg, Object... args) { - dest.printf(msg + "\n", args);// Because "printf" does not print line return - } - - public void printDebug(String msg, Object... args) { - // Could not (yet) make Logger level work within native image, so fallback to plain console output (for now) - if (debug) { - printOut("[DEBUG] " + msg, args); - } - } - - public void print(String msg, Object... args) { - printOut(msg, args); - } - - public void printError(String msg, Object... args) { - printErr("[ERROR] " + msg, args); - } - -} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java index 2190d57..eed3053 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java @@ -1,22 +1,43 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsMapper; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsReader; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.exception.DefaultExecutionExceptionHandler; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.OptionsLoader; +import java.util.Objects; +import org.jspecify.annotations.NullMarked; import picocli.CommandLine; +import picocli.CommandLine.IExecutionExceptionHandler; +@NullMarked class FileTreePrettyPrinterCommandLine { - public static void main(String[] args) { - System.exit(executeCommand(args)); - } + private final CommandLine cmd; - static int executeCommand(String[] args) { - var reader = ExternalOptionsReader.createDefault(); - var mapper = ExternalOptionsMapper.createDefault(); + FileTreePrettyPrinterCommandLine(ConsoleOutput output, OptionsLoader optionsLoader, IExecutionExceptionHandler exHandler) { + super(); + Objects.requireNonNull(output, "output is null"); + Objects.requireNonNull(optionsLoader, "optionsLoader is null"); + Objects.requireNonNull(exHandler, "exHandler is null"); - var cmd = new CommandLine(new PrettyPrintCommand(reader, mapper)); + cmd = new CommandLine(new PrettyPrintCommand(output, optionsLoader)); + cmd.setExecutionExceptionHandler(exHandler); + } + int executeCommand(String[] args) { return cmd.execute(args); } + // ------------------------------------------------------------------------------- + + public static void main(String[] args) { + + var output = ConsoleOutput.createDefault(); + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + System.exit(cli.executeCommand(args)); + } + } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java index 812d46a..adb4cc4 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java @@ -1,11 +1,9 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsException; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsMapper; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptionsReader; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.OptionsLoader; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; -import jakarta.validation.ConstraintViolationException; import java.io.File; import java.nio.file.Path; import java.util.Objects; @@ -27,12 +25,12 @@ @NullMarked class PrettyPrintCommand implements Callable { - private final ExternalOptionsReader reader; - private final ExternalOptionsMapper mapper; + private final ConsoleOutput output; + private final OptionsLoader optionsLoader; - public PrettyPrintCommand(ExternalOptionsReader reader, ExternalOptionsMapper mapper) { - this.reader = Objects.requireNonNull(reader, "reader is null"); - this.mapper = Objects.requireNonNull(mapper, "mapper is null"); + public PrettyPrintCommand(ConsoleOutput output, OptionsLoader optionsLoader) { + this.output = Objects.requireNonNull(output, "output is null"); + this.optionsLoader = Objects.requireNonNull(optionsLoader, "optionsLoader is null"); } // ---------- CLI args ---------- @@ -53,7 +51,7 @@ public PrettyPrintCommand(ExternalOptionsReader reader, ExternalOptionsMapper ma @Override public Integer call() throws Exception { - var output = new ConsoleOutput(debug); + output.enableDebug(this.debug); var targetPath = detectTargetPath(output); if (!targetPath.toFile().exists()) { @@ -61,28 +59,14 @@ public Integer call() throws Exception { return 1; } - PrettyPrintOptions options; - try { - Path optionsPath = optionsFile == null ? null : optionsFile.toPath().toAbsolutePath().normalize(); - var externalOptions = reader.readExternalOptions(output, targetPath, optionsPath); - options = mapper.mapToOptions(targetPath, externalOptions); - } catch (ExternalOptionsException e) { - output.printError(e.getMessage() + ": " + optionsFile.toString()); - return 1; - } catch (ConstraintViolationException e) { - output.printError(e.getMessage() + ": " + optionsFile.toString()); - return 1; - } + Path optionsPath = optionsFile == null ? null : optionsFile.toPath().toAbsolutePath().normalize(); + PrettyPrintOptions options = optionsLoader.loadOptions(targetPath, optionsPath); - try { - var printer = FileTreePrettyPrinter.builder().withOptions(options).build(); - var result = printer.prettyPrint(targetPath); - output.print(result); - return 0; - } catch (Exception e) { - output.printError("Error while pretty printing: " + e.getMessage()); - return 1; - } + var printer = FileTreePrettyPrinter.builder().withOptions(options).build(); + var result = printer.prettyPrint(targetPath); + output.print(result); + + return 0; } private Path detectTargetPath(ConsoleOutput output) { diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java similarity index 92% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java index 63ccfbf..bf70241 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/RecordUtils.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java @@ -1,4 +1,4 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; import java.util.ArrayList; import java.util.Collection; @@ -7,7 +7,7 @@ import org.jspecify.annotations.Nullable; @NullMarked -class RecordUtils { +public class RecordUtils { private RecordUtils() { // Helper class @@ -16,7 +16,7 @@ private RecordUtils() { /** * Inspired from: https://sormuras.github.io/blog/2020-05-06-records-to-text-block.html */ - static String toTextBlock(@Nullable Record rec) { + public static String toTextBlock(@Nullable Record rec) { if (rec == null) { return "null"; } @@ -26,6 +26,9 @@ static String toTextBlock(@Nullable Record rec) { } private static void toTextBlock(List lines, String shift, @Nullable String attrName, Object value, String indent) { + if (value == null) { + return; + } var nested = value.getClass(); if (nested.isRecord()) { toTextBlockRecord(lines, shift, attrName, (Record) value, indent); diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java new file mode 100644 index 0000000..4952bb5 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java @@ -0,0 +1,45 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.exception; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import jakarta.validation.ConstraintViolationException; +import java.util.Objects; +import org.jspecify.annotations.NullMarked; +import picocli.CommandLine; +import picocli.CommandLine.IExecutionExceptionHandler; +import picocli.CommandLine.ParseResult; + +@NullMarked +public class DefaultExecutionExceptionHandler implements IExecutionExceptionHandler { + + private final ConsoleOutput output; + + public DefaultExecutionExceptionHandler(ConsoleOutput output) { + this.output = Objects.requireNonNull(output, "output is null"); + } + + @Override + public int handleExecutionException(Exception ex, CommandLine commandLine, ParseResult fullParseResult) throws Exception { + return switch (ex) { + case ExternalOptionsException extOptionEx -> handleExternalOptionsException(extOptionEx); + case ConstraintViolationException violationEx -> handleConstraintViolationException(violationEx); + default -> handleDefaultException(ex); + }; + } + + private int handleExternalOptionsException(ExternalOptionsException e) { + output.printError(e.getMessage() + ": " + e.getOptionsPath().toString()); + e.printStackTrace(); + return 1; + } + + private int handleConstraintViolationException(ConstraintViolationException e) { + output.printError(e.getMessage() + ": TODO"); + return 1; + } + + private int handleDefaultException(Exception e) { + output.printError("Error while pretty printing: " + e.getMessage()); + return 1; + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java similarity index 80% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java index 9bcc31b..8579ac9 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsException.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java @@ -1,4 +1,4 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.exception; import java.nio.file.Path; import org.jspecify.annotations.NullMarked; @@ -6,7 +6,7 @@ @NullMarked public class ExternalOptionsException extends RuntimeException { - private final Path optionsPath; + private final transient Path optionsPath; public ExternalOptionsException(Path optionsPath, String message, Throwable cause) { super(message, cause); diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java new file mode 100644 index 0000000..f281e2d --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java @@ -0,0 +1,25 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io; + +import org.jspecify.annotations.NullMarked; + +/** + * An interface abstracting the console output - usefull to unit test the CLI output! + */ +@NullMarked +public interface ConsoleOutput { + + boolean isDebugEnabled(); + + void enableDebug(boolean enabled); + + void print(String msg, Object... args); + + void printDebug(String msg, Object... args); + + void printError(String msg, Object... args); + + public static ConsoleOutput createDefault() { + return new DefaultConsoleOutput(System.out, System.err); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java new file mode 100644 index 0000000..8508923 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java @@ -0,0 +1,76 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io; + +import java.io.PrintStream; +import java.util.Objects; +import java.util.logging.Logger; +import org.jspecify.annotations.NullMarked; + +@NullMarked +public class DefaultConsoleOutput implements ConsoleOutput { + + private static final Logger ROOT_LOGGER = Logger.getLogger(""); + + private boolean debug; + private final PrintStream out; + private final PrintStream err; + + public DefaultConsoleOutput(PrintStream out, PrintStream err) { + this.out = Objects.requireNonNull(out, "out stream is null"); + this.err = Objects.requireNonNull(err, "err stream is null"); + disableAllLoggers(); + } + + /** + * Require otherwise some embedded loggers (i.e. (Hibernate validator) print in the console. + */ + private void disableAllLoggers() { + ROOT_LOGGER.setLevel(java.util.logging.Level.OFF); + Logger.getGlobal().setLevel(java.util.logging.Level.OFF); + Logger.getLogger("org.hibernate.validator").setLevel(java.util.logging.Level.OFF); + } + + // --------------------------------------------------------- + + @Override + public boolean isDebugEnabled() { + return this.debug; + } + + @Override + public void enableDebug(boolean enabled) { + this.debug = enabled; + } + + @Override + public void print(String msg, Object... args) { + printOut(msg, args); + } + + @Override + public void printDebug(String msg, Object... args) { + // Could not (yet) make Logger level work within native image, so fallback to plain console output (for now) + if (debug) { + printOut("[DEBUG] " + msg, args); + } + } + + @Override + public void printError(String msg, Object... args) { + printErr("[ERROR] " + msg, args); + } + + // --------------------------------------------------------- + + private void printOut(String msg, Object... args) { + printfln(out, msg, args); + } + + private void printErr(String msg, Object... args) { + printfln(err, msg, args); + } + + private void printfln(PrintStream dest, String msg, Object... args) { + dest.printf(msg + "\n", args);// Because "printf" does not print line return + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java new file mode 100644 index 0000000..9a205c4 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java @@ -0,0 +1,32 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.mapper.ExternalOptionsMapper; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.reader.ExternalOptionsReader; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; +import java.nio.file.Path; +import java.util.Objects; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +@NullMarked +class DefaultOptionsLoader implements OptionsLoader { + + private final ExternalOptionsReader reader; + private final ExternalOptionsMapper mapper; + + public DefaultOptionsLoader(ExternalOptionsReader reader, ExternalOptionsMapper mapper) { + super(); + this.reader = Objects.requireNonNull(reader, "reader is null"); + this.mapper = Objects.requireNonNull(mapper, "mapper is null"); + } + + @Override + public PrettyPrintOptions loadOptions(Path targetPath, @Nullable Path optionsPath) { + var externalOptions = reader.readExternalOptions(targetPath, optionsPath); + if (externalOptions == null) { + return PrettyPrintOptions.createDefault(); + } + return mapper.mapToOptions(targetPath, externalOptions); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java new file mode 100644 index 0000000..10e0a75 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java @@ -0,0 +1,22 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.mapper.ExternalOptionsMapper; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.reader.ExternalOptionsReader; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; +import java.nio.file.Path; +import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; + +@NullMarked +public interface OptionsLoader { + + PrettyPrintOptions loadOptions(Path targetPath, @Nullable Path optionsPath); + + public static OptionsLoader createDefault(ConsoleOutput output) { + var reader = ExternalOptionsReader.createDefault(output); + var mapper = ExternalOptionsMapper.createDefault(); + return new DefaultOptionsLoader(reader, mapper); + } + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java similarity index 78% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java index 621a062..2a80b47 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultExternalOptionsMapper.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java @@ -1,21 +1,21 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.mapper; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import java.nio.file.Path; import java.nio.file.PathMatcher; -import org.jspecify.annotations.Nullable; class DefaultExternalOptionsMapper implements ExternalOptionsMapper { @Override - public PrettyPrintOptions mapToOptions(Path targetPath, @Nullable ExternalOptions externalOptions) { + public PrettyPrintOptions mapToOptions(Path targetPath, ExternalOptions externalOptions) { var options = PrettyPrintOptions.createDefault(); - if (externalOptions != null) { - options = mapEmojis(options, externalOptions); - options = mapChildLimit(options, externalOptions, targetPath); - } + options = mapEmojis(options, externalOptions); + options = mapChildLimit(options, externalOptions, targetPath); return options; } @@ -45,8 +45,8 @@ private PrettyPrintOptions mapChildLimit(PrettyPrintOptions options, ExternalOpt private PathMatcher mapMatcher(Matcher matcher, Path targetPath) { return switch (matcher) { - case Matcher.AlwaysTrue() -> (p) -> true; - case Matcher.AlwaysFalse() -> (p) -> false; + case Matcher.AlwaysTrue() -> p -> true; + case Matcher.AlwaysFalse() -> p -> false; case Matcher.AllOf(var matchers) -> PathMatchers.allOf(matchers.stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); case Matcher.AnyOf(var matchers) -> PathMatchers.anyOf(matchers.stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); case Matcher.NoneOf(var matchers) -> PathMatchers.noneOf(matchers.stream().map(subMatcher -> mapMatcher(subMatcher, targetPath)).toList()); diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java similarity index 66% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java index 5cbc054..4157f50 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsMapper.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java @@ -1,14 +1,14 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.mapper; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import java.nio.file.Path; import org.jspecify.annotations.NullMarked; -import org.jspecify.annotations.Nullable; @NullMarked public interface ExternalOptionsMapper { - PrettyPrintOptions mapToOptions(Path targetPath, @Nullable ExternalOptions externalOptions); + PrettyPrintOptions mapToOptions(Path targetPath, ExternalOptions externalOptions); static ExternalOptionsMapper createDefault() { return new DefaultExternalOptionsMapper(); diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ChildLimit.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java similarity index 94% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ChildLimit.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java index 761b5fb..740f496 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ChildLimit.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java @@ -1,4 +1,4 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -8,7 +8,7 @@ import java.util.List; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") -sealed interface ChildLimit { +public sealed interface ChildLimit { /** * diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java similarity index 83% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java index 681d5f2..1c0d81f 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptions.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java @@ -1,9 +1,9 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; import jakarta.validation.Valid; import org.jspecify.annotations.Nullable; -record ExternalOptions( +public record ExternalOptions( @Nullable Boolean emojis, @Valid @Nullable ChildLimit childLimit ) { diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/Matcher.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java similarity index 96% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/Matcher.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java index 6e8b189..2031ace 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/Matcher.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java @@ -1,4 +1,4 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.JsonTypeName; @@ -8,7 +8,7 @@ import java.util.List; @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type") -sealed interface Matcher { +public sealed interface Matcher { /** * diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java similarity index 56% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java index 3e35333..e396f6e 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/ExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java @@ -1,6 +1,7 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.reader; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; import java.nio.file.Path; import java.util.List; import java.util.function.Function; @@ -11,18 +12,18 @@ public interface ExternalOptionsReader { @Nullable - ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath, @Nullable Path optionsPath); + ExternalOptions readExternalOptions(Path targetPath, @Nullable Path optionsPath); - static ExternalOptionsReader createDefault() { + static ExternalOptionsReader createDefault(ConsoleOutput output) { final String DEFAULT_OPTION_FILENAME = ".prettyprint"; - var simpleReader = new SimpleExternalOptionsReader(); + var simpleReader = new SimpleExternalOptionsReader(output); Function> fallbackOptionsFunction = targetPath -> List.of( targetPath.resolve(DEFAULT_OPTION_FILENAME), Path.of(".").resolve(DEFAULT_OPTION_FILENAME), Path.of(System.getProperty("user.home")).resolve(DEFAULT_OPTION_FILENAME) ); - return new FallbackExternalOptionsReader(simpleReader, fallbackOptionsFunction); + return new FallbackExternalOptionsReader(output, simpleReader, fallbackOptionsFunction); } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java similarity index 56% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java index 4dc1c32..83cf3f7 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/FallbackExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java @@ -1,6 +1,8 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.reader; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.exception.ExternalOptionsException; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; import java.nio.file.Path; import java.util.Objects; import java.util.function.Function; @@ -8,22 +10,24 @@ import org.jspecify.annotations.Nullable; @NullMarked -public class FallbackExternalOptionsReader implements ExternalOptionsReader { +class FallbackExternalOptionsReader implements ExternalOptionsReader { + private final ConsoleOutput output; private final ExternalOptionsReader delegateReader; private final Function> fallbackPathsFunction; - public FallbackExternalOptionsReader(ExternalOptionsReader delegateReader, Function> fallbackPathsFunction) { + public FallbackExternalOptionsReader(ConsoleOutput output, ExternalOptionsReader delegateReader, Function> fallbackPathsFunction) { super(); + this.output = Objects.requireNonNull(output, "output is null"); this.delegateReader = Objects.requireNonNull(delegateReader, "delegateReader is null"); this.fallbackPathsFunction = Objects.requireNonNull(fallbackPathsFunction, "fallbackPathsFunction is null"); } @Override @Nullable - public ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath, @Nullable Path optionsPath) { + public ExternalOptions readExternalOptions(Path targetPath, @Nullable Path optionsPath) { if (optionsPath != null) { - var options = delegateReader.readExternalOptions(output, targetPath, optionsPath); + var options = delegateReader.readExternalOptions(targetPath, optionsPath); if (options == null) { throw new ExternalOptionsException(optionsPath, "Options file does not exist"); } @@ -31,14 +35,14 @@ public ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath } output.printDebug("No options file provided, looking for fallback options files..."); var fallbackOptions = fallbackPathsFunction.apply(targetPath); - return readFallbackOptions(output, targetPath, fallbackOptions); + return readFallbackOptions(targetPath, fallbackOptions); } @Nullable - private ExternalOptions readFallbackOptions(ConsoleOutput output, Path targetPath, Iterable fallbackOptionsPaths) { + private ExternalOptions readFallbackOptions(Path targetPath, Iterable fallbackOptionsPaths) { for (var fallbackOptionsPath : fallbackOptionsPaths) { Objects.requireNonNull(fallbackOptionsPath, "one of fallback option paths is null"); - var options = delegateReader.readExternalOptions(output, targetPath, fallbackOptionsPath); + var options = delegateReader.readExternalOptions(targetPath, fallbackOptionsPath); if (options != null) { return options; } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java similarity index 67% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java rename to src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java index de739ae..3d028d1 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/SimpleExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java @@ -1,20 +1,30 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options; +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.reader; -import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.RecordUtils; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.exception.ExternalOptionsException; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; import jakarta.validation.ConstraintViolationException; import jakarta.validation.Validation; import java.nio.file.Path; +import java.util.Objects; import org.hibernate.validator.messageinterpolation.ParameterMessageInterpolator; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; -import tools.jackson.databind.json.JsonMapper; +import tools.jackson.dataformat.yaml.YAMLMapper; @NullMarked -public class SimpleExternalOptionsReader implements ExternalOptionsReader { +class SimpleExternalOptionsReader implements ExternalOptionsReader { + + private final ConsoleOutput output; + + public SimpleExternalOptionsReader(ConsoleOutput output) { + this.output = Objects.requireNonNull(output, "output is null"); + } @Override @Nullable - public ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath, Path optionsPath) { + public ExternalOptions readExternalOptions(Path targetPath, @Nullable Path optionsPath) { if (optionsPath == null) { throw new ExternalOptionsException(optionsPath, "null options path"); @@ -41,9 +51,12 @@ public ExternalOptions readExternalOptions(ConsoleOutput output, Path targetPath private ExternalOptions load(ConsoleOutput output, Path optionsPath) { try { - var mapper = JsonMapper.builder().build(); + var mapper = YAMLMapper.builder().build(); ExternalOptions externalOptions = mapper.readValue(optionsPath, ExternalOptions.class); - output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); + + if (output.isDebugEnabled()) { // Trick to avoid RecordUtils.toTextBlock() to evaluate if not needed + output.printDebug("%s", RecordUtils.toTextBlock(externalOptions)); + } return externalOptions; } catch (RuntimeException e) { throw new ExternalOptionsException(optionsPath, "IO error or malformed options file", e); diff --git a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json index 0547b6c..7a04979 100644 --- a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json +++ b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json @@ -30,7 +30,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ExternalOptions", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -39,7 +39,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -48,7 +48,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit$StaticLimit", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$StaticLimit", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -57,7 +57,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit$DynamicLimit", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$DynamicLimit", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -66,7 +66,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.ChildLimit$DynamicLimitItem", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$DynamicLimitItem", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -75,7 +75,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -84,7 +84,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AlwaysTrue", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AlwaysTrue", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -93,7 +93,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AlwaysFalse", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AlwaysFalse", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -102,7 +102,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AllOf", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AllOf", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -111,7 +111,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$AnyOf", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$AnyOf", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -120,7 +120,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$NoneOf", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$NoneOf", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -129,7 +129,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$NameGlob", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$NameGlob", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, @@ -138,7 +138,7 @@ "allPublicFields": true }, { - "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.Matcher$PathGlob", + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher$PathGlob", "allDeclaredConstructors": true, "allPublicConstructors": true, "allDeclaredMethods": true, diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java index eb43c44..908c9df 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -3,45 +3,211 @@ import static org.assertj.core.api.Assertions.assertThat; import io.github.computerdaddyguy.jfiletreeprettyprinter.FileTreePrettyPrinter; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.exception.DefaultExecutionExceptionHandler; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.DefaultConsoleOutput; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.OptionsLoader; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.PrintStream; -import org.junit.jupiter.api.AfterEach; +import java.nio.file.Path; +import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; class FileTreePrettyPrinterCommandLineTest { - private final PrintStream DEFAULT_SYSTEM_OUT = System.out; + private ByteArrayOutputStream out_and_err; - private ByteArrayOutputStream modifiedOut; + private ConsoleOutput output; @BeforeEach void prepareSystemOut() { - modifiedOut = new ByteArrayOutputStream(); - System.setOut(new PrintStream(modifiedOut)); - } + out_and_err = new ByteArrayOutputStream(); - @AfterEach - void restoreSystemOut() { - if (modifiedOut != null) { + output = new DefaultConsoleOutput(new PrintStream(out_and_err), new PrintStream(out_and_err)); + } + private String[] buildCliArgs(String targetPath, @Nullable String optionsPath) { + if (optionsPath == null) { + return new String[] { targetPath }; } - System.setOut(DEFAULT_SYSTEM_OUT); + return new String[] { targetPath, "-o", optionsPath }; +// return new String[] { targetPath, "-o", optionsPath, "-d" }; + } + + private void runCliTest(FileTreePrettyPrinterCommandLine cli, FileTreePrettyPrinter ref, String[] args, String targetPath) { + + cli.executeCommand(args); + + var allWrittenLines = new String(out_and_err.toByteArray()); + assertThat(allWrittenLines).isEqualTo(ref.prettyPrint(targetPath) + "\n"); } @Test - void nominal() throws IOException { - String targetPath = "src/example/resources/base"; - String[] args = { targetPath }; + void no_options() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = null; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var ref = FileTreePrettyPrinter.createDefault(); + + runCliTest(cli, ref, args, targetPath); + } + + @Nested + class Emojis { + + @Test + void emojis() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/emojis.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withDefaultEmojis()) + .build(); + + runCliTest(cli, ref, args, targetPath); + } + + } + + @Nested + class ChildLimit { + + @Test + void static_limit() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/childLimit_static.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(2)) + .build(); + + runCliTest(cli, ref, args, targetPath); + } - FileTreePrettyPrinterCommandLine.executeCommand(args); + @Test + void dynamic_limit_glob() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_glob.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); - modifiedOut.flush(); - String allWrittenLines = new String(modifiedOut.toByteArray()); - System.setOut(DEFAULT_SYSTEM_OUT); + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var childLimit = ChildLimits.builder() + .add(PathMatchers.hasNameMatchingGlob("*_a"), 2) + .add(PathMatchers.hasRelativePathMatchingGlob(Path.of(targetPath), "/*_b"), 3) + .build(); + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(childLimit)) + .build(); + + runCliTest(cli, ref, args, targetPath); + } + + @Test + void dynamic_limit_everything() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_everything.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var childLimit = ChildLimits.builder() + .add(p -> 2) + .build(); + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(childLimit)) + .build(); + + runCliTest(cli, ref, args, targetPath); + } + + @Test + void dynamic_limit_allOf() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_allOf.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var childLimit = ChildLimits.builder() + .add(PathMatchers.allOf(PathMatchers.hasNameMatchingGlob("*3"), PathMatchers.hasNameMatchingGlob("*xxx*")), 2) + .add(PathMatchers.allOf(PathMatchers.hasNameMatchingGlob("*3"), PathMatchers.hasNameMatchingGlob("*z*")), 3) + .build(); + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(childLimit)) + .build(); + + runCliTest(cli, ref, args, targetPath); + } + + @Test + void dynamic_limit_anyOf() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var childLimit = ChildLimits.builder() + .add(PathMatchers.anyOf(PathMatchers.hasNameMatchingGlob("*3"), PathMatchers.hasNameMatchingGlob("*xxx*")), 2) + .add(PathMatchers.anyOf(PathMatchers.hasNameMatchingGlob("*3"), PathMatchers.hasNameMatchingGlob("*z*")), 3) + .build(); + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(childLimit)) + .build(); + + runCliTest(cli, ref, args, targetPath); + } + + @Test + void dynamic_limit_noneOf() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var childLimit = ChildLimits.builder() + .add(PathMatchers.noneOf(PathMatchers.hasNameMatchingGlob("*a"), PathMatchers.hasNameMatchingGlob("folder*")), 2) + .add(PathMatchers.noneOf(PathMatchers.hasNameMatchingGlob("*a"), PathMatchers.hasNameMatchingGlob("*xxx*")), 3) + .build(); + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(childLimit)) + .build(); + + runCliTest(cli, ref, args, targetPath); + } - assertThat(allWrittenLines).isEqualTo(FileTreePrettyPrinter.createDefault().prettyPrint(targetPath) + "\n"); } } diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java new file mode 100644 index 0000000..8b79f20 --- /dev/null +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java @@ -0,0 +1,31 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class ManifestVersionProviderTest { + + @Test + void nominal() throws Exception { + var provider = new ManifestVersionProvider(); + + var actual = provider.getVersion(); + + /* + * JFileTreePrettyPrinter 0.1.1-SNAPSHOT + * A lightweight and flexible Java library with a native CLI to pretty-print directory structures - ideal for documentation, project overviews, or CLI tools. + * Repository: https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter + * Commit: 23cf1139157ffa046378fb602fe7750a107c6bc1 (2025-11-04T22:27:16+01:00) + * Built on: 2025-11-06T22:07:30+01:00 + */ + assertThat(actual).satisfiesExactly( + line1 -> assertThat(line1).isNotBlank(), + line2 -> assertThat(line2).isNotBlank(), + line3 -> assertThat(line3).startsWith("Repository:"), + line4 -> assertThat(line4).startsWith("Commit:"), + line5 -> assertThat(line5).startsWith("Built on:") + ); + } + +} diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java new file mode 100644 index 0000000..ccaf251 --- /dev/null +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java @@ -0,0 +1,41 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit.DynamicLimit; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit.DynamicLimitItem; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher.NameGlob; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher.PathGlob; +import java.util.List; +import org.junit.jupiter.api.Test; + +class RecordUtilsTest { + + @Test + void nominal() { + + var dynLimit1 = new DynamicLimitItem(1, new NameGlob("*.java")); + var dynLimit2 = new DynamicLimitItem(1, new PathGlob("pictures")); + var childLimit = new DynamicLimit(List.of(dynLimit1, dynLimit2)); + var rec = new ExternalOptions(Boolean.TRUE, childLimit); + + var expected = """ + ExternalOptions + emojis = true + childLimit -> DynamicLimit + limits = [ + [0] -> DynamicLimitItem + limit = 1 + matcher -> NameGlob + glob = *.java + [1] -> DynamicLimitItem + limit = 1 + matcher -> PathGlob + glob = pictures + ]"""; + + assertThat(RecordUtils.toTextBlock(rec)).isEqualToNormalizingNewlines(expected); + } + +} diff --git a/src/test/resources/cli/base/folder_a/file_1.txt b/src/test/resources/cli/base/folder_a/file_1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_a/file_2.java b/src/test/resources/cli/base/folder_a/file_2.java new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_a/file_3.php b/src/test/resources/cli/base/folder_a/file_3.php new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_a/file_4.jpeg b/src/test/resources/cli/base/folder_a/file_4.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_b/file_1.txt b/src/test/resources/cli/base/folder_b/file_1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_b/file_2.java b/src/test/resources/cli/base/folder_b/file_2.java new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_b/file_3.php b/src/test/resources/cli/base/folder_b/file_3.php new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_b/file_4.jpeg b/src/test/resources/cli/base/folder_b/file_4.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_c/file_1.txt b/src/test/resources/cli/base/folder_c/file_1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_c/file_2.java b/src/test/resources/cli/base/folder_c/file_2.java new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_c/file_3.php b/src/test/resources/cli/base/folder_c/file_3.php new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_c/file_4.jpeg b/src/test/resources/cli/base/folder_c/file_4.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_d/file_1.txt b/src/test/resources/cli/base/folder_d/file_1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_d/file_2.java b/src/test/resources/cli/base/folder_d/file_2.java new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_d/file_3.php b/src/test/resources/cli/base/folder_d/file_3.php new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_d/file_4.jpeg b/src/test/resources/cli/base/folder_d/file_4.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt b/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java b/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php b/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg b/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/src/test/resources/cli/options/childLimit_dynamic_allOf.yaml b/src/test/resources/cli/options/childLimit_dynamic_allOf.yaml new file mode 100644 index 0000000..ebff60c --- /dev/null +++ b/src/test/resources/cli/options/childLimit_dynamic_allOf.yaml @@ -0,0 +1,19 @@ +childLimit: + type: dynamic + limits: + - limit: 2 + matcher: + type: allOf + matchers: + - type: name + glob: "*3" + - type: name + glob: "*xxx*" + - limit: 3 + matcher: + type: allOf + matchers: + - type: name + glob: "*3" + - type: name + glob: "*z*" \ No newline at end of file diff --git a/src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml b/src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml new file mode 100644 index 0000000..43ff526 --- /dev/null +++ b/src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml @@ -0,0 +1,19 @@ +childLimit: + type: dynamic + limits: + - limit: 2 + matcher: + type: anyOf + matchers: + - type: name + glob: "*3" + - type: name + glob: "*xxx*" + - limit: 3 + matcher: + type: anyOf + matchers: + - type: name + glob: "*3" + - type: name + glob: "*z*" \ No newline at end of file diff --git a/src/test/resources/cli/options/childLimit_dynamic_everything.yaml b/src/test/resources/cli/options/childLimit_dynamic_everything.yaml new file mode 100644 index 0000000..f3599c5 --- /dev/null +++ b/src/test/resources/cli/options/childLimit_dynamic_everything.yaml @@ -0,0 +1,6 @@ +childLimit: + type: dynamic + limits: + - limit: 2 + matcher: + type: everything \ No newline at end of file diff --git a/src/test/resources/cli/options/childLimit_dynamic_glob.yaml b/src/test/resources/cli/options/childLimit_dynamic_glob.yaml new file mode 100644 index 0000000..ff8886b --- /dev/null +++ b/src/test/resources/cli/options/childLimit_dynamic_glob.yaml @@ -0,0 +1,11 @@ +childLimit: + type: dynamic + limits: + - limit: 2 + matcher: + type: name + glob: "*_a" + - limit: 3 + matcher: + type: path + glob: "/*_b" \ No newline at end of file diff --git a/src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml b/src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml new file mode 100644 index 0000000..fac63bd --- /dev/null +++ b/src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml @@ -0,0 +1,19 @@ +childLimit: + type: dynamic + limits: + - limit: 2 + matcher: + type: noneOf + matchers: + - type: name + glob: "*a" + - type: name + glob: "folder*" + - limit: 3 + matcher: + type: noneOf + matchers: + - type: name + glob: "*a" + - type: name + glob: "*xxx*" \ No newline at end of file diff --git a/src/test/resources/cli/options/childLimit_static.yaml b/src/test/resources/cli/options/childLimit_static.yaml new file mode 100644 index 0000000..422a45c --- /dev/null +++ b/src/test/resources/cli/options/childLimit_static.yaml @@ -0,0 +1,3 @@ +childLimit: + type: static + limit: 2 \ No newline at end of file diff --git a/src/test/resources/cli/options/emojis.yaml b/src/test/resources/cli/options/emojis.yaml new file mode 100644 index 0000000..e94aee6 --- /dev/null +++ b/src/test/resources/cli/options/emojis.yaml @@ -0,0 +1 @@ +emojis: true \ No newline at end of file From b63e1fb9858e70b599eb087dfed5813829335c12 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 00:34:05 +0100 Subject: [PATCH 22/57] More CLI external features --- .../cli/RecordUtils.java | 19 +- .../exception/ExternalOptionsException.java | 7 +- .../mapper/DefaultExternalOptionsMapper.java | 43 +++++ .../cli/options/model/ExternalOptions.java | 8 +- .../cli/options/model/Filter.java | 11 ++ .../cli/options/model/LineExtension.java | 11 ++ .../reachability-metadata.json | 18 ++ .../FileTreePrettyPrinterCommandLineTest.java | 162 ++++++++++++++++-- .../cli/RecordUtilsTest.java | 43 ++++- .../cli/options/compactDirectories.yaml | 1 + src/test/resources/cli/options/filter.yaml | 7 + src/test/resources/cli/options/invalid.yaml | 2 + .../resources/cli/options/lineExtensions.yaml | 9 + src/test/resources/cli/options/malformed.yaml | 1 + src/test/resources/cli/options/maxDepth.yaml | 1 + 15 files changed, 314 insertions(+), 29 deletions(-) create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java create mode 100644 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java create mode 100644 src/test/resources/cli/options/compactDirectories.yaml create mode 100644 src/test/resources/cli/options/filter.yaml create mode 100644 src/test/resources/cli/options/invalid.yaml create mode 100644 src/test/resources/cli/options/lineExtensions.yaml create mode 100644 src/test/resources/cli/options/malformed.yaml create mode 100644 src/test/resources/cli/options/maxDepth.yaml diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java index bf70241..9d9db02 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java @@ -25,17 +25,15 @@ public static String toTextBlock(@Nullable Record rec) { return String.join(System.lineSeparator(), lines); } - private static void toTextBlock(List lines, String shift, @Nullable String attrName, Object value, String indent) { + private static void toTextBlock(List lines, String shift, @Nullable String attrName, @Nullable Object value, String indent) { if (value == null) { - return; - } - var nested = value.getClass(); - if (nested.isRecord()) { + return; // do not print null objects, just ignore them + } else if (value.getClass().isRecord()) { toTextBlockRecord(lines, shift, attrName, (Record) value, indent); } else if (value instanceof Collection coll) { toTextBlockCollection(lines, shift, attrName, coll, indent); } else { - lines.add(String.format("%s%s = %s", shift, attrName, value)); + lines.add(String.format("%s%s: %s", shift, attrName, toSingleValue(value))); } } @@ -63,7 +61,7 @@ private static void toTextBlockCollection(List lines, String shift, @Nul if (attrName == null) { lines.add(String.format("%s[", shift)); } else { - lines.add(String.format("%s%s = [", shift, attrName)); + lines.add(String.format("%s%s: [", shift, attrName)); } int i = 0; for (var item : coll) { @@ -73,4 +71,11 @@ private static void toTextBlockCollection(List lines, String shift, @Nul lines.add(String.format("%s]", shift)); } + private static String toSingleValue(Object value) { + if (value instanceof String str) { + return String.format("\"%s\"", str); + } + return String.format("%s", value); + } + } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java index 8579ac9..56725f3 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java @@ -2,22 +2,25 @@ import java.nio.file.Path; import org.jspecify.annotations.NullMarked; +import org.jspecify.annotations.Nullable; @NullMarked public class ExternalOptionsException extends RuntimeException { + @Nullable private final transient Path optionsPath; - public ExternalOptionsException(Path optionsPath, String message, Throwable cause) { + public ExternalOptionsException(@Nullable Path optionsPath, String message, Throwable cause) { super(message, cause); this.optionsPath = optionsPath; } - public ExternalOptionsException(Path optionsPath, String message) { + public ExternalOptionsException(@Nullable Path optionsPath, String message) { super(message); this.optionsPath = optionsPath; } + @Nullable public Path getOptionsPath() { return optionsPath; } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java index 2a80b47..db827a1 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java @@ -4,6 +4,7 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.LineExtensions; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import java.nio.file.Path; @@ -15,7 +16,11 @@ class DefaultExternalOptionsMapper implements ExternalOptionsMapper { public PrettyPrintOptions mapToOptions(Path targetPath, ExternalOptions externalOptions) { var options = PrettyPrintOptions.createDefault(); options = mapEmojis(options, externalOptions); + options = mapCompactDirectories(options, externalOptions); + options = mapMaxDepth(options, externalOptions); options = mapChildLimit(options, externalOptions, targetPath); + options = mapFilter(options, externalOptions, targetPath); + options = mapLineExtensions(options, externalOptions, targetPath); return options; } @@ -26,6 +31,20 @@ private PrettyPrintOptions mapEmojis(PrettyPrintOptions options, ExternalOptions return options; } + private PrettyPrintOptions mapCompactDirectories(PrettyPrintOptions options, ExternalOptions externalOptions) { + if (Boolean.TRUE.equals(externalOptions.compactDirectories())) { + return options.withCompactDirectories(true); + } + return options; + } + + private PrettyPrintOptions mapMaxDepth(PrettyPrintOptions options, ExternalOptions externalOptions) { + if (externalOptions.maxDepth() != null) { + return options.withMaxDepth(externalOptions.maxDepth()); + } + return options; + } + private PrettyPrintOptions mapChildLimit(PrettyPrintOptions options, ExternalOptions externalOptions, Path targetPath) { if (externalOptions.childLimit() == null) { return options; @@ -43,6 +62,30 @@ private PrettyPrintOptions mapChildLimit(PrettyPrintOptions options, ExternalOpt }; } + private PrettyPrintOptions mapFilter(PrettyPrintOptions options, ExternalOptions externalOptions, Path targetPath) { + if (externalOptions.filter() == null) { + return options; + } + if (externalOptions.filter().dir() != null) { + options = options.filterDirectories(mapMatcher(externalOptions.filter().dir(), targetPath)); + } + if (externalOptions.filter().file() != null) { + options = options.filterFiles(mapMatcher(externalOptions.filter().file(), targetPath)); + } + return options; + } + + private PrettyPrintOptions mapLineExtensions(PrettyPrintOptions options, ExternalOptions externalOptions, Path targetPath) { + if (externalOptions.lineExtensions() == null) { + return options; + } + var builder = LineExtensions.builder(); + for (var extension : externalOptions.lineExtensions()) { + builder.add(mapMatcher(extension.matcher(), targetPath), extension.extension()); + } + return options.withLineExtension(builder.build()); + } + private PathMatcher mapMatcher(Matcher matcher, Path targetPath) { return switch (matcher) { case Matcher.AlwaysTrue() -> p -> true; diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java index 1c0d81f..a551caa 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java @@ -1,11 +1,17 @@ package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; +import java.util.List; import org.jspecify.annotations.Nullable; public record ExternalOptions( @Nullable Boolean emojis, - @Valid @Nullable ChildLimit childLimit + @Nullable Boolean compactDirectories, + @Nullable Integer maxDepth, + @Valid @Nullable ChildLimit childLimit, + @Valid @Nullable Filter filter, + @Valid @Nullable List<@Valid @NotNull LineExtension> lineExtensions ) { } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java new file mode 100644 index 0000000..025fff8 --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java @@ -0,0 +1,11 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; + +import jakarta.validation.Valid; +import org.jspecify.annotations.Nullable; + +public record Filter( + @Valid @Nullable Matcher dir, + @Valid @Nullable Matcher file +) { + +} diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java new file mode 100644 index 0000000..378a3bd --- /dev/null +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java @@ -0,0 +1,11 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model; + +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotNull; + +public record LineExtension( + @Valid @NotNull String extension, + @Valid @NotNull Matcher matcher +) { + +} diff --git a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json index 7a04979..8f013ea 100644 --- a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json +++ b/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json @@ -47,6 +47,24 @@ "allDeclaredFields": true, "allPublicFields": true }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Filter", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, + { + "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.LineExtension", + "allDeclaredConstructors": true, + "allPublicConstructors": true, + "allDeclaredMethods": true, + "allPublicMethods": true, + "allDeclaredFields": true, + "allPublicFields": true + }, { "type": "io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit$StaticLimit", "allDeclaredConstructors": true, diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java index 908c9df..0349b1e 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -13,6 +13,7 @@ import java.io.IOException; import java.io.PrintStream; import java.nio.file.Path; +import java.util.function.Consumer; import org.jspecify.annotations.Nullable; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Nested; @@ -39,14 +40,18 @@ private String[] buildCliArgs(String targetPath, @Nullable String optionsPath) { // return new String[] { targetPath, "-o", optionsPath, "-d" }; } - private void runCliTest(FileTreePrettyPrinterCommandLine cli, FileTreePrettyPrinter ref, String[] args, String targetPath) { - + private void runSuccessTest(FileTreePrettyPrinterCommandLine cli, String[] args, FileTreePrettyPrinter ref, String targetPath) { cli.executeCommand(args); - var allWrittenLines = new String(out_and_err.toByteArray()); assertThat(allWrittenLines).isEqualTo(ref.prettyPrint(targetPath) + "\n"); } + private void runErrorTest(FileTreePrettyPrinterCommandLine cli, String[] args, Consumer outputAssertor) { + cli.executeCommand(args); + var allWrittenLines = new String(out_and_err.toByteArray()); + outputAssertor.accept(allWrittenLines); + } + @Test void no_options() throws IOException { String targetPath = "src/test/resources/cli/base"; @@ -59,7 +64,49 @@ void no_options() throws IOException { var ref = FileTreePrettyPrinter.createDefault(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); + } + + @Test + void unexisting_options() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "not_existing"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + Consumer outputAssertor = out -> assertThat(out).startsWith("[ERROR] Options file does not exist:").contains("not_existing"); + runErrorTest(cli, args, outputAssertor); + } + + @Test + void malformed_options() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/malformed.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + Consumer outputAssertor = out -> assertThat(out).startsWith("[ERROR] IO error or malformed options file:").contains("malformed.yaml"); + runErrorTest(cli, args, outputAssertor); + } + + @Test + void invalid_options() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/invalid.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + Consumer outputAssertor = out -> assertThat(out).startsWith("[ERROR] Invalid options file:").contains("invalid.yaml"); + runErrorTest(cli, args, outputAssertor); } @Nested @@ -79,7 +126,51 @@ void emojis() throws IOException { .customizeOptions(options -> options.withDefaultEmojis()) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); + } + + } + + @Nested + class CompactDirectories { + + @Test + void emojis() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/compactDirectories.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withCompactDirectories(true)) + .build(); + + runSuccessTest(cli, args, ref, targetPath); + } + + } + + @Nested + class MaxDepth { + + @Test + void emojis() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/maxDepth.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withMaxDepth(2)) + .build(); + + runSuccessTest(cli, args, ref, targetPath); } } @@ -101,7 +192,7 @@ void static_limit() throws IOException { .customizeOptions(options -> options.withChildLimit(2)) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); } @Test @@ -122,7 +213,7 @@ void dynamic_limit_glob() throws IOException { .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); } @Test @@ -142,7 +233,7 @@ void dynamic_limit_everything() throws IOException { .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); } @Test @@ -163,7 +254,7 @@ void dynamic_limit_allOf() throws IOException { .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); } @Test @@ -184,7 +275,7 @@ void dynamic_limit_anyOf() throws IOException { .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); } @Test @@ -205,7 +296,56 @@ void dynamic_limit_noneOf() throws IOException { .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - runCliTest(cli, ref, args, targetPath); + runSuccessTest(cli, args, ref, targetPath); + } + + } + + @Nested + class Filter { + + @Test + void nominal() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/filter.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterDirectories(PathMatchers.hasNameMatchingGlob("*a"))) + .customizeOptions(options -> options.filterFiles(PathMatchers.hasNameMatchingGlob("*.java"))) + .build(); + + runSuccessTest(cli, args, ref, targetPath); + } + + } + + @Nested + class LineExtensions { + + @Test + void nominal() throws IOException { + String targetPath = "src/test/resources/cli/base"; + String optionsPath = "src/test/resources/cli/options/lineExtensions.yaml"; + String[] args = buildCliArgs(targetPath, optionsPath); + + var optionsLoader = OptionsLoader.createDefault(output); + var exHandler = new DefaultExecutionExceptionHandler(output); + var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); + + var extensions = io.github.computerdaddyguy.jfiletreeprettyprinter.options.LineExtensions.builder() + .add(PathMatchers.hasNameMatchingGlob("*.java"), " // This is java file") + .add(PathMatchers.hasNameMatchingGlob("*.php"), " // This is php file") + .build(); + var ref = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withLineExtension(extensions)) + .build(); + + runSuccessTest(cli, args, ref, targetPath); } } diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java index ccaf251..6c377cd 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java @@ -5,6 +5,8 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit.DynamicLimit; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ChildLimit.DynamicLimitItem; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.ExternalOptions; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Filter; +import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.LineExtension; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher.NameGlob; import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.model.Matcher.PathGlob; import java.util.List; @@ -18,22 +20,47 @@ void nominal() { var dynLimit1 = new DynamicLimitItem(1, new NameGlob("*.java")); var dynLimit2 = new DynamicLimitItem(1, new PathGlob("pictures")); var childLimit = new DynamicLimit(List.of(dynLimit1, dynLimit2)); - var rec = new ExternalOptions(Boolean.TRUE, childLimit); + var maxDepth = 3; + var filter = new Filter( + new NameGlob("folderOk"), + new NameGlob("fileOk.*") + ); + var lineExt1 = new LineExtension("This is java file", new NameGlob("*.java")); + var lineExt2 = new LineExtension("This is php file", new NameGlob("*.php")); + var lineExtensions = List.of(lineExt1, lineExt2); + var rec = new ExternalOptions(Boolean.TRUE, Boolean.TRUE, maxDepth, childLimit, filter, lineExtensions); var expected = """ ExternalOptions - emojis = true + emojis: true + compactDirectories: true + maxDepth: 3 childLimit -> DynamicLimit - limits = [ + limits: [ [0] -> DynamicLimitItem - limit = 1 + limit: 1 matcher -> NameGlob - glob = *.java + glob: "*.java" [1] -> DynamicLimitItem - limit = 1 + limit: 1 matcher -> PathGlob - glob = pictures - ]"""; + glob: "pictures" + ] + filter -> Filter + dir -> NameGlob + glob: "folderOk" + file -> NameGlob + glob: "fileOk.*" + lineExtensions: [ + [0] -> LineExtension + extension: "This is java file" + matcher -> NameGlob + glob: "*.java" + [1] -> LineExtension + extension: "This is php file" + matcher -> NameGlob + glob: "*.php" + ]"""; assertThat(RecordUtils.toTextBlock(rec)).isEqualToNormalizingNewlines(expected); } diff --git a/src/test/resources/cli/options/compactDirectories.yaml b/src/test/resources/cli/options/compactDirectories.yaml new file mode 100644 index 0000000..250030c --- /dev/null +++ b/src/test/resources/cli/options/compactDirectories.yaml @@ -0,0 +1 @@ +compactDirectories: true \ No newline at end of file diff --git a/src/test/resources/cli/options/filter.yaml b/src/test/resources/cli/options/filter.yaml new file mode 100644 index 0000000..a10541f --- /dev/null +++ b/src/test/resources/cli/options/filter.yaml @@ -0,0 +1,7 @@ +filter: + dir: + type: name + glob: "*a" + file: + type: name + glob: "*.java" \ No newline at end of file diff --git a/src/test/resources/cli/options/invalid.yaml b/src/test/resources/cli/options/invalid.yaml new file mode 100644 index 0000000..7775c22 --- /dev/null +++ b/src/test/resources/cli/options/invalid.yaml @@ -0,0 +1,2 @@ +childLimit: + type: static \ No newline at end of file diff --git a/src/test/resources/cli/options/lineExtensions.yaml b/src/test/resources/cli/options/lineExtensions.yaml new file mode 100644 index 0000000..c503e0f --- /dev/null +++ b/src/test/resources/cli/options/lineExtensions.yaml @@ -0,0 +1,9 @@ +lineExtensions: + - extension: " // This is java file" + matcher: + type: name + glob: "*.java" + - extension: " // This is php file" + matcher: + type: name + glob: "*.php" \ No newline at end of file diff --git a/src/test/resources/cli/options/malformed.yaml b/src/test/resources/cli/options/malformed.yaml new file mode 100644 index 0000000..1d9dfc5 --- /dev/null +++ b/src/test/resources/cli/options/malformed.yaml @@ -0,0 +1 @@ +emojis true \ No newline at end of file diff --git a/src/test/resources/cli/options/maxDepth.yaml b/src/test/resources/cli/options/maxDepth.yaml new file mode 100644 index 0000000..bcf7299 --- /dev/null +++ b/src/test/resources/cli/options/maxDepth.yaml @@ -0,0 +1 @@ +maxDepth: 2 \ No newline at end of file From ad033a2299c10cd7c62600184d0f1bc60519ab9b Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 00:52:29 +0100 Subject: [PATCH 23/57] Fix Sonar --- .../DefaultExecutionExceptionHandler.java | 9 ++++-- .../reader/SimpleExternalOptionsReader.java | 28 ++++++++----------- .../FileTreePrettyPrinterCommandLineTest.java | 5 +++- src/test/resources/cli/options/invalid.yaml | 11 +++++++- 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java index 4952bb5..b975ff3 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java @@ -3,6 +3,7 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.io.ConsoleOutput; import jakarta.validation.ConstraintViolationException; import java.util.Objects; +import java.util.stream.Collectors; import org.jspecify.annotations.NullMarked; import picocli.CommandLine; import picocli.CommandLine.IExecutionExceptionHandler; @@ -28,12 +29,16 @@ public int handleExecutionException(Exception ex, CommandLine commandLine, Parse private int handleExternalOptionsException(ExternalOptionsException e) { output.printError(e.getMessage() + ": " + e.getOptionsPath().toString()); - e.printStackTrace(); return 1; } private int handleConstraintViolationException(ConstraintViolationException e) { - output.printError(e.getMessage() + ": TODO"); + output.printError( + "Invalid options file:" + System.lineSeparator() + + e.getConstraintViolations().stream() + .map(violation -> " -> " + violation.getPropertyPath() + ": " + violation.getMessage()) + .collect(Collectors.joining(System.lineSeparator())) + ); return 1; } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java index 3d028d1..1a8b9df 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java @@ -45,7 +45,8 @@ public ExternalOptions readExternalOptions(Path targetPath, @Nullable Path optio output.printDebug("Options file found: %s", optionsPath); var externalOptions = load(output, optionsPath); - validate(output, optionsPath, externalOptions); + validate(externalOptions); + output.printDebug("Options file is valid"); return externalOptions; } @@ -63,23 +64,18 @@ private ExternalOptions load(ConsoleOutput output, Path optionsPath) { } } - private void validate(ConsoleOutput output, Path optionsPath, ExternalOptions externalOptions) { - try { - var validatorFactory = Validation.byDefaultProvider() - .configure() - .messageInterpolator(new ParameterMessageInterpolator()) - .buildValidatorFactory(); - var validator = validatorFactory.getValidator(); - - var violations = validator.validate(externalOptions); - if (!violations.isEmpty()) { - throw new ConstraintViolationException(violations); - } + private void validate(ExternalOptions externalOptions) { + var validatorFactory = Validation.byDefaultProvider() + .configure() + .messageInterpolator(new ParameterMessageInterpolator()) + .buildValidatorFactory(); + var validator = validatorFactory.getValidator(); - output.printDebug("Options file is valid"); - } catch (ConstraintViolationException e) { - throw new ExternalOptionsException(optionsPath, "Invalid options file", e); + var violations = validator.validate(externalOptions); + if (!violations.isEmpty()) { + throw new ConstraintViolationException(violations); } + } } diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java index 0349b1e..33d7a03 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -105,7 +105,10 @@ void invalid_options() throws IOException { var exHandler = new DefaultExecutionExceptionHandler(output); var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); - Consumer outputAssertor = out -> assertThat(out).startsWith("[ERROR] Invalid options file:").contains("invalid.yaml"); + Consumer outputAssertor = out -> assertThat(out) + .startsWith("[ERROR] Invalid options file:") + .contains("childLimit.limits[0].matcher.glob:") + .contains("childLimit.limits[1].matcher.glob:"); runErrorTest(cli, args, outputAssertor); } diff --git a/src/test/resources/cli/options/invalid.yaml b/src/test/resources/cli/options/invalid.yaml index 7775c22..c5dc59b 100644 --- a/src/test/resources/cli/options/invalid.yaml +++ b/src/test/resources/cli/options/invalid.yaml @@ -1,2 +1,11 @@ childLimit: - type: static \ No newline at end of file + type: dynamic + limits: + - limit: 2 + matcher: + type: "name" + glob: "" + - limit: 3 + matcher: + type: "name" + glob: "" \ No newline at end of file From 64813e0b946c3cb931e04aff63f28cbedd2179e8 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 00:58:37 +0100 Subject: [PATCH 24/57] Fix Sonar --- .../cli/RecordUtils.java | 3 +- .../cli/io/DefaultConsoleOutput.java | 2 +- .../mapper/DefaultExternalOptionsMapper.java | 5 +-- .../FileTreePrettyPrinterCommandLineTest.java | 34 +++++++++---------- 4 files changed, 23 insertions(+), 21 deletions(-) diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java index 9d9db02..b126354 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java @@ -28,7 +28,8 @@ public static String toTextBlock(@Nullable Record rec) { private static void toTextBlock(List lines, String shift, @Nullable String attrName, @Nullable Object value, String indent) { if (value == null) { return; // do not print null objects, just ignore them - } else if (value.getClass().isRecord()) { + } + if (value.getClass().isRecord()) { toTextBlockRecord(lines, shift, attrName, (Record) value, indent); } else if (value instanceof Collection coll) { toTextBlockCollection(lines, shift, attrName, coll, indent); diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java index 8508923..efd146b 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java @@ -70,7 +70,7 @@ private void printErr(String msg, Object... args) { } private void printfln(PrintStream dest, String msg, Object... args) { - dest.printf(msg + "\n", args);// Because "printf" does not print line return + dest.printf("%s%s", msg, System.lineSeparator(), args);// Because "printf" does not print line return } } diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java index db827a1..bdb5d48 100644 --- a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java +++ b/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java @@ -39,8 +39,9 @@ private PrettyPrintOptions mapCompactDirectories(PrettyPrintOptions options, Ext } private PrettyPrintOptions mapMaxDepth(PrettyPrintOptions options, ExternalOptions externalOptions) { - if (externalOptions.maxDepth() != null) { - return options.withMaxDepth(externalOptions.maxDepth()); + var max = externalOptions.maxDepth(); + if (max != null) { + return options.withMaxDepth(max); } return options; } diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java index 33d7a03..838674a 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java +++ b/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -9,8 +9,8 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.cli.options.OptionsLoader; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.ChildLimits; import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathMatchers; +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; import java.io.ByteArrayOutputStream; -import java.io.IOException; import java.io.PrintStream; import java.nio.file.Path; import java.util.function.Consumer; @@ -53,7 +53,7 @@ private void runErrorTest(FileTreePrettyPrinterCommandLine cli, String[] args, C } @Test - void no_options() throws IOException { + void no_options() { String targetPath = "src/test/resources/cli/base"; String optionsPath = null; String[] args = buildCliArgs(targetPath, optionsPath); @@ -68,7 +68,7 @@ void no_options() throws IOException { } @Test - void unexisting_options() throws IOException { + void unexisting_options() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "not_existing"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -82,7 +82,7 @@ void unexisting_options() throws IOException { } @Test - void malformed_options() throws IOException { + void malformed_options() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/malformed.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -96,7 +96,7 @@ void malformed_options() throws IOException { } @Test - void invalid_options() throws IOException { + void invalid_options() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/invalid.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -116,7 +116,7 @@ void invalid_options() throws IOException { class Emojis { @Test - void emojis() throws IOException { + void nominal() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/emojis.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -126,7 +126,7 @@ void emojis() throws IOException { var cli = new FileTreePrettyPrinterCommandLine(output, optionsLoader, exHandler); var ref = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withDefaultEmojis()) + .customizeOptions(PrettyPrintOptions::withDefaultEmojis) .build(); runSuccessTest(cli, args, ref, targetPath); @@ -138,7 +138,7 @@ void emojis() throws IOException { class CompactDirectories { @Test - void emojis() throws IOException { + void nominal() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/compactDirectories.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -160,7 +160,7 @@ void emojis() throws IOException { class MaxDepth { @Test - void emojis() throws IOException { + void nominal() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/maxDepth.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -182,7 +182,7 @@ void emojis() throws IOException { class ChildLimit { @Test - void static_limit() throws IOException { + void static_limit() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/childLimit_static.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -199,7 +199,7 @@ void static_limit() throws IOException { } @Test - void dynamic_limit_glob() throws IOException { + void dynamic_limit_glob() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_glob.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -220,7 +220,7 @@ void dynamic_limit_glob() throws IOException { } @Test - void dynamic_limit_everything() throws IOException { + void dynamic_limit_everything() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_everything.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -240,7 +240,7 @@ void dynamic_limit_everything() throws IOException { } @Test - void dynamic_limit_allOf() throws IOException { + void dynamic_limit_allOf() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_allOf.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -261,7 +261,7 @@ void dynamic_limit_allOf() throws IOException { } @Test - void dynamic_limit_anyOf() throws IOException { + void dynamic_limit_anyOf() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -282,7 +282,7 @@ void dynamic_limit_anyOf() throws IOException { } @Test - void dynamic_limit_noneOf() throws IOException { + void dynamic_limit_noneOf() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -308,7 +308,7 @@ void dynamic_limit_noneOf() throws IOException { class Filter { @Test - void nominal() throws IOException { + void nominal() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/filter.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); @@ -331,7 +331,7 @@ void nominal() throws IOException { class LineExtensions { @Test - void nominal() throws IOException { + void nominal() { String targetPath = "src/test/resources/cli/base"; String optionsPath = "src/test/resources/cli/options/lineExtensions.yaml"; String[] args = buildCliArgs(targetPath, optionsPath); From f77bbf0064b9fe9f84cdf4b433577eac1aaa0f74 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 01:03:42 +0100 Subject: [PATCH 25/57] Exclude java tests from sonar --- .github/workflows/sonarcloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 2166a05..5de7a20 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,4 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.test.exclusions=src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file From 8609ad1cba9f8bca865cfd4a1909d28cbcf84f5e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 01:08:35 +0100 Subject: [PATCH 26/57] Exclude java tests from sonar --- .github/workflows/sonarcloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 5de7a20..14992b8 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,4 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.test.exclusions=src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.exclusions=src/test/** -Dsonar.coverage.exclusions=/src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file From 3ed83d359e3a08afe2ed54a6535966c32e44bc99 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 15:41:52 +0100 Subject: [PATCH 27/57] Split + mvn test OK --- jfiletreeprettyprinter-cli/pom.xml | 58 +++ .../cli/FileTreePrettyPrinterCommandLine.java | 0 .../cli/ManifestVersionProvider.java | 0 .../cli/PrettyPrintCommand.java | 0 .../cli/RecordUtils.java | 0 .../DefaultExecutionExceptionHandler.java | 0 .../exception/ExternalOptionsException.java | 0 .../cli/io/ConsoleOutput.java | 0 .../cli/io/DefaultConsoleOutput.java | 0 .../cli/options/DefaultOptionsLoader.java | 0 .../cli/options/OptionsLoader.java | 0 .../mapper/DefaultExternalOptionsMapper.java | 0 .../options/mapper/ExternalOptionsMapper.java | 0 .../cli/options/model/ChildLimit.java | 0 .../cli/options/model/ExternalOptions.java | 0 .../cli/options/model/Filter.java | 0 .../cli/options/model/LineExtension.java | 0 .../cli/options/model/Matcher.java | 0 .../options/reader/ExternalOptionsReader.java | 0 .../reader/FallbackExternalOptionsReader.java | 0 .../reader/SimpleExternalOptionsReader.java | 0 .../reachability-metadata.json | 0 .../FileTreePrettyPrinterCommandLineTest.java | 2 +- .../cli/ManifestVersionProviderTest.java | 0 .../cli/RecordUtilsTest.java | 0 .../resources/cli/base/folder_a/file_1.txt | Bin .../resources/cli/base/folder_a/file_2.java | Bin .../resources/cli/base/folder_a/file_3.php | 0 .../resources/cli/base/folder_a/file_4.jpeg | 0 .../resources/cli/base/folder_b/file_1.txt | 0 .../resources/cli/base/folder_b/file_2.java | 0 .../resources/cli/base/folder_b/file_3.php | 0 .../resources/cli/base/folder_b/file_4.jpeg | 0 .../resources/cli/base/folder_c/file_1.txt | 0 .../resources/cli/base/folder_c/file_2.java | 0 .../resources/cli/base/folder_c/file_3.php | 0 .../resources/cli/base/folder_c/file_4.jpeg | 0 .../resources/cli/base/folder_d/file_1.txt | 0 .../resources/cli/base/folder_d/file_2.java | 0 .../resources/cli/base/folder_d/file_3.php | 0 .../resources/cli/base/folder_d/file_4.jpeg | 0 .../folder_z1/folder_z2/folder_z3/file_1.txt | 0 .../folder_z1/folder_z2/folder_z3/file_2.java | 0 .../folder_z1/folder_z2/folder_z3/file_3.php | 0 .../folder_z1/folder_z2/folder_z3/file_4.jpeg | 0 .../cli/options/childLimit_dynamic_allOf.yaml | 0 .../cli/options/childLimit_dynamic_anyOf.yaml | 0 .../childLimit_dynamic_everything.yaml | 0 .../cli/options/childLimit_dynamic_glob.yaml | 0 .../options/childLimit_dynamic_noneOf.yaml | 0 .../cli/options/childLimit_static.yaml | 0 .../cli/options/compactDirectories.yaml | 0 .../test/resources/cli/options/emojis.yaml | 0 .../test/resources/cli/options/filter.yaml | 0 .../test/resources/cli/options/invalid.yaml | 0 .../resources/cli/options/lineExtensions.yaml | 0 .../test/resources/cli/options/malformed.yaml | 0 .../test/resources/cli/options/maxDepth.yaml | 0 jfiletreeprettyprinter-core/pom.xml | 45 +++ .../DefaultFileTreePrettyPrinter.java | 0 .../FileTreePrettyPrinter.java | 0 .../FileTreePrettyPrinterBuilder.java | 0 .../options/ChildLimitBuilder.java | 0 .../options/ChildLimits.java | 0 .../options/DefaultEmojiMapping.java | 0 .../options/DefaultEmojiMappingBuilder.java | 0 .../options/EmojiMapping.java | 0 .../options/EmojiMappingBuilder.java | 0 .../options/LineExtensionBuilder.java | 0 .../options/LineExtensions.java | 0 .../options/MappingUtils.java | 0 .../options/PathExtensionEmojiFunction.java | 0 .../options/PathMatcherEmojiFunction.java | 0 .../options/PathMatchers.java | 0 .../options/PathNameEmojiFunction.java | 0 .../options/PathSortBuilder.java | 0 .../options/PathSorts.java | 0 .../options/PrettyPrintOptions.java | 0 .../options/SequentialEmojiFunction.java | 0 .../options/TreeFormat.java | 0 .../options/TreeFormats.java | 0 .../renderer/DefaultFileFormatter.java | 0 .../renderer/DefaultLineRenderer.java | 0 .../renderer/DefaultTreeEntryRenderer.java | 0 .../renderer/DefaultTreeFormatter.java | 0 .../renderer/Depth.java | 0 .../renderer/EmojiFileFormatter.java | 0 .../renderer/FileFormatter.java | 0 .../renderer/LineRenderer.java | 0 .../renderer/RenderingOptions.java | 0 .../renderer/TreeEntryRenderer.java | 0 .../renderer/TreeFormatter.java | 0 .../renderer/TreeSymbol.java | 0 .../scanner/DefaultPathToTreeScanner.java | 0 .../scanner/PathToTreeScanner.java | 0 .../scanner/ScanningOptions.java | 0 .../scanner/TreeEntry.java | 0 .../BasicUsageTest.java | 0 .../ChildLimitDynamicTest.java | 0 .../ChildLimitStaticTest.java | 0 .../CompactDirectoriesTest.java | 0 .../jfiletreeprettyprinter/EmojisTest.java | 2 +- .../FileTreePrettyPrinterBuilderTest.java | 0 .../FileTreePrettyPrinterTest.java | 0 .../jfiletreeprettyprinter/FilteringTest.java | 12 +- .../LineExtensionTest.java | 2 +- .../jfiletreeprettyprinter/MaxDepthTest.java | 0 .../PathMatchersTest.java | 0 .../PathSortBuilderTest.java | 0 .../jfiletreeprettyprinter/SortingTest.java | 4 +- .../TreeFormatTest.java | 0 .../renderer/DepthTest.java | 0 .../util/FileStructureCreator.java | 0 .../util/FileStructures.java | 0 .../src/test/resources/base/businessPlan.pdf | Bin .../test/resources/base/businessProject.pdf | Bin .../src/test/resources/base/cars/Ferrari.doc | 0 .../src/test/resources/base/cars/Porsche.doc | 0 .../src/test/resources/base/diyIdeas.docx | 0 .../src/test/resources/base/giftIdeas.txt | 0 .../test/resources/base/images/funnyCat.gif | 0 .../base/images/holidays/meAtTheBeach.jpeg | 0 .../base/images/holidays/meAtTheZoo.jpeg | 0 .../test/resources/base/images/landscape.jpeg | 0 .../resources/child_limit_dynamic}/file_0_1 | 0 .../child_limit_dynamic}/folder_1/file_1_1 | 0 .../child_limit_dynamic}/folder_1/file_1_2 | 0 .../child_limit_dynamic}/folder_1/file_1_3 | 0 .../child_limit_dynamic}/folder_1/file_1_4 | 0 .../child_limit_dynamic}/folder_1/file_1_5 | 0 .../node_modules/file_node_01 | 0 .../node_modules/file_node_02 | 0 .../node_modules/file_node_03 | 0 .../node_modules/file_node_04 | 0 .../node_modules/file_node_05 | 0 .../node_modules/file_node_06 | 0 .../node_modules/file_node_07 | 0 .../node_modules/file_node_08 | 0 .../node_modules/file_node_09 | 0 .../node_modules/file_node_10 | 0 .../node_modules/file_node_11 | 0 .../node_modules/file_node_12 | 0 .../node_modules/file_node_13 | 0 .../node_modules/file_node_14 | 0 .../node_modules/file_node_15 | 0 .../node_modules/file_node_16 | 0 .../node_modules/file_node_17 | 0 .../node_modules/file_node_18 | 0 .../node_modules/file_node_19 | 0 .../node_modules/file_node_20 | 0 .../resources/child_limit_static/file_0_1 | 0 .../child_limit_static/folder_1}/file_1_1 | 0 .../child_limit_static/folder_1}/file_1_2 | 0 .../child_limit_static/folder_1/file_1_3 | 0 .../child_limit_static/folder_1/file_1_4 | 0 .../child_limit_static/folder_1/file_1_5 | 0 .../child_limit_static/folder_2}/file_2_1 | 0 .../child_limit_static/folder_2}/file_2_2 | 0 .../child_limit_static/folder_2/file_2_3 | 0 .../child_limit_static/folder_2/file_2_4 | 0 .../child_limit_static/folder_2/file_2_5 | 0 .../child_limit_static/folder_3/file_3_1 | 0 .../child_limit_static/folder_3/file_3_2 | 0 .../child_limit_static/folder_3/file_3_3 | 0 .../child_limit_static/folder_3/file_3_4 | 0 .../child_limit_static/folder_3/file_3_5 | 0 .../child_limit_static/folder_4/file_4_1 | 0 .../child_limit_static/folder_4/file_4_2 | 0 .../child_limit_static/folder_4/file_4_3 | 0 .../child_limit_static/folder_4/file_4_4 | 0 .../child_limit_static/folder_4/file_4_5 | 0 .../child_limit_static/folder_5/file_5_1 | 0 .../child_limit_static/folder_5/file_5_2 | 0 .../child_limit_static/folder_5/file_5_3 | 0 .../child_limit_static/folder_5/file_5_4 | 0 .../child_limit_static/folder_5/file_5_5 | 0 .../resources/depth_limit/level_1/file_1_1 | 0 .../resources/depth_limit/level_1/file_1_2 | 0 .../depth_limit/level_1/level_2/file_2_1 | 0 .../depth_limit/level_1/level_2/file_2_2 | 0 .../level_1/level_2/level_3/file_3_1 | 0 .../level_1/level_2/level_3/file_3_2 | 0 .../level_1/level_2/level_3/level_4/file_4_1 | 0 .../level_1/level_2/level_3/level_4/file_4_2 | 0 .../level_2/level_3/level_4/level_5/file_5_1 | 0 .../level_2/level_3/level_4/level_5/file_5_2 | 0 .../emojis/applications/executables/file.apk | 0 .../emojis/applications/executables/file.app | 0 .../emojis/applications/executables/file.bin | 0 .../emojis/applications/executables/file.exe | 0 .../emojis/applications/executables/file.msi | 0 .../emojis/applications/executables/file2.ipa | 0 .../emojis/applications/libs/file.dll | 0 .../emojis/applications/libs/file.lib | 0 .../emojis/applications/libs/file.so | 0 .../test/resources/emojis/archives/file.7z | 0 .../test/resources/emojis/archives/file.gz | 0 .../test/resources/emojis/archives/file.img | 0 .../test/resources/emojis/archives/file.iso | 0 .../test/resources/emojis/archives/file.rar | 0 .../test/resources/emojis/archives/file.tar | 0 .../test/resources/emojis/archives/file.zip | 0 .../src/test/resources/emojis/code/.gitignore | 0 .../src/test/resources/emojis/code/Dockerfile | 0 .../test/resources/emojis/code/Jenkinsfile | 0 .../emojis/code/build_tools/build.gradle | 0 .../emojis/code/build_tools/makefile | 0 .../emojis/code/build_tools/package.json | 0 .../resources/emojis/code/build_tools/pom.xml | 0 .../resources/emojis/code/docker-compose.yml | 0 .../test/resources/emojis/code/lang/file.c | 0 .../test/resources/emojis/code/lang/file.cpp | 0 .../test/resources/emojis/code/lang/file.cs | 0 .../test/resources/emojis/code/lang/file.css | 0 .../test/resources/emojis/code/lang/file.htm | 0 .../test/resources/emojis/code/lang/file.html | 0 .../test/resources/emojis/code/lang/file.htmx | 0 .../test/resources/emojis/code/lang/file.java | 0 .../test/resources/emojis/code/lang/file.less | 0 .../test/resources/emojis/code/lang/file.php | 0 .../test/resources/emojis/code/lang/file.py | 0 .../test/resources/emojis/code/lang/file.scss | 0 .../test/resources/emojis/code/lang/file.sql | 0 .../test/resources/emojis/code/lang/file.ts | 0 .../resources/emojis/code/scripting/file.bash | 0 .../resources/emojis/code/scripting/file.bat | 0 .../resources/emojis/code/scripting/file.sh | Bin .../src/test/resources/emojis/data/file.cfg | 0 .../src/test/resources/emojis/data/file.conf | 0 .../src/test/resources/emojis/data/file.csv | 0 .../src/test/resources/emojis/data/file.ini | 0 .../src/test/resources/emojis/data/file.json | 0 .../src/test/resources/emojis/data/file.ods | 0 .../resources/emojis/data/file.properties | 0 .../src/test/resources/emojis/data/file.xls | 0 .../src/test/resources/emojis/data/file.xlsx | 0 .../src/test/resources/emojis/data/file.xml | 0 .../src/test/resources/emojis/data/file.yaml | 0 .../src/test/resources/emojis/data/file.yml | 0 .../src/test/resources/emojis/doc/file.doc | 0 .../src/test/resources/emojis/doc/file.docx | 0 .../src/test/resources/emojis/doc/file.epub | 0 .../src/test/resources/emojis/doc/file.md | 0 .../src/test/resources/emojis/doc/file.odt | 0 .../src/test/resources/emojis/doc/file.pdf | Bin .../src/test/resources/emojis/doc/file.rtf | 0 .../src/test/resources/emojis/doc/file.txt | 0 .../resources/emojis/file.unknown_extension | 0 .../resources/emojis/file_without_extension | 0 .../emojis/internet/github/changelog | 0 .../emojis/internet/github/changelog.md | 0 .../emojis/internet/github/contributing | 0 .../emojis/internet/github/contributing.md | 0 .../resources/emojis/internet/github/license | 0 .../emojis/internet/github/license.md | 0 .../resources/emojis/internet/github/readme | 0 .../emojis/internet/github/readme.md | 0 .../resources/emojis/internet/github/roadmap | 0 .../emojis/internet/github/roadmap.md | 0 .../resources/emojis/internet/github/security | 0 .../emojis/internet/github/security.md | 0 .../test/resources/emojis/internet/robots.txt | 0 .../resources/emojis/media/audio/file.aac | 0 .../resources/emojis/media/audio/file.flac | 0 .../resources/emojis/media/audio/file.midi | 0 .../resources/emojis/media/audio/file.mp3 | 0 .../resources/emojis/media/audio/file.ogg | 0 .../resources/emojis/media/audio/file.wav | 0 .../resources/emojis/media/images/file.bmp | 0 .../resources/emojis/media/images/file.gif | 0 .../resources/emojis/media/images/file.ico | 0 .../resources/emojis/media/images/file.jpeg | 0 .../resources/emojis/media/images/file.jpg | 0 .../resources/emojis/media/images/file.png | 0 .../resources/emojis/media/images/file.svg | 0 .../resources/emojis/media/video/file.avi | 0 .../resources/emojis/media/video/file.mkv | 0 .../resources/emojis/media/video/file.mov | 0 .../resources/emojis/media/video/file.mp4 | 0 .../resources/emojis/media/video/file.webm | 0 .../resources/emojis/media/video/file.wmv | 0 .../src/test/resources/emojis/system/file.bak | 0 .../src/test/resources/emojis/system/file.crt | 0 .../src/test/resources/emojis/system/file.key | 0 .../src/test/resources/emojis/system/file.pem | 0 .../src/test/resources/emojis/system/file.pub | 0 .../src/test/resources/emojis/system/file.tmp | 0 .../filtering/dir_with_java_files/file_B.java | 0 .../filtering/dir_with_java_files/file_C.cpp | 0 .../filtering/dir_with_java_files/file_D.ts | 0 .../filtering/dir_with_java_files/file_E.java | 0 .../nested_dir_with_java_files/file_G.java | 0 .../nested_dir_with_java_files/file_H.cpp | 0 .../nested_dir_with_java_files/file_I.ts | 0 .../nested_dir_with_java_files/file_J.java | 0 .../nested_dir_with_no_java_file/file_K.cpp | 0 .../nested_dir_with_no_java_file/file_L.ts | 0 .../dir_with_no_java_file/file_M.cpp | 0 .../filtering/dir_with_no_java_file/file_N.ts | 0 .../src/test/resources/filtering/file_A.java | 0 .../src/main/java/api/Controller.java | 0 .../src/main/java/domain/ValueObject.java | 0 .../src/main/java/infra/Repository.java | 0 .../src/main/resources/application.properties | 0 .../test/resources/max_depth/level1/file1#1 | 0 .../test/resources/max_depth/level1/file1#2 | 0 .../resources/max_depth/level1/level2/file2#1 | 0 .../resources/max_depth/level1/level2/file2#2 | 0 .../max_depth/level1/level2/level3/file3#1 | 0 .../max_depth/level1/level2/level3/file3#2 | 0 .../level1/level2/level3/level4/file4#1 | 0 .../level1/level2/level3/level4/file4#2 | 0 .../resources/single_directory_child/file1 | 0 .../resources/single_directory_child/file2 | 0 .../this/is/single/directory/child/file1 | 0 .../this/is/single/directory/child/file2 | 0 .../this/is/single/directory/child/file3 | 0 .../src/test}/resources/sorting/a_file | 0 .../src/test}/resources/sorting/b_file | 0 .../src/test}/resources/sorting/c_dir/c_file | 0 .../test}/resources/sorting/d_dir/d_a_file | 0 .../resources/sorting/d_dir/d_b_dir/d_b_file | 0 .../src/test}/resources/sorting/x_file | 0 .../src/test/resources/sorting/y_file | 0 .../src/test/resources/tree_format/file_1 | 0 .../src/test/resources/tree_format/file_2 | 0 .../resources/tree_format/subFolder/subFile_1 | 0 .../resources/tree_format/subFolder/subFile_2 | 0 jfiletreeprettyprinter-example/pom.xml | 21 + .../example/BasicUsage.java | 0 .../example/ChildLimitDynamic.java | 0 .../example/ChildLimitStatic.java | 0 .../example/CompactDirectories.java | 0 .../example/Emojis.java | 0 .../example/FileTreeFormat.java | 0 .../example/Filtering.java | 0 .../example/LineExtension.java | 0 .../example/MaxDepth.java | 0 .../example/ProjectStructure.java | 0 .../example/Sorting.java | 0 .../src/main/resources/base/businessPlan.pdf | Bin .../main/resources/base/businessProject.pdf | Bin .../src/main/resources/base/cars/Ferrari.doc | 0 .../src/main/resources/base/cars/Porsche.doc | 0 .../src/main/resources/base/diyIdeas.docx | 0 .../src/main/resources/base/giftIdeas.txt | 0 .../main/resources/base/images/funnyCat.gif | 0 .../base/images/holidays/meAtTheBeach.jpeg | 0 .../base/images/holidays/meAtTheZoo.jpeg | 0 .../main/resources/base/images/landscape.jpeg | 0 .../resources/child_limit_dynamic/file_0_1 | 0 .../child_limit_dynamic/folder_1/file_1_1 | 0 .../child_limit_dynamic/folder_1/file_1_2 | 0 .../child_limit_dynamic/folder_1/file_1_3 | 0 .../child_limit_dynamic/folder_1/file_1_4 | 0 .../child_limit_dynamic/folder_1/file_1_5 | 0 .../node_modules/file_node_01 | 0 .../node_modules/file_node_02 | 0 .../node_modules/file_node_03 | 0 .../node_modules/file_node_04 | 0 .../node_modules/file_node_05 | 0 .../node_modules/file_node_06 | 0 .../node_modules/file_node_07 | 0 .../node_modules/file_node_08 | 0 .../node_modules/file_node_09 | 0 .../node_modules/file_node_10 | 0 .../node_modules/file_node_11 | 0 .../node_modules/file_node_12 | 0 .../node_modules/file_node_13 | 0 .../node_modules/file_node_14 | 0 .../node_modules/file_node_15 | 0 .../node_modules/file_node_16 | 0 .../node_modules/file_node_17 | 0 .../node_modules/file_node_18 | 0 .../node_modules/file_node_19 | 0 .../node_modules/file_node_20 | 0 .../resources/child_limit_static/file_0_1 | 0 .../child_limit_static/folder_1/file_1_1 | 0 .../child_limit_static/folder_1/file_1_2 | 0 .../child_limit_static/folder_1/file_1_3 | 0 .../child_limit_static/folder_1/file_1_4 | 0 .../child_limit_static/folder_1/file_1_5 | 0 .../child_limit_static/folder_2/file_2_1 | 0 .../child_limit_static/folder_2/file_2_2 | 0 .../child_limit_static/folder_2/file_2_3 | 0 .../child_limit_static/folder_2/file_2_4 | 0 .../child_limit_static/folder_2/file_2_5 | 0 .../child_limit_static/folder_3/file_3_1 | 0 .../child_limit_static/folder_3/file_3_2 | 0 .../child_limit_static/folder_3/file_3_3 | 0 .../child_limit_static/folder_3/file_3_4 | 0 .../child_limit_static/folder_3/file_3_5 | 0 .../child_limit_static/folder_4/file_4_1 | 0 .../child_limit_static/folder_4/file_4_2 | 0 .../child_limit_static/folder_4/file_4_3 | 0 .../child_limit_static/folder_4/file_4_4 | 0 .../child_limit_static/folder_4/file_4_5 | 0 .../child_limit_static/folder_5/file_5_1 | 0 .../child_limit_static/folder_5/file_5_2 | 0 .../child_limit_static/folder_5/file_5_3 | 0 .../child_limit_static/folder_5/file_5_4 | 0 .../child_limit_static/folder_5/file_5_5 | 0 .../resources/depth_limit/level_1/file_1_1 | 0 .../resources/depth_limit/level_1/file_1_2 | 0 .../depth_limit/level_1/level_2/file_2_1 | 0 .../depth_limit/level_1/level_2/file_2_2 | 0 .../level_1/level_2/level_3/file_3_1 | 0 .../level_1/level_2/level_3/file_3_2 | 0 .../level_1/level_2/level_3/level_4/file_4_1 | 0 .../level_1/level_2/level_3/level_4/file_4_2 | 0 .../level_2/level_3/level_4/level_5/file_5_1 | 0 .../level_2/level_3/level_4/level_5/file_5_2 | 0 .../emojis/applications/executables/file.apk | 0 .../emojis/applications/executables/file.app | 0 .../emojis/applications/executables/file.bin | 0 .../emojis/applications/executables/file.exe | 0 .../emojis/applications/executables/file.msi | 0 .../emojis/applications/executables/file2.ipa | 0 .../emojis/applications/libs/file.dll | 0 .../emojis/applications/libs/file.lib | 0 .../emojis/applications/libs/file.so | 0 .../main/resources/emojis/archives/file.7z | 0 .../main/resources/emojis/archives/file.gz | 0 .../main/resources/emojis/archives/file.img | 0 .../main/resources/emojis/archives/file.iso | 0 .../main/resources/emojis/archives/file.rar | 0 .../main/resources/emojis/archives/file.tar | 0 .../main/resources/emojis/archives/file.zip | 0 .../src/main/resources/emojis/code/.gitignore | 0 .../src/main/resources/emojis/code/Dockerfile | 0 .../main/resources/emojis/code/Jenkinsfile | 0 .../emojis/code/build_tools/build.gradle | 0 .../emojis/code/build_tools/makefile | 0 .../emojis/code/build_tools/package.json | 0 .../resources/emojis/code/build_tools/pom.xml | 0 .../resources/emojis/code/docker-compose.yml | 0 .../main/resources/emojis/code/lang/file.c | 0 .../resources/emojis/code/lang/file.class | 0 .../main/resources/emojis/code/lang/file.cpp | 0 .../main/resources/emojis/code/lang/file.cs | 0 .../main/resources/emojis/code/lang/file.css | 0 .../main/resources/emojis/code/lang/file.htm | 0 .../main/resources/emojis/code/lang/file.html | 0 .../main/resources/emojis/code/lang/file.htmx | 0 .../main/resources/emojis/code/lang/file.jar | 0 .../main/resources/emojis/code/lang/file.java | 0 .../main/resources/emojis/code/lang/file.less | 0 .../main/resources/emojis/code/lang/file.php | 0 .../main/resources/emojis/code/lang/file.py | 0 .../main/resources/emojis/code/lang/file.scss | 0 .../main/resources/emojis/code/lang/file.sql | 0 .../main/resources/emojis/code/lang/file.ts | 0 .../resources/emojis/code/scripting/file.bash | 0 .../resources/emojis/code/scripting/file.bat | 0 .../resources/emojis/code/scripting/file.sh | 0 .../src/main/resources/emojis/data/file.cfg | 0 .../src/main/resources/emojis/data/file.conf | 0 .../src/main/resources/emojis/data/file.csv | 0 .../src/main/resources/emojis/data/file.ini | 0 .../src/main/resources/emojis/data/file.json | 0 .../src/main/resources/emojis/data/file.ods | 0 .../resources/emojis/data/file.properties | 0 .../src/main/resources/emojis/data/file.xls | 0 .../src/main/resources/emojis/data/file.xlsx | 0 .../src/main/resources/emojis/data/file.xml | 0 .../src/main/resources/emojis/data/file.yaml | 0 .../src/main/resources/emojis/data/file.yml | 0 .../src/main/resources/emojis/doc/file.doc | 0 .../src/main/resources/emojis/doc/file.docx | 0 .../src/main/resources/emojis/doc/file.epub | 0 .../src/main/resources/emojis/doc/file.md | 0 .../src/main/resources/emojis/doc/file.odt | 0 .../src/main/resources/emojis/doc/file.pdf | Bin .../src/main/resources/emojis/doc/file.rtf | 0 .../src/main/resources/emojis/doc/file.txt | 0 .../resources/emojis/file.unknown_extension | 0 .../resources/emojis/file_without_extension | 0 .../emojis/internet/github/changelog | 0 .../emojis/internet/github/changelog.md | 0 .../emojis/internet/github/contributing | 0 .../emojis/internet/github/contributing.md | 0 .../resources/emojis/internet/github/license | 0 .../emojis/internet/github/license.md | 0 .../resources/emojis/internet/github/readme | 0 .../emojis/internet/github/readme.md | 0 .../resources/emojis/internet/github/roadmap | 0 .../emojis/internet/github/roadmap.md | 0 .../resources/emojis/internet/github/security | 0 .../emojis/internet/github/security.md | 0 .../main/resources/emojis/internet/robots.txt | 0 .../resources/emojis/media/audio/file.aac | 0 .../resources/emojis/media/audio/file.flac | 0 .../resources/emojis/media/audio/file.midi | 0 .../resources/emojis/media/audio/file.mp3 | 0 .../resources/emojis/media/audio/file.ogg | 0 .../resources/emojis/media/audio/file.wav | 0 .../resources/emojis/media/images/file.bmp | 0 .../resources/emojis/media/images/file.gif | 0 .../resources/emojis/media/images/file.ico | 0 .../resources/emojis/media/images/file.jpeg | 0 .../resources/emojis/media/images/file.jpg | 0 .../resources/emojis/media/images/file.png | 0 .../resources/emojis/media/images/file.svg | 0 .../resources/emojis/media/video/file.avi | 0 .../resources/emojis/media/video/file.mkv | 0 .../resources/emojis/media/video/file.mov | 0 .../resources/emojis/media/video/file.mp4 | 0 .../resources/emojis/media/video/file.webm | 0 .../resources/emojis/media/video/file.wmv | 0 .../src/main/resources/emojis/system/file.bak | 0 .../src/main/resources/emojis/system/file.crt | 0 .../src/main/resources/emojis/system/file.key | 0 .../src/main/resources/emojis/system/file.log | 0 .../src/main/resources/emojis/system/file.pem | 0 .../src/main/resources/emojis/system/file.pub | 0 .../src/main/resources/emojis/system/file.tmp | 0 .../filtering/dir_with_java_files/file_B.java | 0 .../filtering/dir_with_java_files/file_C.cpp | 0 .../filtering/dir_with_java_files/file_D.ts | 0 .../filtering/dir_with_java_files/file_E.java | 0 .../nested_dir_with_java_files/file_G.java | 0 .../nested_dir_with_java_files/file_H.cpp | 0 .../nested_dir_with_java_files/file_I.ts | 0 .../nested_dir_with_java_files/file_J.java | 0 .../nested_dir_with_no_java_file/file_K.cpp | 0 .../nested_dir_with_no_java_file/file_L.ts | 0 .../dir_with_no_java_file/file_M.cpp | 0 .../filtering/dir_with_no_java_file/file_N.ts | 0 .../src/main/resources/filtering/file_A.java | 0 .../src/main/java/api/Controller.java | 0 .../src/main/java/domain/ValueObject.java | 0 .../src/main/java/infra/Repository.java | 0 .../src/main/resources/application.properties | 0 .../main/resources/max_depth/level1/file1#1 | 0 .../main/resources/max_depth/level1/file1#2 | 0 .../resources/max_depth/level1/level2/file2#1 | 0 .../resources/max_depth/level1/level2/file2#2 | 0 .../max_depth/level1/level2/level3/file3#1 | 0 .../max_depth/level1/level2/level3/file3#2 | 0 .../level1/level2/level3/level4/file4#1 | 0 .../level1/level2/level3/level4/file4#2 | 0 .../resources/single_directory_child/file1 | 0 .../resources/single_directory_child/file2 | 0 .../this/is/single/directory/child/file1 | 0 .../this/is/single/directory/child/file2 | 0 .../this/is/single/directory/child/file3 | 0 .../src/main/resources/sorting/a_file | 1 + .../src/main/resources/sorting/b_file | 1 + .../src/main/resources/sorting/c_dir/c_file | 1 + .../src/main/resources/sorting/d_dir/d_a_file | 1 + .../resources/sorting/d_dir/d_b_dir/d_b_file | 1 + .../src/main/resources/sorting/x_file | 1 + .../src/main/resources/sorting/y_file | 0 .../src/main/resources/tree_format/file_1 | 0 .../src/main/resources/tree_format/file_2 | 0 .../resources/tree_format/subFolder/subFile_1 | 0 .../resources/tree_format/subFolder/subFile_2 | 0 pom.xml | 377 +++++++++--------- 558 files changed, 334 insertions(+), 195 deletions(-) create mode 100644 jfiletreeprettyprinter-cli/pom.xml rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java (99%) rename {src => jfiletreeprettyprinter-cli/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java (100%) rename src/example/resources/base/businessPlan.pdf => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_1.txt (100%) rename src/example/resources/base/businessProject.pdf => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_2.java (100%) rename src/example/resources/base/cars/Ferrari.doc => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_3.php (100%) rename src/example/resources/base/cars/Porsche.doc => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_4.jpeg (100%) rename src/example/resources/base/diyIdeas.docx => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_1.txt (100%) rename src/example/resources/base/giftIdeas.txt => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_2.java (100%) rename src/example/resources/base/images/funnyCat.gif => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_3.php (100%) rename src/example/resources/base/images/holidays/meAtTheBeach.jpeg => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_4.jpeg (100%) rename src/example/resources/base/images/holidays/meAtTheZoo.jpeg => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_1.txt (100%) rename src/example/resources/base/images/landscape.jpeg => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_2.java (100%) rename src/example/resources/child_limit_dynamic/file_0_1 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_3.php (100%) rename src/example/resources/child_limit_dynamic/folder_1/file_1_1 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_4.jpeg (100%) rename src/example/resources/child_limit_dynamic/folder_1/file_1_2 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_1.txt (100%) rename src/example/resources/child_limit_dynamic/folder_1/file_1_3 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_2.java (100%) rename src/example/resources/child_limit_dynamic/folder_1/file_1_4 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_3.php (100%) rename src/example/resources/child_limit_dynamic/folder_1/file_1_5 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_4.jpeg (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_01 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_02 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_03 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_04 => jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/childLimit_dynamic_allOf.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/childLimit_dynamic_anyOf.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/childLimit_dynamic_everything.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/childLimit_dynamic_glob.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/childLimit_dynamic_noneOf.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/childLimit_static.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/compactDirectories.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/emojis.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/filter.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/invalid.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/lineExtensions.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/malformed.yaml (100%) rename {src => jfiletreeprettyprinter-cli/src}/test/resources/cli/options/maxDepth.yaml (100%) create mode 100644 jfiletreeprettyprinter-core/pom.xml rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultFileFormatter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeFormatter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/Depth.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/EmojiFileFormatter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/FileFormatter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/LineRenderer.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeEntryRenderer.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeFormatter.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeSymbol.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/DefaultPathToTreeScanner.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/PathToTreeScanner.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/ScanningOptions.java (100%) rename {src => jfiletreeprettyprinter-core/src}/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/TreeEntry.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/BasicUsageTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitDynamicTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/CompactDirectoriesTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java (99%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilderTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java (92%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java (98%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/MaxDepthTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchersTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilderTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java (97%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/TreeFormatTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DepthTest.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructureCreator.java (100%) rename {src => jfiletreeprettyprinter-core/src}/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructures.java (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_05 => jfiletreeprettyprinter-core/src/test/resources/base/businessPlan.pdf (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_06 => jfiletreeprettyprinter-core/src/test/resources/base/businessProject.pdf (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_07 => jfiletreeprettyprinter-core/src/test/resources/base/cars/Ferrari.doc (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_08 => jfiletreeprettyprinter-core/src/test/resources/base/cars/Porsche.doc (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_09 => jfiletreeprettyprinter-core/src/test/resources/base/diyIdeas.docx (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_10 => jfiletreeprettyprinter-core/src/test/resources/base/giftIdeas.txt (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_11 => jfiletreeprettyprinter-core/src/test/resources/base/images/funnyCat.gif (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_12 => jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheBeach.jpeg (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_13 => jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheZoo.jpeg (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_14 => jfiletreeprettyprinter-core/src/test/resources/base/images/landscape.jpeg (100%) rename {src/example/resources/child_limit_static => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic}/file_0_1 (100%) rename {src/example/resources/child_limit_static => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic}/folder_1/file_1_1 (100%) rename {src/example/resources/child_limit_static => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic}/folder_1/file_1_2 (100%) rename {src/example/resources/child_limit_static => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic}/folder_1/file_1_3 (100%) rename {src/example/resources/child_limit_static => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic}/folder_1/file_1_4 (100%) rename {src/example/resources/child_limit_static => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic}/folder_1/file_1_5 (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_15 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_01 (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_16 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_02 (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_17 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_03 (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_18 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_04 (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_19 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_05 (100%) rename src/example/resources/child_limit_dynamic/node_modules/file_node_20 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_06 (100%) rename src/example/resources/child_limit_static/folder_2/file_2_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_07 (100%) rename src/example/resources/child_limit_static/folder_2/file_2_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_08 (100%) rename src/example/resources/child_limit_static/folder_2/file_2_3 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_09 (100%) rename src/example/resources/child_limit_static/folder_2/file_2_4 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_10 (100%) rename src/example/resources/child_limit_static/folder_2/file_2_5 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_11 (100%) rename src/example/resources/child_limit_static/folder_3/file_3_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_12 (100%) rename src/example/resources/child_limit_static/folder_3/file_3_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_13 (100%) rename src/example/resources/child_limit_static/folder_3/file_3_3 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_14 (100%) rename src/example/resources/child_limit_static/folder_3/file_3_4 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_15 (100%) rename src/example/resources/child_limit_static/folder_3/file_3_5 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_16 (100%) rename src/example/resources/child_limit_static/folder_4/file_4_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_17 (100%) rename src/example/resources/child_limit_static/folder_4/file_4_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_18 (100%) rename src/example/resources/child_limit_static/folder_4/file_4_3 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_19 (100%) rename src/example/resources/child_limit_static/folder_4/file_4_4 => jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_20 (100%) rename src/example/resources/child_limit_static/folder_4/file_4_5 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/file_0_1 (100%) rename {src/example/resources/depth_limit/level_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1}/file_1_1 (100%) rename {src/example/resources/depth_limit/level_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1}/file_1_2 (100%) rename src/example/resources/child_limit_static/folder_5/file_5_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_3 (100%) rename src/example/resources/child_limit_static/folder_5/file_5_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_4 (100%) rename src/example/resources/child_limit_static/folder_5/file_5_3 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_5 (100%) rename {src/example/resources/depth_limit/level_1/level_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2}/file_2_1 (100%) rename {src/example/resources/depth_limit/level_1/level_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2}/file_2_2 (100%) rename src/example/resources/child_limit_static/folder_5/file_5_4 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_3 (100%) rename src/example/resources/child_limit_static/folder_5/file_5_5 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_4 (100%) rename src/example/resources/depth_limit/level_1/level_2/level_3/file_3_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_5 (100%) rename src/example/resources/depth_limit/level_1/level_2/level_3/file_3_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_1 (100%) rename src/example/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_2 (100%) rename src/example/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_3 (100%) rename src/example/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_4 (100%) rename src/example/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_5 (100%) rename src/example/resources/emojis/applications/executables/file.apk => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_1 (100%) rename src/example/resources/emojis/applications/executables/file.app => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_2 (100%) rename src/example/resources/emojis/applications/executables/file.bin => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_3 (100%) rename src/example/resources/emojis/applications/executables/file.exe => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_4 (100%) rename src/example/resources/emojis/applications/executables/file.msi => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_5 (100%) rename src/example/resources/emojis/applications/executables/file2.ipa => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_1 (100%) rename src/example/resources/emojis/applications/libs/file.dll => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_2 (100%) rename src/example/resources/emojis/applications/libs/file.lib => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_3 (100%) rename src/example/resources/emojis/applications/libs/file.so => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_4 (100%) rename src/example/resources/emojis/archives/file.7z => jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_5 (100%) rename src/example/resources/emojis/archives/file.gz => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_1 (100%) rename src/example/resources/emojis/archives/file.img => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_2 (100%) rename src/example/resources/emojis/archives/file.iso => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_1 (100%) rename src/example/resources/emojis/archives/file.rar => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_2 (100%) rename src/example/resources/emojis/archives/file.tar => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_1 (100%) rename src/example/resources/emojis/archives/file.zip => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_2 (100%) rename src/example/resources/emojis/code/.gitignore => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 (100%) rename src/example/resources/emojis/code/Dockerfile => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 (100%) rename src/example/resources/emojis/code/Jenkinsfile => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 (100%) rename src/example/resources/emojis/code/build_tools/build.gradle => jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 (100%) rename src/example/resources/emojis/code/build_tools/makefile => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.apk (100%) rename src/example/resources/emojis/code/build_tools/package.json => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.app (100%) rename src/example/resources/emojis/code/build_tools/pom.xml => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.bin (100%) rename src/example/resources/emojis/code/docker-compose.yml => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.exe (100%) rename src/example/resources/emojis/code/lang/file.c => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.msi (100%) rename src/example/resources/emojis/code/lang/file.class => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file2.ipa (100%) rename src/example/resources/emojis/code/lang/file.cpp => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.dll (100%) rename src/example/resources/emojis/code/lang/file.cs => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.lib (100%) rename src/example/resources/emojis/code/lang/file.css => jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.so (100%) rename src/example/resources/emojis/code/lang/file.htm => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.7z (100%) rename src/example/resources/emojis/code/lang/file.html => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.gz (100%) rename src/example/resources/emojis/code/lang/file.htmx => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.img (100%) rename src/example/resources/emojis/code/lang/file.jar => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.iso (100%) rename src/example/resources/emojis/code/lang/file.java => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.rar (100%) rename src/example/resources/emojis/code/lang/file.less => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.tar (100%) rename src/example/resources/emojis/code/lang/file.php => jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.zip (100%) rename src/example/resources/emojis/code/lang/file.py => jfiletreeprettyprinter-core/src/test/resources/emojis/code/.gitignore (100%) rename src/example/resources/emojis/code/lang/file.scss => jfiletreeprettyprinter-core/src/test/resources/emojis/code/Dockerfile (100%) rename src/example/resources/emojis/code/lang/file.sql => jfiletreeprettyprinter-core/src/test/resources/emojis/code/Jenkinsfile (100%) rename src/example/resources/emojis/code/lang/file.ts => jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/build.gradle (100%) rename src/example/resources/emojis/code/scripting/file.bash => jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/makefile (100%) rename src/example/resources/emojis/code/scripting/file.bat => jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/package.json (100%) rename src/example/resources/emojis/code/scripting/file.sh => jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/pom.xml (100%) rename src/example/resources/emojis/data/file.cfg => jfiletreeprettyprinter-core/src/test/resources/emojis/code/docker-compose.yml (100%) rename src/example/resources/emojis/data/file.conf => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.c (100%) rename src/example/resources/emojis/data/file.csv => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cpp (100%) rename src/example/resources/emojis/data/file.ini => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cs (100%) rename src/example/resources/emojis/data/file.json => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.css (100%) rename src/example/resources/emojis/data/file.ods => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htm (100%) rename src/example/resources/emojis/data/file.properties => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.html (100%) rename src/example/resources/emojis/data/file.xls => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htmx (100%) rename src/example/resources/emojis/data/file.xlsx => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.java (100%) rename src/example/resources/emojis/data/file.xml => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.less (100%) rename src/example/resources/emojis/data/file.yaml => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.php (100%) rename src/example/resources/emojis/data/file.yml => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.py (100%) rename src/example/resources/emojis/doc/file.doc => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.scss (100%) rename src/example/resources/emojis/doc/file.docx => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.sql (100%) rename src/example/resources/emojis/doc/file.epub => jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.ts (100%) rename src/example/resources/emojis/doc/file.md => jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bash (100%) rename src/example/resources/emojis/doc/file.odt => jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bat (100%) rename src/example/resources/emojis/doc/file.pdf => jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.sh (100%) rename src/example/resources/emojis/doc/file.rtf => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.cfg (100%) rename src/example/resources/emojis/doc/file.txt => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.conf (100%) rename src/example/resources/emojis/file.unknown_extension => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.csv (100%) rename src/example/resources/emojis/file_without_extension => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ini (100%) rename src/example/resources/emojis/internet/github/changelog => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.json (100%) rename src/example/resources/emojis/internet/github/changelog.md => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ods (100%) rename src/example/resources/emojis/internet/github/contributing => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.properties (100%) rename src/example/resources/emojis/internet/github/contributing.md => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xls (100%) rename src/example/resources/emojis/internet/github/license => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xlsx (100%) rename src/example/resources/emojis/internet/github/license.md => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xml (100%) rename src/example/resources/emojis/internet/github/readme => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yaml (100%) rename src/example/resources/emojis/internet/github/readme.md => jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yml (100%) rename src/example/resources/emojis/internet/github/roadmap => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.doc (100%) rename src/example/resources/emojis/internet/github/roadmap.md => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.docx (100%) rename src/example/resources/emojis/internet/github/security => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.epub (100%) rename src/example/resources/emojis/internet/github/security.md => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.md (100%) rename src/example/resources/emojis/internet/robots.txt => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.odt (100%) rename src/example/resources/emojis/media/audio/file.aac => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.pdf (100%) rename src/example/resources/emojis/media/audio/file.flac => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.rtf (100%) rename src/example/resources/emojis/media/audio/file.midi => jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.txt (100%) rename src/example/resources/emojis/media/audio/file.mp3 => jfiletreeprettyprinter-core/src/test/resources/emojis/file.unknown_extension (100%) rename src/example/resources/emojis/media/audio/file.ogg => jfiletreeprettyprinter-core/src/test/resources/emojis/file_without_extension (100%) rename src/example/resources/emojis/media/audio/file.wav => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog (100%) rename src/example/resources/emojis/media/images/file.bmp => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog.md (100%) rename src/example/resources/emojis/media/images/file.gif => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing (100%) rename src/example/resources/emojis/media/images/file.ico => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing.md (100%) rename src/example/resources/emojis/media/images/file.jpeg => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license (100%) rename src/example/resources/emojis/media/images/file.jpg => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license.md (100%) rename src/example/resources/emojis/media/images/file.png => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme (100%) rename src/example/resources/emojis/media/images/file.svg => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme.md (100%) rename src/example/resources/emojis/media/video/file.avi => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap (100%) rename src/example/resources/emojis/media/video/file.mkv => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap.md (100%) rename src/example/resources/emojis/media/video/file.mov => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security (100%) rename src/example/resources/emojis/media/video/file.mp4 => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security.md (100%) rename src/example/resources/emojis/media/video/file.webm => jfiletreeprettyprinter-core/src/test/resources/emojis/internet/robots.txt (100%) rename src/example/resources/emojis/media/video/file.wmv => jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.aac (100%) rename src/example/resources/emojis/system/file.bak => jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.flac (100%) rename src/example/resources/emojis/system/file.crt => jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.midi (100%) rename src/example/resources/emojis/system/file.key => jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.mp3 (100%) rename src/example/resources/emojis/system/file.log => jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.ogg (100%) rename src/example/resources/emojis/system/file.pem => jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.wav (100%) rename src/example/resources/emojis/system/file.pub => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.bmp (100%) rename src/example/resources/emojis/system/file.tmp => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.gif (100%) rename src/example/resources/filtering/dir_with_java_files/file_B.java => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.ico (100%) rename src/example/resources/filtering/dir_with_java_files/file_C.cpp => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpeg (100%) rename src/example/resources/filtering/dir_with_java_files/file_D.ts => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpg (100%) rename src/example/resources/filtering/dir_with_java_files/file_E.java => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.png (100%) rename src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java => jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.svg (100%) rename src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp => jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.avi (100%) rename src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts => jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mkv (100%) rename src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java => jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mov (100%) rename src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp => jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mp4 (100%) rename src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts => jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.webm (100%) rename src/example/resources/filtering/dir_with_no_java_file/file_M.cpp => jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.wmv (100%) rename src/example/resources/filtering/dir_with_no_java_file/file_N.ts => jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.bak (100%) rename src/example/resources/filtering/file_A.java => jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.crt (100%) rename src/example/resources/line_extension/src/main/java/api/Controller.java => jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.key (100%) rename src/example/resources/line_extension/src/main/java/domain/ValueObject.java => jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pem (100%) rename src/example/resources/line_extension/src/main/java/infra/Repository.java => jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pub (100%) rename src/example/resources/line_extension/src/main/resources/application.properties => jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.tmp (100%) rename src/example/resources/max_depth/level1/file1#1 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_B.java (100%) rename src/example/resources/max_depth/level1/file1#2 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_C.cpp (100%) rename src/example/resources/max_depth/level1/level2/file2#1 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_D.ts (100%) rename src/example/resources/max_depth/level1/level2/file2#2 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_E.java (100%) rename src/example/resources/max_depth/level1/level2/level3/file3#1 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java (100%) rename src/example/resources/max_depth/level1/level2/level3/file3#2 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp (100%) rename src/example/resources/max_depth/level1/level2/level3/level4/file4#1 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts (100%) rename src/example/resources/max_depth/level1/level2/level3/level4/file4#2 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java (100%) rename src/example/resources/single_directory_child/file1 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp (100%) rename src/example/resources/single_directory_child/file2 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts (100%) rename src/example/resources/single_directory_child/this/is/single/directory/child/file1 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_M.cpp (100%) rename src/example/resources/single_directory_child/this/is/single/directory/child/file2 => jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_N.ts (100%) rename src/example/resources/single_directory_child/this/is/single/directory/child/file3 => jfiletreeprettyprinter-core/src/test/resources/filtering/file_A.java (100%) rename src/example/resources/sorting/y_file => jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/api/Controller.java (100%) rename src/example/resources/tree_format/file_1 => jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/domain/ValueObject.java (100%) rename src/example/resources/tree_format/file_2 => jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/infra/Repository.java (100%) rename src/example/resources/tree_format/subFolder/subFile_1 => jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/resources/application.properties (100%) rename src/example/resources/tree_format/subFolder/subFile_2 => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#1 (100%) rename src/test/resources/cli/base/folder_a/file_1.txt => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#2 (100%) rename src/test/resources/cli/base/folder_a/file_2.java => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#1 (100%) rename src/test/resources/cli/base/folder_a/file_3.php => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#2 (100%) rename src/test/resources/cli/base/folder_a/file_4.jpeg => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#1 (100%) rename src/test/resources/cli/base/folder_b/file_1.txt => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#2 (100%) rename src/test/resources/cli/base/folder_b/file_2.java => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#1 (100%) rename src/test/resources/cli/base/folder_b/file_3.php => jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#2 (100%) rename src/test/resources/cli/base/folder_b/file_4.jpeg => jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file1 (100%) rename src/test/resources/cli/base/folder_c/file_1.txt => jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file2 (100%) rename src/test/resources/cli/base/folder_c/file_2.java => jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file1 (100%) rename src/test/resources/cli/base/folder_c/file_3.php => jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file2 (100%) rename src/test/resources/cli/base/folder_c/file_4.jpeg => jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file3 (100%) rename {src/example => jfiletreeprettyprinter-core/src/test}/resources/sorting/a_file (100%) rename {src/example => jfiletreeprettyprinter-core/src/test}/resources/sorting/b_file (100%) rename {src/example => jfiletreeprettyprinter-core/src/test}/resources/sorting/c_dir/c_file (100%) rename {src/example => jfiletreeprettyprinter-core/src/test}/resources/sorting/d_dir/d_a_file (100%) rename {src/example => jfiletreeprettyprinter-core/src/test}/resources/sorting/d_dir/d_b_dir/d_b_file (100%) rename {src/example => jfiletreeprettyprinter-core/src/test}/resources/sorting/x_file (100%) rename src/test/resources/cli/base/folder_d/file_1.txt => jfiletreeprettyprinter-core/src/test/resources/sorting/y_file (100%) rename src/test/resources/cli/base/folder_d/file_2.java => jfiletreeprettyprinter-core/src/test/resources/tree_format/file_1 (100%) rename src/test/resources/cli/base/folder_d/file_3.php => jfiletreeprettyprinter-core/src/test/resources/tree_format/file_2 (100%) rename src/test/resources/cli/base/folder_d/file_4.jpeg => jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_1 (100%) rename src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt => jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_2 (100%) create mode 100644 jfiletreeprettyprinter-example/pom.xml rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java (100%) rename {src/example => jfiletreeprettyprinter-example/src/main}/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java (100%) rename src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java => jfiletreeprettyprinter-example/src/main/resources/base/businessPlan.pdf (100%) rename src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php => jfiletreeprettyprinter-example/src/main/resources/base/businessProject.pdf (100%) rename src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg => jfiletreeprettyprinter-example/src/main/resources/base/cars/Ferrari.doc (100%) create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/cars/Porsche.doc create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/diyIdeas.docx create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/giftIdeas.txt create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/images/funnyCat.gif create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheBeach.jpeg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheZoo.jpeg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/base/images/landscape.jpeg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/file_0_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_5 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_01 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_02 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_03 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_04 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_05 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_06 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_07 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_08 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_09 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_10 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_11 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_12 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_13 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_14 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_15 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_16 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_17 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_18 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_19 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_20 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/file_0_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_5 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_5 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_5 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_5 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_5 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.apk create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.app create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.bin create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.exe create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.msi create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file2.ipa create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.dll create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.lib create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.so create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.7z create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.gz create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.img create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.iso create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.rar create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.tar create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.zip create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/.gitignore create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/Dockerfile create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/Jenkinsfile create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/build.gradle create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/makefile create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/package.json create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/pom.xml create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/docker-compose.yml create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.c create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.class create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cpp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cs create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.css create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htm create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.html create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htmx create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.jar create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.less create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.php create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.py create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.scss create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.sql create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.ts create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bash create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bat create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.sh create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.cfg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.conf create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.csv create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ini create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.json create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ods create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.properties create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xls create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xlsx create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xml create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yaml create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yml create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.doc create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.docx create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.epub create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.odt create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.pdf create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.rtf create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.txt create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/file.unknown_extension create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/file_without_extension create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security.md create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/internet/robots.txt create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.aac create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.flac create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.midi create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.mp3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.ogg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.wav create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.bmp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.gif create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.ico create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpeg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.png create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.svg create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.avi create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mkv create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mov create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mp4 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.webm create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.wmv create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.bak create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.crt create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.key create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.log create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pem create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pub create mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.tmp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_B.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_C.cpp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_D.ts create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_E.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_N.ts create mode 100644 jfiletreeprettyprinter-example/src/main/resources/filtering/file_A.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/api/Controller.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/domain/ValueObject.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/infra/Repository.java create mode 100644 jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/resources/application.properties create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file3 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/a_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/b_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/c_dir/c_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_a_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_b_dir/d_b_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/x_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/sorting/y_file create mode 100644 jfiletreeprettyprinter-example/src/main/resources/tree_format/file_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/tree_format/file_2 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_1 create mode 100644 jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_2 diff --git a/jfiletreeprettyprinter-cli/pom.xml b/jfiletreeprettyprinter-cli/pom.xml new file mode 100644 index 0000000..60d8a63 --- /dev/null +++ b/jfiletreeprettyprinter-cli/pom.xml @@ -0,0 +1,58 @@ + + 4.0.0 + + io.github.computerdaddyguy + jfiletreeprettyprinter + ${revision} + + + jfiletreeprettyprinter-cli + + jar + + + + + io.github.computerdaddyguy + jfiletreeprettyprinter-core + ${revision} + + + + org.jspecify + jspecify + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + + + + tools.jackson.core + jackson-databind + + + tools.jackson.dataformat + jackson-dataformat-yaml + + + org.hibernate.validator + hibernate-validator + + + info.picocli + picocli + + + + + + + \ No newline at end of file diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLine.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/PrettyPrintCommand.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtils.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/DefaultExecutionExceptionHandler.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/exception/ExternalOptionsException.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/ConsoleOutput.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/DefaultOptionsLoader.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/OptionsLoader.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/DefaultExternalOptionsMapper.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/mapper/ExternalOptionsMapper.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ChildLimit.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/ExternalOptions.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Filter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/LineExtension.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/model/Matcher.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/ExternalOptionsReader.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/FallbackExternalOptionsReader.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java rename to jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/options/reader/SimpleExternalOptionsReader.java diff --git a/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json b/jfiletreeprettyprinter-cli/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json similarity index 100% rename from src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json rename to jfiletreeprettyprinter-cli/src/main/resources/META-INF/native-image/io.github.computerdaddyguy/jfiletreeprettyprinter/reachability-metadata.json diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java similarity index 99% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java rename to jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java index 838674a..81e6210 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java +++ b/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -43,7 +43,7 @@ private String[] buildCliArgs(String targetPath, @Nullable String optionsPath) { private void runSuccessTest(FileTreePrettyPrinterCommandLine cli, String[] args, FileTreePrettyPrinter ref, String targetPath) { cli.executeCommand(args); var allWrittenLines = new String(out_and_err.toByteArray()); - assertThat(allWrittenLines).isEqualTo(ref.prettyPrint(targetPath) + "\n"); + assertThat(allWrittenLines).isEqualToNormalizingNewlines(ref.prettyPrint(targetPath) + System.lineSeparator()); } private void runErrorTest(FileTreePrettyPrinterCommandLine cli, String[] args, Consumer outputAssertor) { diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java b/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java rename to jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProviderTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java b/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java rename to jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/RecordUtilsTest.java diff --git a/src/example/resources/base/businessPlan.pdf b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_1.txt similarity index 100% rename from src/example/resources/base/businessPlan.pdf rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_1.txt diff --git a/src/example/resources/base/businessProject.pdf b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_2.java similarity index 100% rename from src/example/resources/base/businessProject.pdf rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_2.java diff --git a/src/example/resources/base/cars/Ferrari.doc b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_3.php similarity index 100% rename from src/example/resources/base/cars/Ferrari.doc rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_3.php diff --git a/src/example/resources/base/cars/Porsche.doc b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_4.jpeg similarity index 100% rename from src/example/resources/base/cars/Porsche.doc rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_a/file_4.jpeg diff --git a/src/example/resources/base/diyIdeas.docx b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_1.txt similarity index 100% rename from src/example/resources/base/diyIdeas.docx rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_1.txt diff --git a/src/example/resources/base/giftIdeas.txt b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_2.java similarity index 100% rename from src/example/resources/base/giftIdeas.txt rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_2.java diff --git a/src/example/resources/base/images/funnyCat.gif b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_3.php similarity index 100% rename from src/example/resources/base/images/funnyCat.gif rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_3.php diff --git a/src/example/resources/base/images/holidays/meAtTheBeach.jpeg b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_4.jpeg similarity index 100% rename from src/example/resources/base/images/holidays/meAtTheBeach.jpeg rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_b/file_4.jpeg diff --git a/src/example/resources/base/images/holidays/meAtTheZoo.jpeg b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_1.txt similarity index 100% rename from src/example/resources/base/images/holidays/meAtTheZoo.jpeg rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_1.txt diff --git a/src/example/resources/base/images/landscape.jpeg b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_2.java similarity index 100% rename from src/example/resources/base/images/landscape.jpeg rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_2.java diff --git a/src/example/resources/child_limit_dynamic/file_0_1 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_3.php similarity index 100% rename from src/example/resources/child_limit_dynamic/file_0_1 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_3.php diff --git a/src/example/resources/child_limit_dynamic/folder_1/file_1_1 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_4.jpeg similarity index 100% rename from src/example/resources/child_limit_dynamic/folder_1/file_1_1 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_c/file_4.jpeg diff --git a/src/example/resources/child_limit_dynamic/folder_1/file_1_2 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_1.txt similarity index 100% rename from src/example/resources/child_limit_dynamic/folder_1/file_1_2 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_1.txt diff --git a/src/example/resources/child_limit_dynamic/folder_1/file_1_3 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_2.java similarity index 100% rename from src/example/resources/child_limit_dynamic/folder_1/file_1_3 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_2.java diff --git a/src/example/resources/child_limit_dynamic/folder_1/file_1_4 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_3.php similarity index 100% rename from src/example/resources/child_limit_dynamic/folder_1/file_1_4 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_3.php diff --git a/src/example/resources/child_limit_dynamic/folder_1/file_1_5 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_4.jpeg similarity index 100% rename from src/example/resources/child_limit_dynamic/folder_1/file_1_5 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_d/file_4.jpeg diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_01 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_01 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_02 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_02 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_03 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_03 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_04 b/jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_04 rename to jfiletreeprettyprinter-cli/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg diff --git a/src/test/resources/cli/options/childLimit_dynamic_allOf.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_allOf.yaml similarity index 100% rename from src/test/resources/cli/options/childLimit_dynamic_allOf.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_allOf.yaml diff --git a/src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml similarity index 100% rename from src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_anyOf.yaml diff --git a/src/test/resources/cli/options/childLimit_dynamic_everything.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_everything.yaml similarity index 100% rename from src/test/resources/cli/options/childLimit_dynamic_everything.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_everything.yaml diff --git a/src/test/resources/cli/options/childLimit_dynamic_glob.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_glob.yaml similarity index 100% rename from src/test/resources/cli/options/childLimit_dynamic_glob.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_glob.yaml diff --git a/src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml similarity index 100% rename from src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_dynamic_noneOf.yaml diff --git a/src/test/resources/cli/options/childLimit_static.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_static.yaml similarity index 100% rename from src/test/resources/cli/options/childLimit_static.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/childLimit_static.yaml diff --git a/src/test/resources/cli/options/compactDirectories.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/compactDirectories.yaml similarity index 100% rename from src/test/resources/cli/options/compactDirectories.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/compactDirectories.yaml diff --git a/src/test/resources/cli/options/emojis.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/emojis.yaml similarity index 100% rename from src/test/resources/cli/options/emojis.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/emojis.yaml diff --git a/src/test/resources/cli/options/filter.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/filter.yaml similarity index 100% rename from src/test/resources/cli/options/filter.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/filter.yaml diff --git a/src/test/resources/cli/options/invalid.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/invalid.yaml similarity index 100% rename from src/test/resources/cli/options/invalid.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/invalid.yaml diff --git a/src/test/resources/cli/options/lineExtensions.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/lineExtensions.yaml similarity index 100% rename from src/test/resources/cli/options/lineExtensions.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/lineExtensions.yaml diff --git a/src/test/resources/cli/options/malformed.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/malformed.yaml similarity index 100% rename from src/test/resources/cli/options/malformed.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/malformed.yaml diff --git a/src/test/resources/cli/options/maxDepth.yaml b/jfiletreeprettyprinter-cli/src/test/resources/cli/options/maxDepth.yaml similarity index 100% rename from src/test/resources/cli/options/maxDepth.yaml rename to jfiletreeprettyprinter-cli/src/test/resources/cli/options/maxDepth.yaml diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml new file mode 100644 index 0000000..fcd7581 --- /dev/null +++ b/jfiletreeprettyprinter-core/pom.xml @@ -0,0 +1,45 @@ + + 4.0.0 + + io.github.computerdaddyguy + jfiletreeprettyprinter + ${revision} + + + jfiletreeprettyprinter-core + + jar + + + + + org.jspecify + jspecify + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilder.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimitBuilder.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/ChildLimits.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMapping.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/DefaultEmojiMappingBuilder.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMapping.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/EmojiMappingBuilder.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensionBuilder.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/LineExtensions.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/MappingUtils.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathExtensionEmojiFunction.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatcherEmojiFunction.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathMatchers.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathNameEmojiFunction.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSortBuilder.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PathSorts.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/SequentialEmojiFunction.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormat.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/TreeFormats.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultFileFormatter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultFileFormatter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultFileFormatter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultFileFormatter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeEntryRenderer.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeFormatter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeFormatter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeFormatter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultTreeFormatter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/Depth.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/Depth.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/Depth.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/Depth.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/EmojiFileFormatter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/EmojiFileFormatter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/EmojiFileFormatter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/EmojiFileFormatter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/FileFormatter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/FileFormatter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/FileFormatter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/FileFormatter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/LineRenderer.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/LineRenderer.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/LineRenderer.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/LineRenderer.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeEntryRenderer.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeEntryRenderer.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeEntryRenderer.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeEntryRenderer.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeFormatter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeFormatter.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeFormatter.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeFormatter.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeSymbol.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeSymbol.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeSymbol.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/TreeSymbol.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/DefaultPathToTreeScanner.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/DefaultPathToTreeScanner.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/DefaultPathToTreeScanner.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/DefaultPathToTreeScanner.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/PathToTreeScanner.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/PathToTreeScanner.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/PathToTreeScanner.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/PathToTreeScanner.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/ScanningOptions.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/ScanningOptions.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/ScanningOptions.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/ScanningOptions.java diff --git a/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/TreeEntry.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/TreeEntry.java similarity index 100% rename from src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/TreeEntry.java rename to jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner/TreeEntry.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/BasicUsageTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/BasicUsageTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/BasicUsageTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/BasicUsageTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitDynamicTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitDynamicTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitDynamicTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitDynamicTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/CompactDirectoriesTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/CompactDirectoriesTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/CompactDirectoriesTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/CompactDirectoriesTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java similarity index 99% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java index 56d6082..0123993 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java @@ -37,7 +37,7 @@ void emojis() { .customizeOptions(PrettyPrintOptions::withDefaultEmojis) .build(); - var result = printer.prettyPrint("src/example/resources/emojis"); + var result = printer.prettyPrint("src/test/resources/emojis"); var expected = """ 📂 emojis/ ├─ 📂 applications/ diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilderTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilderTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilderTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterBuilderTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FileTreePrettyPrinterTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java similarity index 92% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java index cbcf72e..6834d3e 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java @@ -22,7 +22,7 @@ void example_file() { .customizeOptions(options -> options.filterFiles(filter)) .build(); - var result = printer.prettyPrint("src/example/resources/filtering"); + var result = printer.prettyPrint("src/test/resources/filtering"); var expected = """ filtering/ ├─ dir_with_java_files/ @@ -46,7 +46,7 @@ void example_dir() { .customizeOptions(options -> options.filterDirectories(filter)) .build(); - var result = printer.prettyPrint("src/example/resources/filtering"); + var result = printer.prettyPrint("src/test/resources/filtering"); var expected = """ filtering/ ├─ dir_with_no_java_file/ @@ -65,7 +65,7 @@ void example_and_sorting() { .customizeOptions(options -> options.filterFiles(filter)) .build(); - var result = printer.prettyPrint("src/example/resources/filtering"); + var result = printer.prettyPrint("src/test/resources/filtering"); var expected = """ filtering/ ├─ file_A.java @@ -90,7 +90,7 @@ void example_childLimit_1() { .customizeOptions(options -> options.filterFiles(filter)) .build(); - var result = printer.prettyPrint("src/example/resources/filtering"); + var result = printer.prettyPrint("src/test/resources/filtering"); var expected = """ filtering/ ├─ dir_with_java_files/ @@ -109,7 +109,7 @@ void example_childLimit_2() { .customizeOptions(options -> options.filterFiles(filter)) .build(); - var result = printer.prettyPrint("src/example/resources/filtering"); + var result = printer.prettyPrint("src/test/resources/filtering"); var expected = """ filtering/ ├─ dir_with_java_files/ @@ -133,7 +133,7 @@ void example_childLimit_3() { .customizeOptions(options -> options.filterFiles(filter)) .build(); - var result = printer.prettyPrint("src/example/resources/filtering"); + var result = printer.prettyPrint("src/test/resources/filtering"); var expected = """ filtering/ ├─ dir_with_java_files/ diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java similarity index 98% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java index c8d1263..2eb886b 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java @@ -31,7 +31,7 @@ void emptyDir() { @Test void example_dir_match() { - var printedPath = Path.of("src/example/resources/line_extension"); + var printedPath = Path.of("src/test/resources/line_extension"); Function lineExtension = LineExtensions.builder() .add(PathMatchers.hasRelativePathMatchingGlob(printedPath, "src/main/java/api"), "\t\t\t// All API code: controllers, etc.") diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/MaxDepthTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/MaxDepthTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/MaxDepthTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/MaxDepthTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchersTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchersTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchersTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathMatchersTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilderTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilderTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilderTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/PathSortBuilderTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java similarity index 97% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java index 2bb97d1..97f35aa 100644 --- a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java @@ -20,7 +20,7 @@ void example() { .customizeOptions(options -> options.sort(PathSorts.DIRECTORY_FIRST)) .build(); - var result = printer.prettyPrint("src/example/resources/sorting"); + var result = printer.prettyPrint("src/test/resources/sorting"); var expected = """ sorting/ ├─ c_dir/ @@ -111,7 +111,7 @@ void fileSize() { .customizeOptions(options -> options.sort(PathSorts.BY_FILE_SIZE)) .build(); - var result = printer.prettyPrint("src/example/resources/sorting"); + var result = printer.prettyPrint("src/test/resources/sorting"); var expected = """ sorting/ ├─ c_dir/ diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/TreeFormatTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/TreeFormatTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/TreeFormatTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/TreeFormatTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DepthTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DepthTest.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DepthTest.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DepthTest.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructureCreator.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructureCreator.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructureCreator.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructureCreator.java diff --git a/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructures.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructures.java similarity index 100% rename from src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructures.java rename to jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/util/FileStructures.java diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_05 b/jfiletreeprettyprinter-core/src/test/resources/base/businessPlan.pdf similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_05 rename to jfiletreeprettyprinter-core/src/test/resources/base/businessPlan.pdf diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_06 b/jfiletreeprettyprinter-core/src/test/resources/base/businessProject.pdf similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_06 rename to jfiletreeprettyprinter-core/src/test/resources/base/businessProject.pdf diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_07 b/jfiletreeprettyprinter-core/src/test/resources/base/cars/Ferrari.doc similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_07 rename to jfiletreeprettyprinter-core/src/test/resources/base/cars/Ferrari.doc diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_08 b/jfiletreeprettyprinter-core/src/test/resources/base/cars/Porsche.doc similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_08 rename to jfiletreeprettyprinter-core/src/test/resources/base/cars/Porsche.doc diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_09 b/jfiletreeprettyprinter-core/src/test/resources/base/diyIdeas.docx similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_09 rename to jfiletreeprettyprinter-core/src/test/resources/base/diyIdeas.docx diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_10 b/jfiletreeprettyprinter-core/src/test/resources/base/giftIdeas.txt similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_10 rename to jfiletreeprettyprinter-core/src/test/resources/base/giftIdeas.txt diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_11 b/jfiletreeprettyprinter-core/src/test/resources/base/images/funnyCat.gif similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_11 rename to jfiletreeprettyprinter-core/src/test/resources/base/images/funnyCat.gif diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_12 b/jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheBeach.jpeg similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_12 rename to jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheBeach.jpeg diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_13 b/jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheZoo.jpeg similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_13 rename to jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheZoo.jpeg diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_14 b/jfiletreeprettyprinter-core/src/test/resources/base/images/landscape.jpeg similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_14 rename to jfiletreeprettyprinter-core/src/test/resources/base/images/landscape.jpeg diff --git a/src/example/resources/child_limit_static/file_0_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/file_0_1 similarity index 100% rename from src/example/resources/child_limit_static/file_0_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/file_0_1 diff --git a/src/example/resources/child_limit_static/folder_1/file_1_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_1 similarity index 100% rename from src/example/resources/child_limit_static/folder_1/file_1_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_1 diff --git a/src/example/resources/child_limit_static/folder_1/file_1_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_2 similarity index 100% rename from src/example/resources/child_limit_static/folder_1/file_1_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_2 diff --git a/src/example/resources/child_limit_static/folder_1/file_1_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_3 similarity index 100% rename from src/example/resources/child_limit_static/folder_1/file_1_3 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_3 diff --git a/src/example/resources/child_limit_static/folder_1/file_1_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_4 similarity index 100% rename from src/example/resources/child_limit_static/folder_1/file_1_4 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_4 diff --git a/src/example/resources/child_limit_static/folder_1/file_1_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_5 similarity index 100% rename from src/example/resources/child_limit_static/folder_1/file_1_5 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_5 diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_15 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_01 similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_15 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_01 diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_16 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_02 similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_16 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_02 diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_17 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_03 similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_17 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_03 diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_18 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_04 similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_18 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_04 diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_19 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_05 similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_19 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_05 diff --git a/src/example/resources/child_limit_dynamic/node_modules/file_node_20 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_06 similarity index 100% rename from src/example/resources/child_limit_dynamic/node_modules/file_node_20 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_06 diff --git a/src/example/resources/child_limit_static/folder_2/file_2_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_07 similarity index 100% rename from src/example/resources/child_limit_static/folder_2/file_2_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_07 diff --git a/src/example/resources/child_limit_static/folder_2/file_2_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_08 similarity index 100% rename from src/example/resources/child_limit_static/folder_2/file_2_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_08 diff --git a/src/example/resources/child_limit_static/folder_2/file_2_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_09 similarity index 100% rename from src/example/resources/child_limit_static/folder_2/file_2_3 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_09 diff --git a/src/example/resources/child_limit_static/folder_2/file_2_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_10 similarity index 100% rename from src/example/resources/child_limit_static/folder_2/file_2_4 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_10 diff --git a/src/example/resources/child_limit_static/folder_2/file_2_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_11 similarity index 100% rename from src/example/resources/child_limit_static/folder_2/file_2_5 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_11 diff --git a/src/example/resources/child_limit_static/folder_3/file_3_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_12 similarity index 100% rename from src/example/resources/child_limit_static/folder_3/file_3_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_12 diff --git a/src/example/resources/child_limit_static/folder_3/file_3_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_13 similarity index 100% rename from src/example/resources/child_limit_static/folder_3/file_3_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_13 diff --git a/src/example/resources/child_limit_static/folder_3/file_3_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_14 similarity index 100% rename from src/example/resources/child_limit_static/folder_3/file_3_3 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_14 diff --git a/src/example/resources/child_limit_static/folder_3/file_3_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_15 similarity index 100% rename from src/example/resources/child_limit_static/folder_3/file_3_4 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_15 diff --git a/src/example/resources/child_limit_static/folder_3/file_3_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_16 similarity index 100% rename from src/example/resources/child_limit_static/folder_3/file_3_5 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_16 diff --git a/src/example/resources/child_limit_static/folder_4/file_4_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_17 similarity index 100% rename from src/example/resources/child_limit_static/folder_4/file_4_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_17 diff --git a/src/example/resources/child_limit_static/folder_4/file_4_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_18 similarity index 100% rename from src/example/resources/child_limit_static/folder_4/file_4_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_18 diff --git a/src/example/resources/child_limit_static/folder_4/file_4_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_19 similarity index 100% rename from src/example/resources/child_limit_static/folder_4/file_4_3 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_19 diff --git a/src/example/resources/child_limit_static/folder_4/file_4_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_20 similarity index 100% rename from src/example/resources/child_limit_static/folder_4/file_4_4 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_20 diff --git a/src/example/resources/child_limit_static/folder_4/file_4_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/file_0_1 similarity index 100% rename from src/example/resources/child_limit_static/folder_4/file_4_5 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/file_0_1 diff --git a/src/example/resources/depth_limit/level_1/file_1_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_1 similarity index 100% rename from src/example/resources/depth_limit/level_1/file_1_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_1 diff --git a/src/example/resources/depth_limit/level_1/file_1_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_2 similarity index 100% rename from src/example/resources/depth_limit/level_1/file_1_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_2 diff --git a/src/example/resources/child_limit_static/folder_5/file_5_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_3 similarity index 100% rename from src/example/resources/child_limit_static/folder_5/file_5_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_3 diff --git a/src/example/resources/child_limit_static/folder_5/file_5_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_4 similarity index 100% rename from src/example/resources/child_limit_static/folder_5/file_5_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_4 diff --git a/src/example/resources/child_limit_static/folder_5/file_5_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_5 similarity index 100% rename from src/example/resources/child_limit_static/folder_5/file_5_3 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_5 diff --git a/src/example/resources/depth_limit/level_1/level_2/file_2_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_1 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/file_2_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_1 diff --git a/src/example/resources/depth_limit/level_1/level_2/file_2_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_2 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/file_2_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_2 diff --git a/src/example/resources/child_limit_static/folder_5/file_5_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_3 similarity index 100% rename from src/example/resources/child_limit_static/folder_5/file_5_4 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_3 diff --git a/src/example/resources/child_limit_static/folder_5/file_5_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_4 similarity index 100% rename from src/example/resources/child_limit_static/folder_5/file_5_5 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_4 diff --git a/src/example/resources/depth_limit/level_1/level_2/level_3/file_3_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_5 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/level_3/file_3_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_5 diff --git a/src/example/resources/depth_limit/level_1/level_2/level_3/file_3_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_1 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/level_3/file_3_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_1 diff --git a/src/example/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_2 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_2 diff --git a/src/example/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_3 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_3 diff --git a/src/example/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_4 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_4 diff --git a/src/example/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_5 similarity index 100% rename from src/example/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_5 diff --git a/src/example/resources/emojis/applications/executables/file.apk b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_1 similarity index 100% rename from src/example/resources/emojis/applications/executables/file.apk rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_1 diff --git a/src/example/resources/emojis/applications/executables/file.app b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_2 similarity index 100% rename from src/example/resources/emojis/applications/executables/file.app rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_2 diff --git a/src/example/resources/emojis/applications/executables/file.bin b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_3 similarity index 100% rename from src/example/resources/emojis/applications/executables/file.bin rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_3 diff --git a/src/example/resources/emojis/applications/executables/file.exe b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_4 similarity index 100% rename from src/example/resources/emojis/applications/executables/file.exe rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_4 diff --git a/src/example/resources/emojis/applications/executables/file.msi b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_5 similarity index 100% rename from src/example/resources/emojis/applications/executables/file.msi rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_5 diff --git a/src/example/resources/emojis/applications/executables/file2.ipa b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_1 similarity index 100% rename from src/example/resources/emojis/applications/executables/file2.ipa rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_1 diff --git a/src/example/resources/emojis/applications/libs/file.dll b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_2 similarity index 100% rename from src/example/resources/emojis/applications/libs/file.dll rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_2 diff --git a/src/example/resources/emojis/applications/libs/file.lib b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_3 similarity index 100% rename from src/example/resources/emojis/applications/libs/file.lib rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_3 diff --git a/src/example/resources/emojis/applications/libs/file.so b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_4 similarity index 100% rename from src/example/resources/emojis/applications/libs/file.so rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_4 diff --git a/src/example/resources/emojis/archives/file.7z b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_5 similarity index 100% rename from src/example/resources/emojis/archives/file.7z rename to jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_5 diff --git a/src/example/resources/emojis/archives/file.gz b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_1 similarity index 100% rename from src/example/resources/emojis/archives/file.gz rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_1 diff --git a/src/example/resources/emojis/archives/file.img b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_2 similarity index 100% rename from src/example/resources/emojis/archives/file.img rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_2 diff --git a/src/example/resources/emojis/archives/file.iso b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_1 similarity index 100% rename from src/example/resources/emojis/archives/file.iso rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_1 diff --git a/src/example/resources/emojis/archives/file.rar b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_2 similarity index 100% rename from src/example/resources/emojis/archives/file.rar rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_2 diff --git a/src/example/resources/emojis/archives/file.tar b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_1 similarity index 100% rename from src/example/resources/emojis/archives/file.tar rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_1 diff --git a/src/example/resources/emojis/archives/file.zip b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_2 similarity index 100% rename from src/example/resources/emojis/archives/file.zip rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_2 diff --git a/src/example/resources/emojis/code/.gitignore b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 similarity index 100% rename from src/example/resources/emojis/code/.gitignore rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 diff --git a/src/example/resources/emojis/code/Dockerfile b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 similarity index 100% rename from src/example/resources/emojis/code/Dockerfile rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 diff --git a/src/example/resources/emojis/code/Jenkinsfile b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 similarity index 100% rename from src/example/resources/emojis/code/Jenkinsfile rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 diff --git a/src/example/resources/emojis/code/build_tools/build.gradle b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 similarity index 100% rename from src/example/resources/emojis/code/build_tools/build.gradle rename to jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 diff --git a/src/example/resources/emojis/code/build_tools/makefile b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.apk similarity index 100% rename from src/example/resources/emojis/code/build_tools/makefile rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.apk diff --git a/src/example/resources/emojis/code/build_tools/package.json b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.app similarity index 100% rename from src/example/resources/emojis/code/build_tools/package.json rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.app diff --git a/src/example/resources/emojis/code/build_tools/pom.xml b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.bin similarity index 100% rename from src/example/resources/emojis/code/build_tools/pom.xml rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.bin diff --git a/src/example/resources/emojis/code/docker-compose.yml b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.exe similarity index 100% rename from src/example/resources/emojis/code/docker-compose.yml rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.exe diff --git a/src/example/resources/emojis/code/lang/file.c b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.msi similarity index 100% rename from src/example/resources/emojis/code/lang/file.c rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.msi diff --git a/src/example/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file2.ipa similarity index 100% rename from src/example/resources/emojis/code/lang/file.class rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file2.ipa diff --git a/src/example/resources/emojis/code/lang/file.cpp b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.dll similarity index 100% rename from src/example/resources/emojis/code/lang/file.cpp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.dll diff --git a/src/example/resources/emojis/code/lang/file.cs b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.lib similarity index 100% rename from src/example/resources/emojis/code/lang/file.cs rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.lib diff --git a/src/example/resources/emojis/code/lang/file.css b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.so similarity index 100% rename from src/example/resources/emojis/code/lang/file.css rename to jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.so diff --git a/src/example/resources/emojis/code/lang/file.htm b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.7z similarity index 100% rename from src/example/resources/emojis/code/lang/file.htm rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.7z diff --git a/src/example/resources/emojis/code/lang/file.html b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.gz similarity index 100% rename from src/example/resources/emojis/code/lang/file.html rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.gz diff --git a/src/example/resources/emojis/code/lang/file.htmx b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.img similarity index 100% rename from src/example/resources/emojis/code/lang/file.htmx rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.img diff --git a/src/example/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.iso similarity index 100% rename from src/example/resources/emojis/code/lang/file.jar rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.iso diff --git a/src/example/resources/emojis/code/lang/file.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.rar similarity index 100% rename from src/example/resources/emojis/code/lang/file.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.rar diff --git a/src/example/resources/emojis/code/lang/file.less b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.tar similarity index 100% rename from src/example/resources/emojis/code/lang/file.less rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.tar diff --git a/src/example/resources/emojis/code/lang/file.php b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.zip similarity index 100% rename from src/example/resources/emojis/code/lang/file.php rename to jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.zip diff --git a/src/example/resources/emojis/code/lang/file.py b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/.gitignore similarity index 100% rename from src/example/resources/emojis/code/lang/file.py rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/.gitignore diff --git a/src/example/resources/emojis/code/lang/file.scss b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/Dockerfile similarity index 100% rename from src/example/resources/emojis/code/lang/file.scss rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/Dockerfile diff --git a/src/example/resources/emojis/code/lang/file.sql b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/Jenkinsfile similarity index 100% rename from src/example/resources/emojis/code/lang/file.sql rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/Jenkinsfile diff --git a/src/example/resources/emojis/code/lang/file.ts b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/build.gradle similarity index 100% rename from src/example/resources/emojis/code/lang/file.ts rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/build.gradle diff --git a/src/example/resources/emojis/code/scripting/file.bash b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/makefile similarity index 100% rename from src/example/resources/emojis/code/scripting/file.bash rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/makefile diff --git a/src/example/resources/emojis/code/scripting/file.bat b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/package.json similarity index 100% rename from src/example/resources/emojis/code/scripting/file.bat rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/package.json diff --git a/src/example/resources/emojis/code/scripting/file.sh b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/pom.xml similarity index 100% rename from src/example/resources/emojis/code/scripting/file.sh rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/pom.xml diff --git a/src/example/resources/emojis/data/file.cfg b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/docker-compose.yml similarity index 100% rename from src/example/resources/emojis/data/file.cfg rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/docker-compose.yml diff --git a/src/example/resources/emojis/data/file.conf b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.c similarity index 100% rename from src/example/resources/emojis/data/file.conf rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.c diff --git a/src/example/resources/emojis/data/file.csv b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cpp similarity index 100% rename from src/example/resources/emojis/data/file.csv rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cpp diff --git a/src/example/resources/emojis/data/file.ini b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cs similarity index 100% rename from src/example/resources/emojis/data/file.ini rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cs diff --git a/src/example/resources/emojis/data/file.json b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.css similarity index 100% rename from src/example/resources/emojis/data/file.json rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.css diff --git a/src/example/resources/emojis/data/file.ods b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htm similarity index 100% rename from src/example/resources/emojis/data/file.ods rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htm diff --git a/src/example/resources/emojis/data/file.properties b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.html similarity index 100% rename from src/example/resources/emojis/data/file.properties rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.html diff --git a/src/example/resources/emojis/data/file.xls b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htmx similarity index 100% rename from src/example/resources/emojis/data/file.xls rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htmx diff --git a/src/example/resources/emojis/data/file.xlsx b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.java similarity index 100% rename from src/example/resources/emojis/data/file.xlsx rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.java diff --git a/src/example/resources/emojis/data/file.xml b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.less similarity index 100% rename from src/example/resources/emojis/data/file.xml rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.less diff --git a/src/example/resources/emojis/data/file.yaml b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.php similarity index 100% rename from src/example/resources/emojis/data/file.yaml rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.php diff --git a/src/example/resources/emojis/data/file.yml b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.py similarity index 100% rename from src/example/resources/emojis/data/file.yml rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.py diff --git a/src/example/resources/emojis/doc/file.doc b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.scss similarity index 100% rename from src/example/resources/emojis/doc/file.doc rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.scss diff --git a/src/example/resources/emojis/doc/file.docx b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.sql similarity index 100% rename from src/example/resources/emojis/doc/file.docx rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.sql diff --git a/src/example/resources/emojis/doc/file.epub b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.ts similarity index 100% rename from src/example/resources/emojis/doc/file.epub rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.ts diff --git a/src/example/resources/emojis/doc/file.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bash similarity index 100% rename from src/example/resources/emojis/doc/file.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bash diff --git a/src/example/resources/emojis/doc/file.odt b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bat similarity index 100% rename from src/example/resources/emojis/doc/file.odt rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bat diff --git a/src/example/resources/emojis/doc/file.pdf b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.sh similarity index 100% rename from src/example/resources/emojis/doc/file.pdf rename to jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.sh diff --git a/src/example/resources/emojis/doc/file.rtf b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.cfg similarity index 100% rename from src/example/resources/emojis/doc/file.rtf rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.cfg diff --git a/src/example/resources/emojis/doc/file.txt b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.conf similarity index 100% rename from src/example/resources/emojis/doc/file.txt rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.conf diff --git a/src/example/resources/emojis/file.unknown_extension b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.csv similarity index 100% rename from src/example/resources/emojis/file.unknown_extension rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.csv diff --git a/src/example/resources/emojis/file_without_extension b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ini similarity index 100% rename from src/example/resources/emojis/file_without_extension rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ini diff --git a/src/example/resources/emojis/internet/github/changelog b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.json similarity index 100% rename from src/example/resources/emojis/internet/github/changelog rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.json diff --git a/src/example/resources/emojis/internet/github/changelog.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ods similarity index 100% rename from src/example/resources/emojis/internet/github/changelog.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ods diff --git a/src/example/resources/emojis/internet/github/contributing b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.properties similarity index 100% rename from src/example/resources/emojis/internet/github/contributing rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.properties diff --git a/src/example/resources/emojis/internet/github/contributing.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xls similarity index 100% rename from src/example/resources/emojis/internet/github/contributing.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xls diff --git a/src/example/resources/emojis/internet/github/license b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xlsx similarity index 100% rename from src/example/resources/emojis/internet/github/license rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xlsx diff --git a/src/example/resources/emojis/internet/github/license.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xml similarity index 100% rename from src/example/resources/emojis/internet/github/license.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xml diff --git a/src/example/resources/emojis/internet/github/readme b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yaml similarity index 100% rename from src/example/resources/emojis/internet/github/readme rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yaml diff --git a/src/example/resources/emojis/internet/github/readme.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yml similarity index 100% rename from src/example/resources/emojis/internet/github/readme.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yml diff --git a/src/example/resources/emojis/internet/github/roadmap b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.doc similarity index 100% rename from src/example/resources/emojis/internet/github/roadmap rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.doc diff --git a/src/example/resources/emojis/internet/github/roadmap.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.docx similarity index 100% rename from src/example/resources/emojis/internet/github/roadmap.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.docx diff --git a/src/example/resources/emojis/internet/github/security b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.epub similarity index 100% rename from src/example/resources/emojis/internet/github/security rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.epub diff --git a/src/example/resources/emojis/internet/github/security.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.md similarity index 100% rename from src/example/resources/emojis/internet/github/security.md rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.md diff --git a/src/example/resources/emojis/internet/robots.txt b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.odt similarity index 100% rename from src/example/resources/emojis/internet/robots.txt rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.odt diff --git a/src/example/resources/emojis/media/audio/file.aac b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.pdf similarity index 100% rename from src/example/resources/emojis/media/audio/file.aac rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.pdf diff --git a/src/example/resources/emojis/media/audio/file.flac b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.rtf similarity index 100% rename from src/example/resources/emojis/media/audio/file.flac rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.rtf diff --git a/src/example/resources/emojis/media/audio/file.midi b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.txt similarity index 100% rename from src/example/resources/emojis/media/audio/file.midi rename to jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.txt diff --git a/src/example/resources/emojis/media/audio/file.mp3 b/jfiletreeprettyprinter-core/src/test/resources/emojis/file.unknown_extension similarity index 100% rename from src/example/resources/emojis/media/audio/file.mp3 rename to jfiletreeprettyprinter-core/src/test/resources/emojis/file.unknown_extension diff --git a/src/example/resources/emojis/media/audio/file.ogg b/jfiletreeprettyprinter-core/src/test/resources/emojis/file_without_extension similarity index 100% rename from src/example/resources/emojis/media/audio/file.ogg rename to jfiletreeprettyprinter-core/src/test/resources/emojis/file_without_extension diff --git a/src/example/resources/emojis/media/audio/file.wav b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog similarity index 100% rename from src/example/resources/emojis/media/audio/file.wav rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog diff --git a/src/example/resources/emojis/media/images/file.bmp b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog.md similarity index 100% rename from src/example/resources/emojis/media/images/file.bmp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog.md diff --git a/src/example/resources/emojis/media/images/file.gif b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing similarity index 100% rename from src/example/resources/emojis/media/images/file.gif rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing diff --git a/src/example/resources/emojis/media/images/file.ico b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing.md similarity index 100% rename from src/example/resources/emojis/media/images/file.ico rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing.md diff --git a/src/example/resources/emojis/media/images/file.jpeg b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license similarity index 100% rename from src/example/resources/emojis/media/images/file.jpeg rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license diff --git a/src/example/resources/emojis/media/images/file.jpg b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license.md similarity index 100% rename from src/example/resources/emojis/media/images/file.jpg rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license.md diff --git a/src/example/resources/emojis/media/images/file.png b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme similarity index 100% rename from src/example/resources/emojis/media/images/file.png rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme diff --git a/src/example/resources/emojis/media/images/file.svg b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme.md similarity index 100% rename from src/example/resources/emojis/media/images/file.svg rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme.md diff --git a/src/example/resources/emojis/media/video/file.avi b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap similarity index 100% rename from src/example/resources/emojis/media/video/file.avi rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap diff --git a/src/example/resources/emojis/media/video/file.mkv b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap.md similarity index 100% rename from src/example/resources/emojis/media/video/file.mkv rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap.md diff --git a/src/example/resources/emojis/media/video/file.mov b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security similarity index 100% rename from src/example/resources/emojis/media/video/file.mov rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security diff --git a/src/example/resources/emojis/media/video/file.mp4 b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security.md similarity index 100% rename from src/example/resources/emojis/media/video/file.mp4 rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security.md diff --git a/src/example/resources/emojis/media/video/file.webm b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/robots.txt similarity index 100% rename from src/example/resources/emojis/media/video/file.webm rename to jfiletreeprettyprinter-core/src/test/resources/emojis/internet/robots.txt diff --git a/src/example/resources/emojis/media/video/file.wmv b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.aac similarity index 100% rename from src/example/resources/emojis/media/video/file.wmv rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.aac diff --git a/src/example/resources/emojis/system/file.bak b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.flac similarity index 100% rename from src/example/resources/emojis/system/file.bak rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.flac diff --git a/src/example/resources/emojis/system/file.crt b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.midi similarity index 100% rename from src/example/resources/emojis/system/file.crt rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.midi diff --git a/src/example/resources/emojis/system/file.key b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.mp3 similarity index 100% rename from src/example/resources/emojis/system/file.key rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.mp3 diff --git a/src/example/resources/emojis/system/file.log b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.ogg similarity index 100% rename from src/example/resources/emojis/system/file.log rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.ogg diff --git a/src/example/resources/emojis/system/file.pem b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.wav similarity index 100% rename from src/example/resources/emojis/system/file.pem rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.wav diff --git a/src/example/resources/emojis/system/file.pub b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.bmp similarity index 100% rename from src/example/resources/emojis/system/file.pub rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.bmp diff --git a/src/example/resources/emojis/system/file.tmp b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.gif similarity index 100% rename from src/example/resources/emojis/system/file.tmp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.gif diff --git a/src/example/resources/filtering/dir_with_java_files/file_B.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.ico similarity index 100% rename from src/example/resources/filtering/dir_with_java_files/file_B.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.ico diff --git a/src/example/resources/filtering/dir_with_java_files/file_C.cpp b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpeg similarity index 100% rename from src/example/resources/filtering/dir_with_java_files/file_C.cpp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpeg diff --git a/src/example/resources/filtering/dir_with_java_files/file_D.ts b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpg similarity index 100% rename from src/example/resources/filtering/dir_with_java_files/file_D.ts rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpg diff --git a/src/example/resources/filtering/dir_with_java_files/file_E.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.png similarity index 100% rename from src/example/resources/filtering/dir_with_java_files/file_E.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.png diff --git a/src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.svg similarity index 100% rename from src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.svg diff --git a/src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.avi similarity index 100% rename from src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.avi diff --git a/src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mkv similarity index 100% rename from src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mkv diff --git a/src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mov similarity index 100% rename from src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mov diff --git a/src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mp4 similarity index 100% rename from src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mp4 diff --git a/src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.webm similarity index 100% rename from src/example/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.webm diff --git a/src/example/resources/filtering/dir_with_no_java_file/file_M.cpp b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.wmv similarity index 100% rename from src/example/resources/filtering/dir_with_no_java_file/file_M.cpp rename to jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.wmv diff --git a/src/example/resources/filtering/dir_with_no_java_file/file_N.ts b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.bak similarity index 100% rename from src/example/resources/filtering/dir_with_no_java_file/file_N.ts rename to jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.bak diff --git a/src/example/resources/filtering/file_A.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.crt similarity index 100% rename from src/example/resources/filtering/file_A.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.crt diff --git a/src/example/resources/line_extension/src/main/java/api/Controller.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.key similarity index 100% rename from src/example/resources/line_extension/src/main/java/api/Controller.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.key diff --git a/src/example/resources/line_extension/src/main/java/domain/ValueObject.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pem similarity index 100% rename from src/example/resources/line_extension/src/main/java/domain/ValueObject.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pem diff --git a/src/example/resources/line_extension/src/main/java/infra/Repository.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pub similarity index 100% rename from src/example/resources/line_extension/src/main/java/infra/Repository.java rename to jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pub diff --git a/src/example/resources/line_extension/src/main/resources/application.properties b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.tmp similarity index 100% rename from src/example/resources/line_extension/src/main/resources/application.properties rename to jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.tmp diff --git a/src/example/resources/max_depth/level1/file1#1 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_B.java similarity index 100% rename from src/example/resources/max_depth/level1/file1#1 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_B.java diff --git a/src/example/resources/max_depth/level1/file1#2 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_C.cpp similarity index 100% rename from src/example/resources/max_depth/level1/file1#2 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_C.cpp diff --git a/src/example/resources/max_depth/level1/level2/file2#1 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_D.ts similarity index 100% rename from src/example/resources/max_depth/level1/level2/file2#1 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_D.ts diff --git a/src/example/resources/max_depth/level1/level2/file2#2 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_E.java similarity index 100% rename from src/example/resources/max_depth/level1/level2/file2#2 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_E.java diff --git a/src/example/resources/max_depth/level1/level2/level3/file3#1 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java similarity index 100% rename from src/example/resources/max_depth/level1/level2/level3/file3#1 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java diff --git a/src/example/resources/max_depth/level1/level2/level3/file3#2 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp similarity index 100% rename from src/example/resources/max_depth/level1/level2/level3/file3#2 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp diff --git a/src/example/resources/max_depth/level1/level2/level3/level4/file4#1 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts similarity index 100% rename from src/example/resources/max_depth/level1/level2/level3/level4/file4#1 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts diff --git a/src/example/resources/max_depth/level1/level2/level3/level4/file4#2 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java similarity index 100% rename from src/example/resources/max_depth/level1/level2/level3/level4/file4#2 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java diff --git a/src/example/resources/single_directory_child/file1 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp similarity index 100% rename from src/example/resources/single_directory_child/file1 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp diff --git a/src/example/resources/single_directory_child/file2 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts similarity index 100% rename from src/example/resources/single_directory_child/file2 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts diff --git a/src/example/resources/single_directory_child/this/is/single/directory/child/file1 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_M.cpp similarity index 100% rename from src/example/resources/single_directory_child/this/is/single/directory/child/file1 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_M.cpp diff --git a/src/example/resources/single_directory_child/this/is/single/directory/child/file2 b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_N.ts similarity index 100% rename from src/example/resources/single_directory_child/this/is/single/directory/child/file2 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_N.ts diff --git a/src/example/resources/single_directory_child/this/is/single/directory/child/file3 b/jfiletreeprettyprinter-core/src/test/resources/filtering/file_A.java similarity index 100% rename from src/example/resources/single_directory_child/this/is/single/directory/child/file3 rename to jfiletreeprettyprinter-core/src/test/resources/filtering/file_A.java diff --git a/src/example/resources/sorting/y_file b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/api/Controller.java similarity index 100% rename from src/example/resources/sorting/y_file rename to jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/api/Controller.java diff --git a/src/example/resources/tree_format/file_1 b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/domain/ValueObject.java similarity index 100% rename from src/example/resources/tree_format/file_1 rename to jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/domain/ValueObject.java diff --git a/src/example/resources/tree_format/file_2 b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/infra/Repository.java similarity index 100% rename from src/example/resources/tree_format/file_2 rename to jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/infra/Repository.java diff --git a/src/example/resources/tree_format/subFolder/subFile_1 b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/resources/application.properties similarity index 100% rename from src/example/resources/tree_format/subFolder/subFile_1 rename to jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/resources/application.properties diff --git a/src/example/resources/tree_format/subFolder/subFile_2 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#1 similarity index 100% rename from src/example/resources/tree_format/subFolder/subFile_2 rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#1 diff --git a/src/test/resources/cli/base/folder_a/file_1.txt b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#2 similarity index 100% rename from src/test/resources/cli/base/folder_a/file_1.txt rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#2 diff --git a/src/test/resources/cli/base/folder_a/file_2.java b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#1 similarity index 100% rename from src/test/resources/cli/base/folder_a/file_2.java rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#1 diff --git a/src/test/resources/cli/base/folder_a/file_3.php b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#2 similarity index 100% rename from src/test/resources/cli/base/folder_a/file_3.php rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#2 diff --git a/src/test/resources/cli/base/folder_a/file_4.jpeg b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#1 similarity index 100% rename from src/test/resources/cli/base/folder_a/file_4.jpeg rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#1 diff --git a/src/test/resources/cli/base/folder_b/file_1.txt b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#2 similarity index 100% rename from src/test/resources/cli/base/folder_b/file_1.txt rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#2 diff --git a/src/test/resources/cli/base/folder_b/file_2.java b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#1 similarity index 100% rename from src/test/resources/cli/base/folder_b/file_2.java rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#1 diff --git a/src/test/resources/cli/base/folder_b/file_3.php b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#2 similarity index 100% rename from src/test/resources/cli/base/folder_b/file_3.php rename to jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#2 diff --git a/src/test/resources/cli/base/folder_b/file_4.jpeg b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file1 similarity index 100% rename from src/test/resources/cli/base/folder_b/file_4.jpeg rename to jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file1 diff --git a/src/test/resources/cli/base/folder_c/file_1.txt b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file2 similarity index 100% rename from src/test/resources/cli/base/folder_c/file_1.txt rename to jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file2 diff --git a/src/test/resources/cli/base/folder_c/file_2.java b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file1 similarity index 100% rename from src/test/resources/cli/base/folder_c/file_2.java rename to jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file1 diff --git a/src/test/resources/cli/base/folder_c/file_3.php b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file2 similarity index 100% rename from src/test/resources/cli/base/folder_c/file_3.php rename to jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file2 diff --git a/src/test/resources/cli/base/folder_c/file_4.jpeg b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file3 similarity index 100% rename from src/test/resources/cli/base/folder_c/file_4.jpeg rename to jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file3 diff --git a/src/example/resources/sorting/a_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/a_file similarity index 100% rename from src/example/resources/sorting/a_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/a_file diff --git a/src/example/resources/sorting/b_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/b_file similarity index 100% rename from src/example/resources/sorting/b_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/b_file diff --git a/src/example/resources/sorting/c_dir/c_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/c_dir/c_file similarity index 100% rename from src/example/resources/sorting/c_dir/c_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/c_dir/c_file diff --git a/src/example/resources/sorting/d_dir/d_a_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_a_file similarity index 100% rename from src/example/resources/sorting/d_dir/d_a_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_a_file diff --git a/src/example/resources/sorting/d_dir/d_b_dir/d_b_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_b_dir/d_b_file similarity index 100% rename from src/example/resources/sorting/d_dir/d_b_dir/d_b_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_b_dir/d_b_file diff --git a/src/example/resources/sorting/x_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/x_file similarity index 100% rename from src/example/resources/sorting/x_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/x_file diff --git a/src/test/resources/cli/base/folder_d/file_1.txt b/jfiletreeprettyprinter-core/src/test/resources/sorting/y_file similarity index 100% rename from src/test/resources/cli/base/folder_d/file_1.txt rename to jfiletreeprettyprinter-core/src/test/resources/sorting/y_file diff --git a/src/test/resources/cli/base/folder_d/file_2.java b/jfiletreeprettyprinter-core/src/test/resources/tree_format/file_1 similarity index 100% rename from src/test/resources/cli/base/folder_d/file_2.java rename to jfiletreeprettyprinter-core/src/test/resources/tree_format/file_1 diff --git a/src/test/resources/cli/base/folder_d/file_3.php b/jfiletreeprettyprinter-core/src/test/resources/tree_format/file_2 similarity index 100% rename from src/test/resources/cli/base/folder_d/file_3.php rename to jfiletreeprettyprinter-core/src/test/resources/tree_format/file_2 diff --git a/src/test/resources/cli/base/folder_d/file_4.jpeg b/jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_1 similarity index 100% rename from src/test/resources/cli/base/folder_d/file_4.jpeg rename to jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_1 diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt b/jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_2 similarity index 100% rename from src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_1.txt rename to jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_2 diff --git a/jfiletreeprettyprinter-example/pom.xml b/jfiletreeprettyprinter-example/pom.xml new file mode 100644 index 0000000..6a24e2d --- /dev/null +++ b/jfiletreeprettyprinter-example/pom.xml @@ -0,0 +1,21 @@ + + 4.0.0 + + io.github.computerdaddyguy + jfiletreeprettyprinter + ${revision} + + + jfiletreeprettyprinter-example + + + + + io.github.computerdaddyguy + jfiletreeprettyprinter-core + ${revision} + + + + \ No newline at end of file diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java diff --git a/src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java b/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java similarity index 100% rename from src/example/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java rename to jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java b/jfiletreeprettyprinter-example/src/main/resources/base/businessPlan.pdf similarity index 100% rename from src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_2.java rename to jfiletreeprettyprinter-example/src/main/resources/base/businessPlan.pdf diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php b/jfiletreeprettyprinter-example/src/main/resources/base/businessProject.pdf similarity index 100% rename from src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_3.php rename to jfiletreeprettyprinter-example/src/main/resources/base/businessProject.pdf diff --git a/src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg b/jfiletreeprettyprinter-example/src/main/resources/base/cars/Ferrari.doc similarity index 100% rename from src/test/resources/cli/base/folder_z1/folder_z2/folder_z3/file_4.jpeg rename to jfiletreeprettyprinter-example/src/main/resources/base/cars/Ferrari.doc diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/cars/Porsche.doc b/jfiletreeprettyprinter-example/src/main/resources/base/cars/Porsche.doc new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/diyIdeas.docx b/jfiletreeprettyprinter-example/src/main/resources/base/diyIdeas.docx new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/giftIdeas.txt b/jfiletreeprettyprinter-example/src/main/resources/base/giftIdeas.txt new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/funnyCat.gif b/jfiletreeprettyprinter-example/src/main/resources/base/images/funnyCat.gif new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheBeach.jpeg b/jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheBeach.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheZoo.jpeg b/jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheZoo.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/landscape.jpeg b/jfiletreeprettyprinter-example/src/main/resources/base/images/landscape.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/file_0_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/file_0_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_2 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_3 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_4 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_5 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_5 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_01 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_01 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_02 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_02 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_03 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_03 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_04 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_04 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_05 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_05 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_06 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_06 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_07 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_07 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_08 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_08 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_09 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_09 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_10 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_10 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_11 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_11 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_12 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_12 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_13 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_13 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_14 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_14 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_15 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_15 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_16 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_16 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_17 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_17 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_18 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_18 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_19 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_19 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_20 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_20 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/file_0_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/file_0_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_2 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_3 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_4 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_5 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_5 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_2 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_3 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_4 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_5 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_5 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_2 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_3 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_4 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_5 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_5 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_2 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_3 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_4 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_5 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_5 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_1 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_2 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_3 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_4 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_5 b/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_5 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_1 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_2 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_1 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_2 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 b/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.apk b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.apk new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.app b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.app new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.bin b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.bin new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.exe b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.exe new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.msi b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.msi new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file2.ipa b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file2.ipa new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.dll b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.dll new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.lib b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.lib new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.so b/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.so new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.7z b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.7z new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.gz b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.gz new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.img b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.img new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.iso b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.iso new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.rar b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.rar new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.tar b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.tar new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.zip b/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.zip new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/.gitignore b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/.gitignore new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/Dockerfile b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/Dockerfile new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/Jenkinsfile b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/Jenkinsfile new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/build.gradle b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/build.gradle new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/makefile b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/makefile new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/package.json b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/package.json new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/pom.xml b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/pom.xml new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/docker-compose.yml b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/docker-compose.yml new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.c b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.c new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.class new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cpp b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cpp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cs b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cs new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.css b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.css new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htm b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htm new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.html b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.html new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htmx b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htmx new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.jar new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.java b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.less b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.less new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.php b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.php new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.py b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.py new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.scss b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.scss new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.sql b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.sql new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.ts b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.ts new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bash b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bash new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bat b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bat new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.sh b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.sh new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.cfg b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.cfg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.conf b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.conf new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.csv b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.csv new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ini b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ini new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.json b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.json new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ods b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ods new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.properties b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.properties new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xls b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xls new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xlsx b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xlsx new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xml b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xml new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yaml b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yaml new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yml b/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yml new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.doc b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.doc new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.docx b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.docx new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.epub b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.epub new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.odt b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.odt new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.pdf b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.rtf b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.rtf new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.txt b/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.txt new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/file.unknown_extension b/jfiletreeprettyprinter-example/src/main/resources/emojis/file.unknown_extension new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/file_without_extension b/jfiletreeprettyprinter-example/src/main/resources/emojis/file_without_extension new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security.md b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security.md new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/robots.txt b/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/robots.txt new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.aac b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.aac new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.flac b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.flac new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.midi b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.midi new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.mp3 b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.mp3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.ogg b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.ogg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.wav b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.wav new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.bmp b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.bmp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.gif b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.gif new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.ico b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.ico new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpeg b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpeg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpg b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.png b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.png new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.svg b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.svg new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.avi b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.avi new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mkv b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mkv new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mov b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mov new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mp4 b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mp4 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.webm b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.webm new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.wmv b/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.wmv new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.bak b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.bak new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.crt b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.crt new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.key b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.key new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.log b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.log new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pem b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pem new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pub b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pub new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.tmp b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.tmp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_B.java b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_B.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_C.cpp b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_C.cpp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_D.ts b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_D.ts new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_E.java b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_E.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_N.ts b/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_N.ts new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/file_A.java b/jfiletreeprettyprinter-example/src/main/resources/filtering/file_A.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/api/Controller.java b/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/api/Controller.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/domain/ValueObject.java b/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/domain/ValueObject.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/infra/Repository.java b/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/infra/Repository.java new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/resources/application.properties b/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/resources/application.properties new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#1 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#2 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#1 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#2 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#1 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#2 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 b/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file1 b/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file2 b/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file1 b/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file2 b/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file3 b/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file3 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/a_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/a_file new file mode 100644 index 0000000..4632e06 --- /dev/null +++ b/jfiletreeprettyprinter-example/src/main/resources/sorting/a_file @@ -0,0 +1 @@ +123456 \ No newline at end of file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/b_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/b_file new file mode 100644 index 0000000..e2e107a --- /dev/null +++ b/jfiletreeprettyprinter-example/src/main/resources/sorting/b_file @@ -0,0 +1 @@ +123456789 \ No newline at end of file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/c_dir/c_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/c_dir/c_file new file mode 100644 index 0000000..3b0fe33 --- /dev/null +++ b/jfiletreeprettyprinter-example/src/main/resources/sorting/c_dir/c_file @@ -0,0 +1 @@ +small file \ No newline at end of file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_a_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_a_file new file mode 100644 index 0000000..3b0fe33 --- /dev/null +++ b/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_a_file @@ -0,0 +1 @@ +small file \ No newline at end of file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_b_dir/d_b_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_b_dir/d_b_file new file mode 100644 index 0000000..3b0fe33 --- /dev/null +++ b/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_b_dir/d_b_file @@ -0,0 +1 @@ +small file \ No newline at end of file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/x_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/x_file new file mode 100644 index 0000000..d800886 --- /dev/null +++ b/jfiletreeprettyprinter-example/src/main/resources/sorting/x_file @@ -0,0 +1 @@ +123 \ No newline at end of file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/y_file b/jfiletreeprettyprinter-example/src/main/resources/sorting/y_file new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/file_1 b/jfiletreeprettyprinter-example/src/main/resources/tree_format/file_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/file_2 b/jfiletreeprettyprinter-example/src/main/resources/tree_format/file_2 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_1 b/jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_1 new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_2 b/jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_2 new file mode 100644 index 0000000..e69de29 diff --git a/pom.xml b/pom.xml index 04f63f5..4bf359f 100644 --- a/pom.xml +++ b/pom.xml @@ -5,13 +5,19 @@ io.github.computerdaddyguy jfiletreeprettyprinter - 0.1.1-SNAPSHOT + ${revision} - jar + pom JFileTreePrettyPrinter A lightweight and flexible Java library with a native CLI to pretty-print directory structures - ideal for documentation, project overviews, or CLI tools. https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter + + jfiletreeprettyprinter-core + jfiletreeprettyprinter-cli + jfiletreeprettyprinter-example + + The Apache License, Version 2.0 @@ -33,6 +39,8 @@ + 0.1.1-SNAPSHOT + 21 21 21 @@ -63,198 +71,200 @@ - - - - tools.jackson.core - jackson-databind - ${jackson.version} - - - tools.jackson.dataformat - jackson-dataformat-yaml - ${jackson.version} - - - org.hibernate.validator - hibernate-validator - ${hibernate-validator.version} - - - info.picocli - picocli - ${picocli.version} - - - org.jspecify - jspecify - ${jspecify.version} - - - org.junit.jupiter - junit-jupiter-engine - ${junit.version} - test - - - org.assertj - assertj-core - ${assertj.version} - test - - + + + + org.jspecify + jspecify + ${jspecify.version} + + + org.junit.jupiter + junit-jupiter-engine + ${junit.version} + test + + + org.assertj + assertj-core + ${assertj.version} + test + + + tools.jackson.core + jackson-databind + ${jackson.version} + + + tools.jackson.dataformat + jackson-dataformat-yaml + ${jackson.version} + + + org.hibernate.validator + hibernate-validator + ${hibernate-validator.version} + + + info.picocli + picocli + ${picocli.version} + + + - - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper-maven-plugin.version} - - - add-example-source - generate-sources - - add-test-source - - - - src/example/java - - - - - add-example-resources - generate-resources - - add-test-resource - - - - - src/example/resources - - - - - - + - - io.github.git-commit-id - git-commit-id-maven-plugin - ${git-commit-id-maven-plugin.version} - - - get-the-git-infos - - revision - - initialize - - - - false - full - - + + org.codehaus.mojo + build-helper-maven-plugin + ${build-helper-maven-plugin.version} + + + add-example-source + generate-sources + + add-test-source + + + + src/example/java + + + + + add-example-resources + generate-resources + + add-test-resource + + + + + src/example/resources + + + + + + - - org.apache.maven.plugins - maven-jar-plugin - ${maven-jar-plugin.version} - - - src/example/** - - - - true - false - - - ${git.build.time} - ${git.commit.id.full} - ${git.commit.time} - ${project.description} - ${scm.url} - - - - + + io.github.git-commit-id + git-commit-id-maven-plugin + ${git-commit-id-maven-plugin.version} + + + get-the-git-infos + + revision + + initialize + + + + false + full + + - - org.apache.maven.plugins - maven-compiler-plugin - ${maven-compiler-plugin.version} - - ${java.version} - ${java.version} - UTF-8 - - + + org.apache.maven.plugins + maven-jar-plugin + ${maven-jar-plugin.version} + + + src/example/** + + + + true + false + + + ${git.build.time} + ${git.commit.id.full} + ${git.commit.time} + ${project.description} + ${scm.url} + + + + - - org.apache.maven.plugins - maven-surefire-plugin - ${maven-surefire-plugin.version} - + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + ${java.version} + ${java.version} + UTF-8 + + - - org.jacoco - jacoco-maven-plugin - ${jacoco-maven-plugin.version} - - - - prepare-agent - - - - report - verify - - report - - - - post-unit-test - test - - report - - - ${project.build.directory}/jacoco.exec - ${project.reporting.outputDirectory}/jacoco - - - - + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + - - org.pitest - pitest-maven - ${pitest-maven.version} - - - org.pitest - pitest-junit5-plugin - ${pitest-junit5-plugin.version} - - - - - io.github.computerdaddyguy.jfiletreeprettyprinter.* - - - io.github.computerdaddyguy.jfiletreeprettyprinter.*Test - - + + org.jacoco + jacoco-maven-plugin + ${jacoco-maven-plugin.version} + + + + prepare-agent + + + + report + verify + + report + + + + post-unit-test + test + + report + + + ${project.build.directory}/jacoco.exec + ${project.reporting.outputDirectory}/jacoco + + + + - + + org.pitest + pitest-maven + ${pitest-maven.version} + + + org.pitest + pitest-junit5-plugin + ${pitest-junit5-plugin.version} + + + + + io.github.computerdaddyguy.jfiletreeprettyprinter.* + + + io.github.computerdaddyguy.jfiletreeprettyprinter.*Test + + - + + + @@ -378,5 +388,4 @@ - \ No newline at end of file From 9d3216cd8f90407742a352dd1d18138401c6e610 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 16:02:44 +0100 Subject: [PATCH 28/57] mvn native compilation ok --- jfiletreeprettyprinter-cli/pom.xml | 84 +++++- .../cli/io/DefaultConsoleOutput.java | 2 +- jfiletreeprettyprinter-core/pom.xml | 76 ++++- pom.xml | 267 ++++-------------- 4 files changed, 211 insertions(+), 218 deletions(-) diff --git a/jfiletreeprettyprinter-cli/pom.xml b/jfiletreeprettyprinter-cli/pom.xml index 60d8a63..9a610ca 100644 --- a/jfiletreeprettyprinter-cli/pom.xml +++ b/jfiletreeprettyprinter-cli/pom.xml @@ -18,7 +18,7 @@ jfiletreeprettyprinter-core ${revision} - + org.jspecify jspecify @@ -33,7 +33,7 @@ assertj-core test - + tools.jackson.core jackson-databind @@ -50,9 +50,81 @@ info.picocli picocli - + - - - + + + + + + io.github.git-commit-id + git-commit-id-maven-plugin + + + get-the-git-infos + + revision + + initialize + + + + false + full + + + + + org.apache.maven.plugins + maven-jar-plugin + + + + true + false + + + ${git.build.time} + ${git.commit.id.full} + ${git.commit.time} + ${project.description} + ${scm.url} + + + + + + + + + + + + native + + + + org.graalvm.buildtools + native-maven-plugin + ${native.maven.plugin.version} + true + + + build-native + + compile-no-fork + + package + + + + io.github.computerdaddyguy.jfiletreeprettyprinter.cli.FileTreePrettyPrinterCommandLine + jfiletreeprettyprinter + + + + + + + \ No newline at end of file diff --git a/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java index efd146b..2b2852c 100644 --- a/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java +++ b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/io/DefaultConsoleOutput.java @@ -70,7 +70,7 @@ private void printErr(String msg, Object... args) { } private void printfln(PrintStream dest, String msg, Object... args) { - dest.printf("%s%s", msg, System.lineSeparator(), args);// Because "printf" does not print line return + dest.printf(msg + System.lineSeparator(), args);// Because "printf" does not print line return } } diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml index fcd7581..cd5948b 100644 --- a/jfiletreeprettyprinter-core/pom.xml +++ b/jfiletreeprettyprinter-core/pom.xml @@ -31,15 +31,83 @@ - - - - + + + release + + + + org.sonatype.central + central-publishing-maven-plugin + ${central-publishing-maven-plugin.version} + true + + central + true + true + + + + org.apache.maven.plugins + maven-source-plugin + ${maven-source-plugin.version} + + + attach-sources + verify + + jar-no-fork + + + + + + org.apache.maven.plugins + maven-javadoc-plugin + ${maven-javadoc-plugin.version} + + + attach-javadoc + + jar + + + + + java + none + + + + org.apache.maven.plugins + maven-gpg-plugin + ${maven-gpg-plugin.version} + + + sign-artifacts + verify + + sign + + + + + + --pinentry-mode + loopback + + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 4bf359f..85d3f15 100644 --- a/pom.xml +++ b/pom.xml @@ -57,7 +57,6 @@ 3.10.1 3.5.2 - 3.6.1 3.4.2 0.8.12 1.20.2 @@ -114,84 +113,20 @@ + - - org.codehaus.mojo - build-helper-maven-plugin - ${build-helper-maven-plugin.version} - - - add-example-source - generate-sources - - add-test-source - - - - src/example/java - - - - - add-example-resources - generate-resources - - add-test-resource - - - - - src/example/resources - - - - - - - io.github.git-commit-id git-commit-id-maven-plugin - ${git-commit-id-maven-plugin.version} - - - get-the-git-infos - - revision - - initialize - - - - false - full - + ${git-commit-id-maven-plugin.version} org.apache.maven.plugins maven-jar-plugin ${maven-jar-plugin.version} - - - src/example/** - - - - true - false - - - ${git.build.time} - ${git.commit.id.full} - ${git.commit.time} - ${project.description} - ${scm.url} - - - @@ -211,61 +146,77 @@ ${maven-surefire-plugin.version} + org.jacoco jacoco-maven-plugin ${jacoco-maven-plugin.version} - - - - prepare-agent - - - - report - verify - - report - - - - post-unit-test - test - - report - - - ${project.build.directory}/jacoco.exec - ${project.reporting.outputDirectory}/jacoco - - - org.pitest pitest-maven ${pitest-maven.version} - - - org.pitest - pitest-junit5-plugin - ${pitest-junit5-plugin.version} - - - - - io.github.computerdaddyguy.jfiletreeprettyprinter.* - - - io.github.computerdaddyguy.jfiletreeprettyprinter.*Test - - - - + + + + + + org.jacoco + jacoco-maven-plugin + + + + prepare-agent + + + + report + verify + + report + + + + post-unit-test + test + + report + + + ${project.build.directory}/jacoco.exec + ${project.reporting.outputDirectory}/jacoco + + + + + + + org.pitest + pitest-maven + + + org.pitest + pitest-junit5-plugin + ${pitest-junit5-plugin.version} + + + + + io.github.computerdaddyguy.jfiletreeprettyprinter.* + + + io.github.computerdaddyguy.jfiletreeprettyprinter.*Test + + + + + + + @@ -289,103 +240,5 @@ - - - release - - - - org.sonatype.central - central-publishing-maven-plugin - ${central-publishing-maven-plugin.version} - true - - central - true - true - - - - org.apache.maven.plugins - maven-source-plugin - ${maven-source-plugin.version} - - - attach-sources - verify - - jar-no-fork - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - - attach-javadoc - - jar - - - - - java - none - - - - org.apache.maven.plugins - maven-gpg-plugin - ${maven-gpg-plugin.version} - - - sign-artifacts - verify - - sign - - - - - - --pinentry-mode - loopback - - - - - - - - - native - - - - org.graalvm.buildtools - native-maven-plugin - ${native.maven.plugin.version} - true - - - build-native - - compile-no-fork - - package - - - - io.github.computerdaddyguy.jfiletreeprettyprinter.cli.FileTreePrettyPrinterCommandLine - - - - - - - \ No newline at end of file From 73034c0c32c7782ddaf23ad0f8e3c834c865bc27 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:07:54 +0100 Subject: [PATCH 29/57] Renamed "examples" module + project structure picture update --- .gitignore | 1 + assets/project-structure.png | Bin 465155 -> 599208 bytes .../cli/ManifestVersionProvider.java | 4 +- jfiletreeprettyprinter-core/pom.xml | 25 ++++- .../DefaultFileTreePrettyPrinter.java | 1 + .../resources/emojis/code/lang/file.class | 0 .../main/resources/emojis/code/lang/file.jar | 0 .../src/main/resources/emojis/system/file.log | 0 .../pom.xml | 2 +- .../example/BasicUsage.java | 2 +- .../example/ChildLimitDynamic.java | 2 +- .../example/ChildLimitStatic.java | 2 +- .../example/CompactDirectories.java | 2 +- .../example/Emojis.java | 2 +- .../example/FileTreeFormat.java | 2 +- .../example/Filtering.java | 2 +- .../example/LineExtension.java | 2 +- .../example/MaxDepth.java | 2 +- .../example/ProjectStructure.java | 87 +++++++++++------- .../example/Sorting.java | 2 +- .../src/main/resources/base/businessPlan.pdf | Bin .../main/resources/base/businessProject.pdf | Bin .../src/main/resources/base/cars/Ferrari.doc | 0 .../src/main/resources/base/cars/Porsche.doc | 0 .../src/main/resources/base/diyIdeas.docx | 0 .../src/main/resources/base/giftIdeas.txt | 0 .../main/resources/base/images/funnyCat.gif | 0 .../base/images/holidays/meAtTheBeach.jpeg | 0 .../base/images/holidays/meAtTheZoo.jpeg | 0 .../main/resources/base/images/landscape.jpeg | 0 .../resources/child_limit_dynamic/file_0_1 | 0 .../child_limit_dynamic/folder_1/file_1_1 | 0 .../child_limit_dynamic/folder_1/file_1_2 | 0 .../child_limit_dynamic/folder_1/file_1_3 | 0 .../child_limit_dynamic/folder_1/file_1_4 | 0 .../child_limit_dynamic/folder_1/file_1_5 | 0 .../node_modules/file_node_01 | 0 .../node_modules/file_node_02 | 0 .../node_modules/file_node_03 | 0 .../node_modules/file_node_04 | 0 .../node_modules/file_node_05 | 0 .../node_modules/file_node_06 | 0 .../node_modules/file_node_07 | 0 .../node_modules/file_node_08 | 0 .../node_modules/file_node_09 | 0 .../node_modules/file_node_10 | 0 .../node_modules/file_node_11 | 0 .../node_modules/file_node_12 | 0 .../node_modules/file_node_13 | 0 .../node_modules/file_node_14 | 0 .../node_modules/file_node_15 | 0 .../node_modules/file_node_16 | 0 .../node_modules/file_node_17 | 0 .../node_modules/file_node_18 | 0 .../node_modules/file_node_19 | 0 .../node_modules/file_node_20 | 0 .../resources/child_limit_static/file_0_1 | 0 .../child_limit_static/folder_1/file_1_1 | 0 .../child_limit_static/folder_1/file_1_2 | 0 .../child_limit_static/folder_1/file_1_3 | 0 .../child_limit_static/folder_1/file_1_4 | 0 .../child_limit_static/folder_1/file_1_5 | 0 .../child_limit_static/folder_2/file_2_1 | 0 .../child_limit_static/folder_2/file_2_2 | 0 .../child_limit_static/folder_2/file_2_3 | 0 .../child_limit_static/folder_2/file_2_4 | 0 .../child_limit_static/folder_2/file_2_5 | 0 .../child_limit_static/folder_3/file_3_1 | 0 .../child_limit_static/folder_3/file_3_2 | 0 .../child_limit_static/folder_3/file_3_3 | 0 .../child_limit_static/folder_3/file_3_4 | 0 .../child_limit_static/folder_3/file_3_5 | 0 .../child_limit_static/folder_4/file_4_1 | 0 .../child_limit_static/folder_4/file_4_2 | 0 .../child_limit_static/folder_4/file_4_3 | 0 .../child_limit_static/folder_4/file_4_4 | 0 .../child_limit_static/folder_4/file_4_5 | 0 .../child_limit_static/folder_5/file_5_1 | 0 .../child_limit_static/folder_5/file_5_2 | 0 .../child_limit_static/folder_5/file_5_3 | 0 .../child_limit_static/folder_5/file_5_4 | 0 .../child_limit_static/folder_5/file_5_5 | 0 .../resources/depth_limit/level_1/file_1_1 | 0 .../resources/depth_limit/level_1/file_1_2 | 0 .../depth_limit/level_1/level_2/file_2_1 | 0 .../depth_limit/level_1/level_2/file_2_2 | 0 .../level_1/level_2/level_3/file_3_1 | 0 .../level_1/level_2/level_3/file_3_2 | 0 .../level_1/level_2/level_3/level_4/file_4_1 | 0 .../level_1/level_2/level_3/level_4/file_4_2 | 0 .../level_2/level_3/level_4/level_5/file_5_1 | 0 .../level_2/level_3/level_4/level_5/file_5_2 | 0 .../emojis/applications/executables/file.apk | 0 .../emojis/applications/executables/file.app | 0 .../emojis/applications/executables/file.bin | 0 .../emojis/applications/executables/file.exe | 0 .../emojis/applications/executables/file.msi | 0 .../emojis/applications/executables/file2.ipa | 0 .../emojis/applications/libs/file.dll | 0 .../emojis/applications/libs/file.lib | 0 .../emojis/applications/libs/file.so | 0 .../main/resources/emojis/archives/file.7z | 0 .../main/resources/emojis/archives/file.gz | 0 .../main/resources/emojis/archives/file.img | 0 .../main/resources/emojis/archives/file.iso | 0 .../main/resources/emojis/archives/file.rar | 0 .../main/resources/emojis/archives/file.tar | 0 .../main/resources/emojis/archives/file.zip | 0 .../src/main/resources/emojis/code/.gitignore | 0 .../src/main/resources/emojis/code/Dockerfile | 0 .../main/resources/emojis/code/Jenkinsfile | 0 .../emojis/code/build_tools/build.gradle | 0 .../emojis/code/build_tools/makefile | 0 .../emojis/code/build_tools/package.json | 0 .../resources/emojis/code/build_tools/pom.xml | 0 .../resources/emojis/code/docker-compose.yml | 0 .../main/resources/emojis/code/lang/file.c | 0 .../main/resources/emojis/code/lang/file.cpp | 0 .../main/resources/emojis/code/lang/file.cs | 0 .../main/resources/emojis/code/lang/file.css | 0 .../main/resources/emojis/code/lang/file.htm | 0 .../main/resources/emojis/code/lang/file.html | 0 .../main/resources/emojis/code/lang/file.htmx | 0 .../main/resources/emojis/code/lang/file.java | 0 .../main/resources/emojis/code/lang/file.less | 0 .../main/resources/emojis/code/lang/file.php | 0 .../main/resources/emojis/code/lang/file.py | 0 .../main/resources/emojis/code/lang/file.scss | 0 .../main/resources/emojis/code/lang/file.sql | 0 .../main/resources/emojis/code/lang/file.ts | 0 .../resources/emojis/code/scripting/file.bash | 0 .../resources/emojis/code/scripting/file.bat | 0 .../resources/emojis/code/scripting/file.sh | 0 .../src/main/resources/emojis/data/file.cfg | 0 .../src/main/resources/emojis/data/file.conf | 0 .../src/main/resources/emojis/data/file.csv | 0 .../src/main/resources/emojis/data/file.ini | 0 .../src/main/resources/emojis/data/file.json | 0 .../src/main/resources/emojis/data/file.ods | 0 .../resources/emojis/data/file.properties | 0 .../src/main/resources/emojis/data/file.xls | 0 .../src/main/resources/emojis/data/file.xlsx | 0 .../src/main/resources/emojis/data/file.xml | 0 .../src/main/resources/emojis/data/file.yaml | 0 .../src/main/resources/emojis/data/file.yml | 0 .../src/main/resources/emojis/doc/file.doc | 0 .../src/main/resources/emojis/doc/file.docx | 0 .../src/main/resources/emojis/doc/file.epub | 0 .../src/main/resources/emojis/doc/file.md | 0 .../src/main/resources/emojis/doc/file.odt | 0 .../src/main/resources/emojis/doc/file.pdf | Bin .../src/main/resources/emojis/doc/file.rtf | 0 .../src/main/resources/emojis/doc/file.txt | 0 .../resources/emojis/file.unknown_extension | 0 .../resources/emojis/file_without_extension | 0 .../emojis/internet/github/changelog | 0 .../emojis/internet/github/changelog.md | 0 .../emojis/internet/github/contributing | 0 .../emojis/internet/github/contributing.md | 0 .../resources/emojis/internet/github/license | 0 .../emojis/internet/github/license.md | 0 .../resources/emojis/internet/github/readme | 0 .../emojis/internet/github/readme.md | 0 .../resources/emojis/internet/github/roadmap | 0 .../emojis/internet/github/roadmap.md | 0 .../resources/emojis/internet/github/security | 0 .../emojis/internet/github/security.md | 0 .../main/resources/emojis/internet/robots.txt | 0 .../resources/emojis/media/audio/file.aac | 0 .../resources/emojis/media/audio/file.flac | 0 .../resources/emojis/media/audio/file.midi | 0 .../resources/emojis/media/audio/file.mp3 | 0 .../resources/emojis/media/audio/file.ogg | 0 .../resources/emojis/media/audio/file.wav | 0 .../resources/emojis/media/images/file.bmp | 0 .../resources/emojis/media/images/file.gif | 0 .../resources/emojis/media/images/file.ico | 0 .../resources/emojis/media/images/file.jpeg | 0 .../resources/emojis/media/images/file.jpg | 0 .../resources/emojis/media/images/file.png | 0 .../resources/emojis/media/images/file.svg | 0 .../resources/emojis/media/video/file.avi | 0 .../resources/emojis/media/video/file.mkv | 0 .../resources/emojis/media/video/file.mov | 0 .../resources/emojis/media/video/file.mp4 | 0 .../resources/emojis/media/video/file.webm | 0 .../resources/emojis/media/video/file.wmv | 0 .../src/main/resources/emojis/system/file.bak | 0 .../src/main/resources/emojis/system/file.crt | 0 .../src/main/resources/emojis/system/file.key | 0 .../src/main/resources/emojis/system/file.pem | 0 .../src/main/resources/emojis/system/file.pub | 0 .../src/main/resources/emojis/system/file.tmp | 0 .../filtering/dir_with_java_files/file_B.java | 0 .../filtering/dir_with_java_files/file_C.cpp | 0 .../filtering/dir_with_java_files/file_D.ts | 0 .../filtering/dir_with_java_files/file_E.java | 0 .../nested_dir_with_java_files/file_G.java | 0 .../nested_dir_with_java_files/file_H.cpp | 0 .../nested_dir_with_java_files/file_I.ts | 0 .../nested_dir_with_java_files/file_J.java | 0 .../nested_dir_with_no_java_file/file_K.cpp | 0 .../nested_dir_with_no_java_file/file_L.ts | 0 .../dir_with_no_java_file/file_M.cpp | 0 .../filtering/dir_with_no_java_file/file_N.ts | 0 .../src/main/resources/filtering/file_A.java | 0 .../src/main/java/api/Controller.java | 0 .../src/main/java/domain/ValueObject.java | 0 .../src/main/java/infra/Repository.java | 0 .../src/main/resources/application.properties | 0 .../main/resources/max_depth/level1/file1#1 | 0 .../main/resources/max_depth/level1/file1#2 | 0 .../resources/max_depth/level1/level2/file2#1 | 0 .../resources/max_depth/level1/level2/file2#2 | 0 .../max_depth/level1/level2/level3/file3#1 | 0 .../max_depth/level1/level2/level3/file3#2 | 0 .../level1/level2/level3/level4/file4#1 | 0 .../level1/level2/level3/level4/file4#2 | 0 .../resources/single_directory_child/file1 | 0 .../resources/single_directory_child/file2 | 0 .../this/is/single/directory/child/file1 | 0 .../this/is/single/directory/child/file2 | 0 .../this/is/single/directory/child/file3 | 0 .../src/main/resources/sorting/a_file | 0 .../src/main/resources/sorting/b_file | 0 .../src/main/resources/sorting/c_dir/c_file | 0 .../src/main/resources/sorting/d_dir/d_a_file | 0 .../resources/sorting/d_dir/d_b_dir/d_b_file | 0 .../src/main/resources/sorting/x_file | 0 .../src/main/resources/sorting/y_file | 0 .../src/main/resources/tree_format/file_1 | 0 .../src/main/resources/tree_format/file_2 | 0 .../resources/tree_format/subFolder/subFile_1 | 0 .../resources/tree_format/subFolder/subFile_2 | 0 pom.xml | 9 +- 235 files changed, 99 insertions(+), 50 deletions(-) delete mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.class delete mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.jar delete mode 100644 jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.log rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/pom.xml (91%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java (81%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java (90%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java (82%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java (81%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java (85%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java (86%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java (90%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java (95%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java (83%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java (53%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java (86%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/businessPlan.pdf (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/businessProject.pdf (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/cars/Ferrari.doc (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/cars/Porsche.doc (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/diyIdeas.docx (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/giftIdeas.txt (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/images/funnyCat.gif (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/images/holidays/meAtTheBeach.jpeg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/images/holidays/meAtTheZoo.jpeg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/base/images/landscape.jpeg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/file_0_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/folder_1/file_1_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/folder_1/file_1_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/folder_1/file_1_3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/folder_1/file_1_4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/folder_1/file_1_5 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_01 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_02 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_03 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_04 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_05 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_06 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_07 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_08 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_09 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_10 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_11 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_12 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_13 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_14 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_15 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_16 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_17 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_18 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_19 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_dynamic/node_modules/file_node_20 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/file_0_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_1/file_1_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_1/file_1_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_1/file_1_3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_1/file_1_4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_1/file_1_5 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_2/file_2_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_2/file_2_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_2/file_2_3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_2/file_2_4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_2/file_2_5 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_3/file_3_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_3/file_3_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_3/file_3_3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_3/file_3_4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_3/file_3_5 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_4/file_4_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_4/file_4_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_4/file_4_3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_4/file_4_4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_4/file_4_5 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_5/file_5_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_5/file_5_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_5/file_5_3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_5/file_5_4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/child_limit_static/folder_5/file_5_5 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/file_1_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/file_1_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/file_2_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/file_2_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/executables/file.apk (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/executables/file.app (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/executables/file.bin (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/executables/file.exe (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/executables/file.msi (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/executables/file2.ipa (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/libs/file.dll (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/libs/file.lib (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/applications/libs/file.so (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.7z (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.gz (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.img (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.iso (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.rar (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.tar (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/archives/file.zip (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/.gitignore (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/Dockerfile (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/Jenkinsfile (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/build_tools/build.gradle (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/build_tools/makefile (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/build_tools/package.json (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/build_tools/pom.xml (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/docker-compose.yml (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.c (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.cpp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.cs (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.css (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.htm (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.html (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.htmx (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.less (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.php (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.py (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.scss (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.sql (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/lang/file.ts (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/scripting/file.bash (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/scripting/file.bat (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/code/scripting/file.sh (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.cfg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.conf (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.csv (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.ini (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.json (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.ods (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.properties (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.xls (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.xlsx (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.xml (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.yaml (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/data/file.yml (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.doc (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.docx (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.epub (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.odt (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.pdf (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.rtf (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/doc/file.txt (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/file.unknown_extension (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/file_without_extension (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/changelog (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/changelog.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/contributing (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/contributing.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/license (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/license.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/readme (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/readme.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/roadmap (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/roadmap.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/security (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/github/security.md (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/internet/robots.txt (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/audio/file.aac (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/audio/file.flac (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/audio/file.midi (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/audio/file.mp3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/audio/file.ogg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/audio/file.wav (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.bmp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.gif (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.ico (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.jpeg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.jpg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.png (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/images/file.svg (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/video/file.avi (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/video/file.mkv (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/video/file.mov (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/video/file.mp4 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/video/file.webm (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/media/video/file.wmv (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/system/file.bak (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/system/file.crt (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/system/file.key (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/system/file.pem (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/system/file.pub (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/emojis/system/file.tmp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_java_files/file_B.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_java_files/file_C.cpp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_java_files/file_D.ts (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_java_files/file_E.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/dir_with_no_java_file/file_N.ts (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/filtering/file_A.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/line_extension/src/main/java/api/Controller.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/line_extension/src/main/java/domain/ValueObject.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/line_extension/src/main/java/infra/Repository.java (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/line_extension/src/main/resources/application.properties (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/file1#1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/file1#2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/level2/file2#1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/level2/file2#2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/level2/level3/file3#1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/level2/level3/file3#2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/single_directory_child/file1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/single_directory_child/file2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/single_directory_child/this/is/single/directory/child/file1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/single_directory_child/this/is/single/directory/child/file2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/single_directory_child/this/is/single/directory/child/file3 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/a_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/b_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/c_dir/c_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/d_dir/d_a_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/d_dir/d_b_dir/d_b_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/x_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/sorting/y_file (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/tree_format/file_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/tree_format/file_2 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/tree_format/subFolder/subFile_1 (100%) rename {jfiletreeprettyprinter-example => jfiletreeprettyprinter-examples}/src/main/resources/tree_format/subFolder/subFile_2 (100%) diff --git a/.gitignore b/.gitignore index f305b0d..5d7bc11 100644 --- a/.gitignore +++ b/.gitignore @@ -61,4 +61,5 @@ target/failsafe-reports/ .github/workflows/cache/ # Specific +.flattened-pom.xml !/src/example/resources/emojis/** diff --git a/assets/project-structure.png b/assets/project-structure.png index 68b8e4b39f8c84563337b986918fb1ef8978330d..80064bfcb67c0a5885153098f2fb377af7e0cb9b 100644 GIT binary patch literal 599208 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%0DyuVo-EK9B0hJRR$je`1 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

qpamGPKc?G=;Sjh6NC=D%%Rc&~gLm#Xzz1%6BZ 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⁣Iato%p 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

-4hspR3ixB#DlBUlo5 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ξM0mu9n}J_~gd$JEscb16W2&BcSLAtFLQEBP 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μ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 a8wl)o%L^IJlHGxK2qY!sP9>exyZ(Rl#9x;H literal 465155 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

585nI4=_?devr@spO|G=T33~ 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⋘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 diff --git a/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java index 5406805..7a9b242 100644 --- a/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java +++ b/jfiletreeprettyprinter-cli/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/ManifestVersionProvider.java @@ -8,7 +8,6 @@ class ManifestVersionProvider implements IVersionProvider { @Override public String[] getVersion() throws Exception { - String implTitle = null; String implVersion = null; String projectDesc = null; String commitId = null; @@ -19,7 +18,6 @@ public String[] getVersion() throws Exception { try (InputStream is = getClass().getResourceAsStream("/META-INF/MANIFEST.MF")) { if (is != null) { Manifest manifest = new Manifest(is); - implTitle = manifest.getMainAttributes().getValue("Implementation-Title"); implVersion = manifest.getMainAttributes().getValue("Implementation-Version"); projectDesc = manifest.getMainAttributes().getValue("Project-Desc"); commitId = manifest.getMainAttributes().getValue("Commit-Id"); @@ -30,7 +28,7 @@ public String[] getVersion() throws Exception { } return new String[] { - valueOrUnknown(implTitle) + " " + valueOrUnknown(implVersion), + "JFileTreePrettyPrinter " + valueOrUnknown(implVersion), valueOrUnknown(projectDesc), "Repository: " + valueOrUnknown(scmUrl), "Commit: " + valueOrUnknown(commitId) + " (" + valueOrUnknown(commitTime) + ")", diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml index cd5948b..22d569e 100644 --- a/jfiletreeprettyprinter-core/pom.xml +++ b/jfiletreeprettyprinter-core/pom.xml @@ -32,8 +32,29 @@ - - + + org.codehaus.mojo + flatten-maven-plugin + + ossrh + + + + flatten + process-resources + + flatten + + + + flatten.clean + clean + + clean + + + + diff --git a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java index ffaee8f..a82f7d3 100644 --- a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java +++ b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/DefaultFileTreePrettyPrinter.java @@ -20,6 +20,7 @@ public DefaultFileTreePrettyPrinter(PathToTreeScanner scanner, TreeEntryRenderer @Override public String prettyPrint(Path path) { Objects.requireNonNull(path, "path cannot be null"); + path = path.toAbsolutePath().normalize(); var tree = scanner.scan(path); return renderer.renderTree(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.class deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.jar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.log b/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.log deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-example/pom.xml b/jfiletreeprettyprinter-examples/pom.xml similarity index 91% rename from jfiletreeprettyprinter-example/pom.xml rename to jfiletreeprettyprinter-examples/pom.xml index 6a24e2d..725cf13 100644 --- a/jfiletreeprettyprinter-example/pom.xml +++ b/jfiletreeprettyprinter-examples/pom.xml @@ -7,7 +7,7 @@ ${revision} - jfiletreeprettyprinter-example + jfiletreeprettyprinter-examples diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java similarity index 81% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java index d47752f..c43c1a6 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java @@ -6,7 +6,7 @@ public class BasicUsage { public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.createDefault(); - var tree = prettyPrinter.prettyPrint("src/example/resources/base"); + var tree = prettyPrinter.prettyPrint("src/main/resources/base"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java similarity index 90% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java index 973764c..520b6e9 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java @@ -14,7 +14,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/child_limit_dynamic"); + var tree = prettyPrinter.prettyPrint("src/main/resources/child_limit_dynamic"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java similarity index 82% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java index f8d5e06..3e64480 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java @@ -8,7 +8,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withChildLimit(3)) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/child_limit_static"); + var tree = prettyPrinter.prettyPrint("src/main/resources/child_limit_static"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java similarity index 81% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java index d9373aa..a278dd6 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java @@ -8,7 +8,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withCompactDirectories(true)) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/single_directory_child"); + var tree = prettyPrinter.prettyPrint("src/main/resources/single_directory_child"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java similarity index 85% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java index 925ea0a..248318b 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java @@ -8,7 +8,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withDefaultEmojis()) // or withEmojis(EmojiMapping) for custom mapping .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/emojis"); + var tree = prettyPrinter.prettyPrint("src/main/resources/emojis"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java similarity index 86% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java index 5e83379..576aeba 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java @@ -9,7 +9,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withTreeFormat(TreeFormats.CLASSIC_ASCII)) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/tree_format"); + var tree = prettyPrinter.prettyPrint("src/main/resources/tree_format"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java similarity index 90% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java index be80241..fc60a74 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java @@ -17,7 +17,7 @@ public static void main(String[] args) { ) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/filtering"); + var tree = prettyPrinter.prettyPrint("src/main/resources/filtering"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java similarity index 95% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java index f8500c1..17bfe94 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java @@ -9,7 +9,7 @@ public class LineExtension { public static void main(String[] args) { - var printedPath = Path.of("src/example/resources/line_extension"); + var printedPath = Path.of("src/main/resources/line_extension"); Function lineExtension = LineExtensions.builder() .add(PathMatchers.hasRelativePathMatchingGlob(printedPath, "src/main/java/api"), "\t\t\t// All API code: controllers, etc.") diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java similarity index 83% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java index d80c8a6..74f6ba3 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java @@ -8,7 +8,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withMaxDepth(3)) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/max_depth"); + var tree = prettyPrinter.prettyPrint("src/main/resources/max_depth"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java similarity index 53% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java index d26ff72..7036b22 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java @@ -25,28 +25,44 @@ public static void main(String[] args) { /* * The folder to pretty print (= the JFileTreePrettyPrint project root) */ - var projectFolder = Path.of("."); + var projectFolder = Path.of(".."); /* * Filter for directories (visit and display only folders that pass this filter) */ - var dirFilter = PathMatchers.noneOf( - // Exclude these folders from traversal - PathMatchers.hasNameStartingWith("."), - PathMatchers.hasRelativePathMatchingGlob(projectFolder, "src/example"), - PathMatchers.hasRelativePathMatchingGlob(projectFolder, "src/test"), - PathMatchers.hasRelativePathMatchingGlob(projectFolder, "target") + var dirFilter = PathMatchers.anyOf( + PathMatchers.hasAnyDescendantMatching(PathMatchers.hasName("FileTreePrettyPrinter.java")), + PathMatchers.noneOf( + // Exclude these folders from traversal + PathMatchers.hasNameStartingWith("."), + PathMatchers.hasRelativePathMatchingGlob(projectFolder, "target"), + PathMatchers.hasRelativePathMatchingGlob(projectFolder, "src"), + PathMatchers.hasRelativePathMatchingGlob(projectFolder, "*/src/**") + ) ); - /* * Filter for files (display only files that pass this filter) * Note: files for which the parent folder does not match the directory filter * are obviously not displayed, even if they pass the file filter. */ - var fileFilter = PathMatchers.noneOf( +// var fileFilter = PathMatchers.noneOf( +// PathMatchers.hasNameStartingWith(".") +// ); - // Hide files with names starting with "." - PathMatchers.hasNameStartingWith(".") + var fileFilter = PathMatchers.anyOf( + PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-core/**/FileTreePrettyPrinter.java"), + PathMatchers.noneOf( + PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-core/**"), + PathMatchers.hasNameStartingWith(".") + ) + ); + + PathMatchers.ifMatchesThenElse( + PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter"), + PathMatchers.hasName("FileTreePrettyPrinter.java"), + PathMatchers.noneOf( + PathMatchers.hasNameStartingWith(".") + ) ); /* @@ -54,10 +70,9 @@ public static void main(String[] args) { */ var childLimitFunction = ChildLimits.builder() // Hide all files under renderer and scanner packages - .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter/options"), 0) - .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer"), 0) - .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter/scanner"), 0) - .add(PathMatchers.hasAbsolutePathMatchingGlob("**/io/github/computerdaddyguy/jfiletreeprettyprinter"), 4) + .add(PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-cli"), 0) + .add(PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-examples"), 0) + .add(PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-core"), 1) .build(); /* @@ -65,19 +80,26 @@ public static void main(String[] args) { */ Function lineExtension = LineExtensions.builder() .add(PathMatchers.hasName("project-structure.png"), "\t// This image") - .add(PathMatchers.hasName("FileTreePrettyPrinter.java"), "\t// Main entry point") .add(PathMatchers.hasName("README.md"), "\t\t// You're reading at this!") + .add(PathMatchers.hasName("FileTreePrettyPrinter.java"), "\t// Lib main entry point") + .add(PathMatchers.hasName("jfiletreeprettyprinter-cli"), "\t// Everything to build the executable") + .add(PathMatchers.hasName("jfiletreeprettyprinter-core"), "\t// The Java lib") + .add(PathMatchers.hasName("jfiletreeprettyprinter-examples"), "\t// Some examples") .addLineBreak(PathMatchers.hasRelativePathMatchingGlob(projectFolder, "src/main/java")) .build(); /* - * Sort all paths by directory first (with highest precedence), - * then "FileTreePrettyPrinter.java" has precedence "-100". - * All other files have default precedence "0", and are then sorted alphabetically by default. + * Sort all paths setting a precedence value. Default precedence is "0", lower values have higher precedence. + * Items having the same precedence value are then sorted alphabetically by default. */ Comparator pathComparator = PathSorts.builder() - .addFirst(PathMatchers.isDirectory()) - .add(PathMatchers.hasName("FileTreePrettyPrinter.java"), -100) // Default precedence is "0" + // + .add(PathMatchers.hasName("jfiletreeprettyprinter-core"), -100) + .add(PathMatchers.hasName("jfiletreeprettyprinter-examples"), -90) + .add(PathMatchers.hasName("jfiletreeprettyprinter-cli"), -80) + .add(PathMatchers.hasName("assets"), -70) + .add(PathMatchers.hasName("docs"), -60) + .add(PathMatchers.isDirectory(), -1) .build(); /* @@ -108,18 +130,19 @@ public static void main(String[] args) { ================================ 📂 JFileTreePrettyPrinter/ + ├─ 📂 jfiletreeprettyprinter-core/ // The Java lib + │ ├─ 📂 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ + │ │ └─ ☕ FileTreePrettyPrinter.java // Lib main entry point + │ └─ ... + ├─ 📂 jfiletreeprettyprinter-examples/ // Some examples + │ └─ ... + ├─ 📂 jfiletreeprettyprinter-cli/ // Everything to build the executable + │ └─ ... ├─ 📂 assets/ │ └─ 🖼️ project-structure.png // This image - ├─ 📂 src/main/java/ - │ └─ 📂 io/github/computerdaddyguy/jfiletreeprettyprinter/ - │ ├─ 📂 options/ - │ │ └─ ... - │ ├─ 📂 renderer/ - │ │ └─ ... - │ ├─ 📂 scanner/ - │ │ └─ ... - │ ├─ ☕ FileTreePrettyPrinter.java // Main entry point - │ └─ ... + ├─ 📂 docs/ + │ ├─ 📝 How-to-build-a-native-executable-locally.md + │ └─ 📝 Release-process.md ├─ 🆕 CHANGELOG.md ├─ 🤝 CONTRIBUTING.md ├─ ⚖️ LICENSE @@ -127,10 +150,8 @@ public static void main(String[] args) { ├─ 🗺️ ROADMAP.md ├─ 🛡️ SECURITY.md ├─ 🛠️ pom.xml - ├─ 📝 release_process.md └─ 📜 runMutationTests.sh - */ } diff --git a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java similarity index 86% rename from jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java rename to jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java index 8a3973e..4a9e7eb 100644 --- a/jfiletreeprettyprinter-example/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java @@ -9,7 +9,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.sort(PathSorts.DIRECTORY_FIRST)) .build(); - var tree = prettyPrinter.prettyPrint("src/example/resources/sorting"); + var tree = prettyPrinter.prettyPrint("src/main/resources/sorting"); System.out.println(tree); } diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/businessPlan.pdf b/jfiletreeprettyprinter-examples/src/main/resources/base/businessPlan.pdf similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/businessPlan.pdf rename to jfiletreeprettyprinter-examples/src/main/resources/base/businessPlan.pdf diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/businessProject.pdf b/jfiletreeprettyprinter-examples/src/main/resources/base/businessProject.pdf similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/businessProject.pdf rename to jfiletreeprettyprinter-examples/src/main/resources/base/businessProject.pdf diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/cars/Ferrari.doc b/jfiletreeprettyprinter-examples/src/main/resources/base/cars/Ferrari.doc similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/cars/Ferrari.doc rename to jfiletreeprettyprinter-examples/src/main/resources/base/cars/Ferrari.doc diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/cars/Porsche.doc b/jfiletreeprettyprinter-examples/src/main/resources/base/cars/Porsche.doc similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/cars/Porsche.doc rename to jfiletreeprettyprinter-examples/src/main/resources/base/cars/Porsche.doc diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/diyIdeas.docx b/jfiletreeprettyprinter-examples/src/main/resources/base/diyIdeas.docx similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/diyIdeas.docx rename to jfiletreeprettyprinter-examples/src/main/resources/base/diyIdeas.docx diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/giftIdeas.txt b/jfiletreeprettyprinter-examples/src/main/resources/base/giftIdeas.txt similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/giftIdeas.txt rename to jfiletreeprettyprinter-examples/src/main/resources/base/giftIdeas.txt diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/funnyCat.gif b/jfiletreeprettyprinter-examples/src/main/resources/base/images/funnyCat.gif similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/images/funnyCat.gif rename to jfiletreeprettyprinter-examples/src/main/resources/base/images/funnyCat.gif diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheBeach.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/base/images/holidays/meAtTheBeach.jpeg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheBeach.jpeg rename to jfiletreeprettyprinter-examples/src/main/resources/base/images/holidays/meAtTheBeach.jpeg diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheZoo.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/base/images/holidays/meAtTheZoo.jpeg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/images/holidays/meAtTheZoo.jpeg rename to jfiletreeprettyprinter-examples/src/main/resources/base/images/holidays/meAtTheZoo.jpeg diff --git a/jfiletreeprettyprinter-example/src/main/resources/base/images/landscape.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/base/images/landscape.jpeg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/base/images/landscape.jpeg rename to jfiletreeprettyprinter-examples/src/main/resources/base/images/landscape.jpeg diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/file_0_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/file_0_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/file_0_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/file_0_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_2 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_2 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_3 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_3 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_4 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_4 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_5 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_5 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/folder_1/file_1_5 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/folder_1/file_1_5 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_01 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_01 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_01 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_01 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_02 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_02 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_02 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_02 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_03 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_03 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_03 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_03 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_04 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_04 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_04 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_04 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_05 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_05 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_05 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_05 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_06 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_06 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_06 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_06 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_07 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_07 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_07 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_07 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_08 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_08 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_08 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_08 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_09 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_09 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_09 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_09 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_10 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_10 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_10 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_10 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_11 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_11 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_11 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_11 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_12 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_12 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_12 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_12 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_13 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_13 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_13 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_13 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_14 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_14 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_14 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_14 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_15 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_15 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_15 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_15 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_16 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_16 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_16 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_16 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_17 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_17 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_17 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_17 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_18 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_18 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_18 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_18 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_19 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_19 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_19 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_19 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_20 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_20 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_dynamic/node_modules/file_node_20 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_dynamic/node_modules/file_node_20 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/file_0_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/file_0_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/file_0_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/file_0_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_2 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_2 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_3 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_3 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_4 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_4 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_5 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_5 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_1/file_1_5 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_1/file_1_5 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_2 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_2 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_3 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_3 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_4 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_4 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_5 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_5 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_2/file_2_5 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_2/file_2_5 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_2 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_2 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_3 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_3 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_4 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_4 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_5 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_5 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_3/file_3_5 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_3/file_3_5 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_2 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_2 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_3 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_3 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_4 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_4 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_5 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_5 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_4/file_4_5 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_4/file_4_5 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_1 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_1 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_2 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_2 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_3 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_3 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_4 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_4 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_5 b/jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_5 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/child_limit_static/folder_5/file_5_5 rename to jfiletreeprettyprinter-examples/src/main/resources/child_limit_static/folder_5/file_5_5 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_1 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/file_1_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_1 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/file_1_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_2 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/file_1_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/file_1_2 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/file_1_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_1 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/file_2_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_1 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/file_2_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_2 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/file_2_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/file_2_2 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/file_2_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/file_3_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 b/jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 rename to jfiletreeprettyprinter-examples/src/main/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.apk b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.apk similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.apk rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.apk diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.app b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.app similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.app rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.app diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.bin b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.bin similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.bin rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.bin diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.exe b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.exe similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.exe rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.exe diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.msi b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.msi similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file.msi rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.msi diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file2.ipa b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file2.ipa similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/executables/file2.ipa rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file2.ipa diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.dll b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.dll similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.dll rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.dll diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.lib b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.lib similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.lib rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.lib diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.so b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.so similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/applications/libs/file.so rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.so diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.7z b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.7z similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.7z rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.7z diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.gz b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.gz similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.gz rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.gz diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.img b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.img similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.img rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.img diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.iso b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.iso similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.iso rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.iso diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.rar b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.rar similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.rar rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.rar diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.tar b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.tar similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.tar rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.tar diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.zip b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.zip similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/archives/file.zip rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.zip diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/.gitignore b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/.gitignore similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/.gitignore rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/.gitignore diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/Dockerfile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Dockerfile similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/Dockerfile rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Dockerfile diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/Jenkinsfile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Jenkinsfile similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/Jenkinsfile rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Jenkinsfile diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/build.gradle b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/build.gradle similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/build.gradle rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/build.gradle diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/makefile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/makefile similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/makefile rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/makefile diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/package.json b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/package.json similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/package.json rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/package.json diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/pom.xml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/pom.xml similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/build_tools/pom.xml rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/pom.xml diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/docker-compose.yml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/docker-compose.yml similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/docker-compose.yml rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/docker-compose.yml diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.c b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.c similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.c rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.c diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cpp b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cpp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cpp rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cpp diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cs b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cs similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.cs rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cs diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.css b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.css similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.css rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.css diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htm b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htm similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htm rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htm diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.html b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.html similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.html rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.html diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htmx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htmx similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.htmx rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htmx diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.java b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.java rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.less b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.less similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.less rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.less diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.php b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.php similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.php rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.php diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.py b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.py similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.py rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.py diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.scss b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.scss similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.scss rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.scss diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.sql b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.sql similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.sql rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.sql diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.ts b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.ts similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/lang/file.ts rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.ts diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bash b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bash similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bash rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bash diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bat b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bat similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.bat rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bat diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.sh b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.sh similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/code/scripting/file.sh rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.sh diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.cfg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.cfg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.cfg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.cfg diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.conf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.conf similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.conf rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.conf diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.csv b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.csv similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.csv rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.csv diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ini b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ini similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ini rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ini diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.json b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.json similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.json rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.json diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ods b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ods similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.ods rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ods diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.properties b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.properties similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.properties rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.properties diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xls b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xls similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xls rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xls diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xlsx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xlsx similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xlsx rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xlsx diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xml similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.xml rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xml diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yaml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yaml similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yaml rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yaml diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yml similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/data/file.yml rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yml diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.doc b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.doc similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.doc rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.doc diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.docx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.docx similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.docx rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.docx diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.epub b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.epub similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.epub rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.epub diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.odt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.odt similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.odt rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.odt diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.pdf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.pdf similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.pdf rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.pdf diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.rtf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.rtf similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.rtf rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.rtf diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.txt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.txt similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/doc/file.txt rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.txt diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/file.unknown_extension b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.unknown_extension similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/file.unknown_extension rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.unknown_extension diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/file_without_extension b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file_without_extension similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/file_without_extension rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file_without_extension diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/changelog.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/contributing.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/license.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/readme.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/roadmap.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security.md similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/github/security.md rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security.md diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/internet/robots.txt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/robots.txt similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/internet/robots.txt rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/robots.txt diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.aac b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.aac similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.aac rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.aac diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.flac b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.flac similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.flac rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.flac diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.midi b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.midi similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.midi rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.midi diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.mp3 b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.mp3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.mp3 rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.mp3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.ogg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.ogg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.ogg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.ogg diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.wav b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.wav similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/audio/file.wav rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.wav diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.bmp b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.bmp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.bmp rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.bmp diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.gif b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.gif similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.gif rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.gif diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.ico b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.ico similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.ico rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.ico diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpeg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpeg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpeg diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.jpg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpg diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.png b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.png similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.png rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.png diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.svg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.svg similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/images/file.svg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.svg diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.avi b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.avi similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.avi rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.avi diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mkv b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mkv similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mkv rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mkv diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mov b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mov similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mov rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mov diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mp4 b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mp4 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.mp4 rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mp4 diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.webm b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.webm similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.webm rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.webm diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.wmv b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.wmv similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/media/video/file.wmv rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.wmv diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.bak b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.bak similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.bak rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.bak diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.crt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.crt similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.crt rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.crt diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.key b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.key similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.key rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.key diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pem b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pem similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pem rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pem diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pub b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pub similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.pub rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pub diff --git a/jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.tmp b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.tmp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/emojis/system/file.tmp rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.tmp diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_B.java b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_B.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_B.java rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_B.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_C.cpp b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_C.cpp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_C.cpp rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_C.cpp diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_D.ts b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_D.ts similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_D.ts rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_D.ts diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_E.java b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_E.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_java_files/file_E.java rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_java_files/file_E.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_no_java_file/file_M.cpp diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_N.ts b/jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_no_java_file/file_N.ts similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/dir_with_no_java_file/file_N.ts rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/dir_with_no_java_file/file_N.ts diff --git a/jfiletreeprettyprinter-example/src/main/resources/filtering/file_A.java b/jfiletreeprettyprinter-examples/src/main/resources/filtering/file_A.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/filtering/file_A.java rename to jfiletreeprettyprinter-examples/src/main/resources/filtering/file_A.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/api/Controller.java b/jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/java/api/Controller.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/api/Controller.java rename to jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/java/api/Controller.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/domain/ValueObject.java b/jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/java/domain/ValueObject.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/domain/ValueObject.java rename to jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/java/domain/ValueObject.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/infra/Repository.java b/jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/java/infra/Repository.java similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/java/infra/Repository.java rename to jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/java/infra/Repository.java diff --git a/jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/resources/application.properties b/jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/resources/application.properties similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/line_extension/src/main/resources/application.properties rename to jfiletreeprettyprinter-examples/src/main/resources/line_extension/src/main/resources/application.properties diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#1 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/file1#1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#1 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/file1#1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#2 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/file1#2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/file1#2 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/file1#2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#1 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/file2#1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#1 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/file2#1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#2 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/file2#2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/file2#2 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/file2#2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#1 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/file3#1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#1 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/file3#1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#2 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/file3#2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/file3#2 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/file3#2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/level4/file4#1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 b/jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 rename to jfiletreeprettyprinter-examples/src/main/resources/max_depth/level1/level2/level3/level4/file4#2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file1 b/jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/file1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file1 rename to jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/file1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file2 b/jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/file2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/single_directory_child/file2 rename to jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/file2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file1 b/jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/this/is/single/directory/child/file1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file1 rename to jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/this/is/single/directory/child/file1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file2 b/jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/this/is/single/directory/child/file2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file2 rename to jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/this/is/single/directory/child/file2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file3 b/jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/this/is/single/directory/child/file3 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/single_directory_child/this/is/single/directory/child/file3 rename to jfiletreeprettyprinter-examples/src/main/resources/single_directory_child/this/is/single/directory/child/file3 diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/a_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/a_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/a_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/a_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/b_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/b_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/b_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/b_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/c_dir/c_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/c_dir/c_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/c_dir/c_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/c_dir/c_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_a_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/d_dir/d_a_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_a_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/d_dir/d_a_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_b_dir/d_b_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/d_dir/d_b_dir/d_b_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/d_dir/d_b_dir/d_b_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/d_dir/d_b_dir/d_b_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/x_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/x_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/x_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/x_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/sorting/y_file b/jfiletreeprettyprinter-examples/src/main/resources/sorting/y_file similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/sorting/y_file rename to jfiletreeprettyprinter-examples/src/main/resources/sorting/y_file diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/file_1 b/jfiletreeprettyprinter-examples/src/main/resources/tree_format/file_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/tree_format/file_1 rename to jfiletreeprettyprinter-examples/src/main/resources/tree_format/file_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/file_2 b/jfiletreeprettyprinter-examples/src/main/resources/tree_format/file_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/tree_format/file_2 rename to jfiletreeprettyprinter-examples/src/main/resources/tree_format/file_2 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_1 b/jfiletreeprettyprinter-examples/src/main/resources/tree_format/subFolder/subFile_1 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_1 rename to jfiletreeprettyprinter-examples/src/main/resources/tree_format/subFolder/subFile_1 diff --git a/jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_2 b/jfiletreeprettyprinter-examples/src/main/resources/tree_format/subFolder/subFile_2 similarity index 100% rename from jfiletreeprettyprinter-example/src/main/resources/tree_format/subFolder/subFile_2 rename to jfiletreeprettyprinter-examples/src/main/resources/tree_format/subFolder/subFile_2 diff --git a/pom.xml b/pom.xml index 85d3f15..df0bf77 100644 --- a/pom.xml +++ b/pom.xml @@ -15,7 +15,7 @@ jfiletreeprettyprinter-core jfiletreeprettyprinter-cli - jfiletreeprettyprinter-example + jfiletreeprettyprinter-examples @@ -67,6 +67,7 @@ 3.2.7 0.11.1 9.0.2 + 1.7.3 @@ -158,6 +159,12 @@ pitest-maven ${pitest-maven.version} + + + org.codehaus.mojo + flatten-maven-plugin + ${flatten-maven-plugin.version} + From 1711c39ede820abd92094cb74325492d0af5456e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:19:32 +0100 Subject: [PATCH 30/57] Fix GH actions for multi-module --- .github/workflows/create-github-release.yaml | 4 ++-- .github/workflows/publish-maven-release.yml | 6 +++--- .github/workflows/snapshot.yml | 2 +- .github/workflows/sonarcloud.yml | 2 +- pom.xml | 8 ++++++++ 5 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index af26184..524760b 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -54,9 +54,9 @@ jobs: OS_NAME=${{ matrix.os }} if [[ "$OS_NAME" == "windows-latest" ]]; then - BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter.exe") + BIN_PATH=$(find jfiletreeprettyprinter-cli/target -type f -name "jfiletreeprettyprinter.exe") else - BIN_PATH=$(find target -type f -name "jfiletreeprettyprinter") + BIN_PATH=$(find jfiletreeprettyprinter-cli/target -type f -name "jfiletreeprettyprinter") fi echo "Found binary: $BIN_PATH" diff --git a/.github/workflows/publish-maven-release.yml b/.github/workflows/publish-maven-release.yml index f8d1d66..042070a 100644 --- a/.github/workflows/publish-maven-release.yml +++ b/.github/workflows/publish-maven-release.yml @@ -50,7 +50,7 @@ jobs: - name: Update pom.xml to release version run: | - mvn versions:set -DnewVersion=${{ env.RELEASE_VERSION }} -B -q + mvn versions:set-property -Dproperty=revision -DnewVersion=${{ env.RELEASE_VERSION }} -B -q git commit -am "Set version to ${{ env.RELEASE_VERSION }}" || echo "No changes" git push origin HEAD:main env: @@ -60,7 +60,7 @@ jobs: run: mvn clean verify -B - name: Publish RELEASE to Maven Central - run: mvn deploy -P release -B -DskipTests + run: mvn deploy -pl jfiletreeprettyprinter-core -P release -B -DskipTests env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} @@ -73,6 +73,6 @@ jobs: NEXT_PATCH=$((PATCH+1)) NEXT_VERSION="$MAJOR.$MINOR.$NEXT_PATCH-SNAPSHOT" echo "NEXT_VERSION=$NEXT_VERSION" >> $GITHUB_ENV - mvn versions:set -DnewVersion=$NEXT_VERSION -B -q + mvn versions:set-property -Dproperty=revision -DnewVersion=$NEXT_VERSION -B -q git commit -am "Set version to $NEXT_VERSION" || echo "No changes" git push origin HEAD:main diff --git a/.github/workflows/snapshot.yml b/.github/workflows/snapshot.yml index 7d24ed6..e7f3028 100644 --- a/.github/workflows/snapshot.yml +++ b/.github/workflows/snapshot.yml @@ -37,7 +37,7 @@ jobs: - name: Publish SNAPSHOT to Maven Central run: | - mvn -P release --batch-mode deploy -am -DskipTests + mvn -pl jfiletreeprettyprinter-core -P release --batch-mode deploy -am -DskipTests env: MAVEN_USERNAME: ${{ secrets.OSSRH_USERNAME }} MAVEN_PASSWORD: ${{ secrets.OSSRH_PASSWORD }} diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 14992b8..2166a05 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,4 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.exclusions=src/test/** -Dsonar.coverage.exclusions=/src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file diff --git a/pom.xml b/pom.xml index df0bf77..1567eed 100644 --- a/pom.xml +++ b/pom.xml @@ -69,6 +69,14 @@ 9.0.2 1.7.3 + + + **/src/test/** + + + **/src/test/** + + From 87dc5dee7b2291788895a2e50afd59b6db4d9b42 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:30:19 +0100 Subject: [PATCH 31/57] Adapt pom.xml for maven central --- jfiletreeprettyprinter-core/pom.xml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml index 22d569e..c9de560 100644 --- a/jfiletreeprettyprinter-core/pom.xml +++ b/jfiletreeprettyprinter-core/pom.xml @@ -11,6 +11,12 @@ jar + https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter + + scm:git:git://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter.git + scm:git:ssh://github.com:ComputerDaddyGuy/JFileTreePrettyPrinter.git + https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter + @@ -37,6 +43,7 @@ flatten-maven-plugin ossrh + true From d48c1d9ea6a646ff37414df8919e6665261e161e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:35:07 +0100 Subject: [PATCH 32/57] Update readme resource urls --- README.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 94ea62a..da3fb61 100644 --- a/README.md +++ b/README.md @@ -21,10 +21,10 @@ Supports various [options](#customization-options) to customize the directories > [!NOTE] > JFileTreePrettyPrinter is perfect to explain your project structure! -> See ProjectStructure.java to read the code that generated the tree from the below picture. +> See ProjectStructure.java to read the code that generated the tree from the below picture.

- JFileTreePrettyPrint project structure, using JFileTreePrettyPrint + JFileTreePrettyPrint project structure, using JFileTreePrettyPrint

> [!IMPORTANT] From ec6fb6486f8c0928df60a4afc66e28a04b2755ba Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:36:06 +0100 Subject: [PATCH 33/57] GH: testing actions --- .github/workflows/create-github-release.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/create-github-release.yaml b/.github/workflows/create-github-release.yaml index 524760b..957cb29 100644 --- a/.github/workflows/create-github-release.yaml +++ b/.github/workflows/create-github-release.yaml @@ -22,7 +22,7 @@ jobs: echo "Tag is on main" else echo "Tag is NOT on main, skipping" - exit 1 + #exit 1 fi build-native: From 97f7924a8014bd235ac2a1b0c052d10749f398c3 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:39:56 +0100 Subject: [PATCH 34/57] Prepare for v0.1.1 --- CHANGELOG.md | 2 +- README.md | 6 +++--- ROADMAP.md | 2 +- pom.xml | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d2f2ef0..f1e617a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,7 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [0.1.1] - 2025-10-17 - Native executable ### Added -- Work in progress: run JFileTreePrettyPrinter using command line /!\ not yet fully functional /!\ +- Run JFileTreePrettyPrinter using command line (options in external file) - Native executable attachment to the Github release --- diff --git a/README.md b/README.md index da3fb61..5a9f5d9 100644 --- a/README.md +++ b/README.md @@ -54,14 +54,14 @@ For Maven, import this dependency to your `pom.xml`: ```xml io.github.computerdaddyguy - jfiletreeprettyprinter - 0.1.0 + jfiletreeprettyprinter-core + 0.1.1 ``` For Gradle: ```groovy -implementation "io.github.computerdaddyguy:jfiletreeprettyprinter:0.1.0" +implementation "io.github.computerdaddyguy:jfiletreeprettyprinter-core:0.1.1" ``` # Basic usage diff --git a/ROADMAP.md b/ROADMAP.md index 2d0eaff..3bb4e06 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -33,7 +33,7 @@ ## To do - [ ] Gather feedback -- [ ] Use as command line (options as arguments of provided in external file) +- [x] Use as command line (options as arguments of provided in external file) - [x] Executable file distributed with release files in Github ## Backlog / To analyze / To implement if requested diff --git a/pom.xml b/pom.xml index 1567eed..ae6641c 100644 --- a/pom.xml +++ b/pom.xml @@ -39,7 +39,7 @@ - 0.1.1-SNAPSHOT + 0.1.1 21 21 From 497c54a2f0d4fdbdabd962fc1280425ae3ca5457 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 22:45:29 +0100 Subject: [PATCH 35/57] Prepare for v0.1.1 --- .gitignore | 2 +- .../src/test/resources/emojis/code/lang/file.class | 0 .../src/test/resources/emojis/code/lang/file.jar | 0 .../src/test/resources/emojis/system/file.log | 0 .../src/main/resources/emojis/code/lang/file.class | 0 .../src/main/resources/emojis/code/lang/file.jar | 0 .../src/main/resources/emojis/system/file.log | 0 7 files changed, 1 insertion(+), 1 deletion(-) create mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.class create mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.jar create mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.log create mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.class create mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.jar create mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.log diff --git a/.gitignore b/.gitignore index 5d7bc11..dbf0a93 100644 --- a/.gitignore +++ b/.gitignore @@ -62,4 +62,4 @@ target/failsafe-reports/ # Specific .flattened-pom.xml -!/src/example/resources/emojis/** +!**/src/*/resources/emojis/** diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.class new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.jar new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.log b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.log new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.class new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.jar new file mode 100644 index 0000000..e69de29 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.log b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.log new file mode 100644 index 0000000..e69de29 From a85a421d85375832d77b15986062422167700f05 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:01:16 +0100 Subject: [PATCH 36/57] Fix Maven release GH action --- jfiletreeprettyprinter-core/pom.xml | 15 ++++++++++++++- pom.xml | 23 ----------------------- 2 files changed, 14 insertions(+), 24 deletions(-) diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml index c9de560..be95619 100644 --- a/jfiletreeprettyprinter-core/pom.xml +++ b/jfiletreeprettyprinter-core/pom.xml @@ -11,7 +11,21 @@ jar + JFileTreePrettyPrinter + A lightweight and flexible Java library with a native CLI to pretty-print directory structures - ideal for documentation, project overviews, or CLI tools. https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter + + + The Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + + + + + Samuel SCHNEGG + samuel.schnegg@gmail.com + + scm:git:git://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter.git scm:git:ssh://github.com:ComputerDaddyGuy/JFileTreePrettyPrinter.git @@ -35,7 +49,6 @@ - diff --git a/pom.xml b/pom.xml index ae6641c..968b58a 100644 --- a/pom.xml +++ b/pom.xml @@ -8,9 +8,6 @@ ${revision} pom - JFileTreePrettyPrinter - A lightweight and flexible Java library with a native CLI to pretty-print directory structures - ideal for documentation, project overviews, or CLI tools. - https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter jfiletreeprettyprinter-core @@ -18,26 +15,6 @@ jfiletreeprettyprinter-examples - - - The Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - - - - - - Samuel SCHNEGG - samuel.schnegg@gmail.com - - - - - scm:git:git://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter.git - scm:git:ssh://github.com:ComputerDaddyGuy/JFileTreePrettyPrinter.git - https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter - - 0.1.1 From c9b2266d1d532497abbc8a3985b76622c6f7de4e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:21:05 +0100 Subject: [PATCH 37/57] Re-adapt sonar test exclusions --- .github/workflows/sonarcloud.yml | 2 +- pom.xml | 8 -------- 2 files changed, 1 insertion(+), 9 deletions(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 2166a05..63d3273 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,4 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.exclusions=**/src/test/** -Dsonar.coverage.exclusions=**/src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file diff --git a/pom.xml b/pom.xml index 968b58a..d4c5742 100644 --- a/pom.xml +++ b/pom.xml @@ -45,14 +45,6 @@ 0.11.1 9.0.2 1.7.3 - - - - **/src/test/** - - - **/src/test/** - From dda07c08ade9fbf08c3378c0ee0ce73867f1515d Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:26:58 +0100 Subject: [PATCH 38/57] Re-adapt sonar test exclusions --- .github/workflows/sonarcloud.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 63d3273..6fffd00 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,4 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.exclusions=**/src/test/** -Dsonar.coverage.exclusions=**/src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.exclusions=src/test/** -Dsonar.coverage.exclusions=src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file From 1fa222febde275478390488cdbe3833f399ae6df Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:38:07 +0100 Subject: [PATCH 39/57] Re-adapt sonar test exclusions --- .github/workflows/sonarcloud.yml | 2 +- sonar-project.properties | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 sonar-project.properties diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 6fffd00..801f020 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,4 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar -Dsonar.host.url="https://sonarcloud.io" -Dsonar.exclusions=src/test/** -Dsonar.coverage.exclusions=src/test/** -Dsonar.organization=computerdaddyguy -Dsonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter \ No newline at end of file + run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ No newline at end of file diff --git a/sonar-project.properties b/sonar-project.properties new file mode 100644 index 0000000..39c644f --- /dev/null +++ b/sonar-project.properties @@ -0,0 +1,7 @@ +sonar.organization=computerdaddyguy +sonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter +sonar.host.url=https://sonarcloud.io + +# Exclude test sources from analysis and coverage +sonar.exclusions=*/src/test/java/** +sonar.coverage.exclusions=*/src/test/java/** From e3539e473087c22c0f1acbc79e7148061daa7089 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:43:29 +0100 Subject: [PATCH 40/57] Re-adapt sonar test exclusions --- pom.xml | 11 +++++++++++ sonar-project.properties | 7 ------- 2 files changed, 11 insertions(+), 7 deletions(-) delete mode 100644 sonar-project.properties diff --git a/pom.xml b/pom.xml index d4c5742..6f4e849 100644 --- a/pom.xml +++ b/pom.xml @@ -46,6 +46,17 @@ 9.0.2 1.7.3 + + computerdaddyguy + ComputerDaddyGuy_JFileTreePrettyPrinter + https://sonarcloud.io + + */src/test/java/** + + + */src/test/java/** + + diff --git a/sonar-project.properties b/sonar-project.properties deleted file mode 100644 index 39c644f..0000000 --- a/sonar-project.properties +++ /dev/null @@ -1,7 +0,0 @@ -sonar.organization=computerdaddyguy -sonar.projectKey=ComputerDaddyGuy_JFileTreePrettyPrinter -sonar.host.url=https://sonarcloud.io - -# Exclude test sources from analysis and coverage -sonar.exclusions=*/src/test/java/** -sonar.coverage.exclusions=*/src/test/java/** From 9a17f8d7c060447454a726e51d9f9027119aed09 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:53:26 +0100 Subject: [PATCH 41/57] Re-adapt sonar test exclusions --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 6f4e849..b6a8bed 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,10 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io - */src/test/java/** + ${maven.multiModuleProjectDirectory}/*/src/test/java/** - */src/test/java/** + ${maven.multiModuleProjectDirectory}/*/src/test/java/** From a48f4a8a3e195265d270818cdbf9c33948829c66 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sat, 8 Nov 2025 23:59:25 +0100 Subject: [PATCH 42/57] Re-adapt sonar test exclusions --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index b6a8bed..07745d9 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,10 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io - ${maven.multiModuleProjectDirectory}/*/src/test/java/** + **/src/test - ${maven.multiModuleProjectDirectory}/*/src/test/java/** + **/src/test From 1bdd56f951daf5843928dd56e690eb2a6357403e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:01:37 +0100 Subject: [PATCH 43/57] Re-adapt sonar test exclusions --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index 07745d9..d1c6c2f 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,10 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io - **/src/test + src/test/** - **/src/test + src/test/** From ccda21b31b829ecb7cc68e466567c16c99df267e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:04:36 +0100 Subject: [PATCH 44/57] Re-adapt sonar test exclusions --- pom.xml | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index d1c6c2f..264ed55 100644 --- a/pom.xml +++ b/pom.xml @@ -51,10 +51,14 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io - src/test/** + jfiletreeprettyprinter-core/src/test/**, + jfiletreeprettyprinter-cli/src/test/**, + jfiletreeprettyprinter-examples/src/test/** - src/test/** + jfiletreeprettyprinter-core/src/test/**, + jfiletreeprettyprinter-cli/src/test/**, + jfiletreeprettyprinter-examples/src/test/** From a43e0a6cdfc73cf52cdb73159d1c06b59490751f Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:07:01 +0100 Subject: [PATCH 45/57] Re-adapt sonar test exclusions --- pom.xml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 264ed55..1a4c56d 100644 --- a/pom.xml +++ b/pom.xml @@ -51,14 +51,14 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io - jfiletreeprettyprinter-core/src/test/**, - jfiletreeprettyprinter-cli/src/test/**, - jfiletreeprettyprinter-examples/src/test/** + /jfiletreeprettyprinter-core/src/test/**, + /jfiletreeprettyprinter-cli/src/test/**, + /jfiletreeprettyprinter-examples/src/test/** - jfiletreeprettyprinter-core/src/test/**, - jfiletreeprettyprinter-cli/src/test/**, - jfiletreeprettyprinter-examples/src/test/** + /jfiletreeprettyprinter-core/src/test/**, + /jfiletreeprettyprinter-cli/src/test/**, + /jfiletreeprettyprinter-examples/src/test/** From 32313724a5d4176be11a8128ef82e1d3f77d586e Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:16:16 +0100 Subject: [PATCH 46/57] Re-adapt sonar test exclusions --- pom.xml | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 1a4c56d..2b278e1 100644 --- a/pom.xml +++ b/pom.xml @@ -50,15 +50,21 @@ computerdaddyguy ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io + + /jfiletreeprettyprinter-core/src/main/java, + /jfiletreeprettyprinter-cli/src/main/java, + /jfiletreeprettyprinter-examples/src/main/java + + + /jfiletreeprettyprinter-core/src/test/java, + /jfiletreeprettyprinter-cli/src/test/java, + /jfiletreeprettyprinter-examples/src/test/java + - /jfiletreeprettyprinter-core/src/test/**, - /jfiletreeprettyprinter-cli/src/test/**, - /jfiletreeprettyprinter-examples/src/test/** + **/src/test/** - /jfiletreeprettyprinter-core/src/test/**, - /jfiletreeprettyprinter-cli/src/test/**, - /jfiletreeprettyprinter-examples/src/test/** + **/src/test/** From c4e2eddf5c5f5cdae5dd9e52378aa43e6d9d3844 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:20:46 +0100 Subject: [PATCH 47/57] flatten maven plugin only when release --- jfiletreeprettyprinter-core/pom.xml | 55 +++++++++++++---------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml index be95619..eb47fa6 100644 --- a/jfiletreeprettyprinter-core/pom.xml +++ b/jfiletreeprettyprinter-core/pom.xml @@ -49,41 +49,36 @@ - - - - org.codehaus.mojo - flatten-maven-plugin - - ossrh - true - - - - flatten - process-resources - - flatten - - - - flatten.clean - clean - - clean - - - - - - - - release + + + org.codehaus.mojo + flatten-maven-plugin + + ossrh + true + + + + flatten + process-resources + + flatten + + + + flatten.clean + clean + + clean + + + + org.sonatype.central central-publishing-maven-plugin From c6c94905a241cab3ed1de155775ccbb66606b18b Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:31:26 +0100 Subject: [PATCH 48/57] Re-adapt sonar test exclusions --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 2b278e1..4ae9ce9 100644 --- a/pom.xml +++ b/pom.xml @@ -50,6 +50,7 @@ computerdaddyguy ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io + false /jfiletreeprettyprinter-core/src/main/java, /jfiletreeprettyprinter-cli/src/main/java, From fa853108ce28f01aa340c4ad6c33b82f98fed0ee Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:43:26 +0100 Subject: [PATCH 49/57] Re-adapt sonar test exclusions --- pom.xml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/pom.xml b/pom.xml index 4ae9ce9..df9488e 100644 --- a/pom.xml +++ b/pom.xml @@ -52,14 +52,10 @@ https://sonarcloud.io false - /jfiletreeprettyprinter-core/src/main/java, - /jfiletreeprettyprinter-cli/src/main/java, - /jfiletreeprettyprinter-examples/src/main/java + **/src/main/java - /jfiletreeprettyprinter-core/src/test/java, - /jfiletreeprettyprinter-cli/src/test/java, - /jfiletreeprettyprinter-examples/src/test/java + **/src/test/java **/src/test/** From e7c5730699eacdac69940c7ed47562ce8b7f0652 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:46:06 +0100 Subject: [PATCH 50/57] Re-adapt sonar test exclusions --- pom.xml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pom.xml b/pom.xml index df9488e..b5172cb 100644 --- a/pom.xml +++ b/pom.xml @@ -52,10 +52,10 @@ https://sonarcloud.io false - **/src/main/java + src/main/java - **/src/test/java + src/test/java **/src/test/** From 4df1aab4d72f6ccbee5d6ee4314931b23755bd41 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Sun, 9 Nov 2025 00:52:47 +0100 Subject: [PATCH 51/57] Re-adapt sonar test exclusions --- jfiletreeprettyprinter-examples/pom.xml | 14 ++ .../jfiletreeprettyprinter/EmojisTest.java | 150 ++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java diff --git a/jfiletreeprettyprinter-examples/pom.xml b/jfiletreeprettyprinter-examples/pom.xml index 725cf13..cba604a 100644 --- a/jfiletreeprettyprinter-examples/pom.xml +++ b/jfiletreeprettyprinter-examples/pom.xml @@ -16,6 +16,20 @@ jfiletreeprettyprinter-core ${revision} + + org.jspecify + jspecify + + + org.junit.jupiter + junit-jupiter-engine + test + + + org.assertj + assertj-core + test + \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java new file mode 100644 index 0000000..71139e4 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java @@ -0,0 +1,150 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter; + +import static org.assertj.core.api.Assertions.assertThat; + +import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; +import java.nio.file.Path; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.io.TempDir; + +class EmojisTest { + + @TempDir + private Path root; + + @Test + void emojis() { + + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(PrettyPrintOptions::withDefaultEmojis) + .build(); + + var result = printer.prettyPrint("src/main/resources/emojis"); + var expected = """ + 📂 emojis/ + ├─ 📂 applications/ + │ ├─ 📂 executables/ + │ │ ├─ 📱 file.apk + │ │ ├─ 🖥️ file.app + │ │ ├─ ⚙️ file.bin + │ │ ├─ ⚙️ file.exe + │ │ ├─ 📦 file.msi + │ │ └─ 📱 file2.ipa + │ └─ 📂 libs/ + │ ├─ 🧩 file.dll + │ ├─ 🧩 file.lib + │ └─ 🧩 file.so + ├─ 📂 archives/ + │ ├─ 📦 file.7z + │ ├─ 📦 file.gz + │ ├─ 💿 file.img + │ ├─ 💿 file.iso + │ ├─ 📦 file.rar + │ ├─ 📦 file.tar + │ └─ 📦 file.zip + ├─ 📂 code/ + │ ├─ 🚫 .gitignore + │ ├─ 🐳 Dockerfile + │ ├─ 🤵 Jenkinsfile + │ ├─ 📂 build_tools/ + │ │ ├─ 🛠️ build.gradle + │ │ ├─ 🛠️ makefile + │ │ ├─ 🛠️ package.json + │ │ └─ 🛠️ pom.xml + │ ├─ ⚙️ docker-compose.yml + │ ├─ 📂 lang/ + │ │ ├─ 💠 file.c + │ │ ├─ ☕ file.class + │ │ ├─ 💠 file.cpp + │ │ ├─ 💠 file.cs + │ │ ├─ 🎨 file.css + │ │ ├─ 🌐 file.htm + │ │ ├─ 🌐 file.html + │ │ ├─ 🌐 file.htmx + │ │ ├─ 📦 file.jar + │ │ ├─ ☕ file.java + │ │ ├─ 🎨 file.less + │ │ ├─ 🐘 file.php + │ │ ├─ 🐍 file.py + │ │ ├─ 🎨 file.scss + │ │ ├─ 🗄️ file.sql + │ │ └─ 🔷 file.ts + │ └─ 📂 scripting/ + │ ├─ 📜 file.bash + │ ├─ 📜 file.bat + │ └─ 📜 file.sh + ├─ 📂 data/ + │ ├─ ⚙️ file.cfg + │ ├─ ⚙️ file.conf + │ ├─ 📊 file.csv + │ ├─ ⚙️ file.ini + │ ├─ 📝 file.json + │ ├─ 📊 file.ods + │ ├─ ⚙️ file.properties + │ ├─ 📊 file.xls + │ ├─ 📊 file.xlsx + │ ├─ 📝 file.xml + │ ├─ 📝 file.yaml + │ └─ 📝 file.yml + ├─ 📂 doc/ + │ ├─ 📝 file.doc + │ ├─ 📝 file.docx + │ ├─ 📚 file.epub + │ ├─ 📝 file.md + │ ├─ 📝 file.odt + │ ├─ 📕 file.pdf + │ ├─ 📝 file.rtf + │ └─ 📝 file.txt + ├─ 📄 file.unknown_extension + ├─ 📄 file_without_extension + ├─ 📂 internet/ + │ ├─ 📂 github/ + │ │ ├─ 🆕 changelog + │ │ ├─ 🆕 changelog.md + │ │ ├─ 🤝 contributing + │ │ ├─ 🤝 contributing.md + │ │ ├─ ⚖️ license + │ │ ├─ ⚖️ license.md + │ │ ├─ 📘 readme + │ │ ├─ 📘 readme.md + │ │ ├─ 🗺️ roadmap + │ │ ├─ 🗺️ roadmap.md + │ │ ├─ 🛡️ security + │ │ └─ 🛡️ security.md + │ └─ 🤖 robots.txt + ├─ 📂 media/ + │ ├─ 📂 audio/ + │ │ ├─ 🎵 file.aac + │ │ ├─ 🎵 file.flac + │ │ ├─ 🎹 file.midi + │ │ ├─ 🎵 file.mp3 + │ │ ├─ 🎵 file.ogg + │ │ └─ 🎵 file.wav + │ ├─ 📂 images/ + │ │ ├─ 🖼️ file.bmp + │ │ ├─ 🎞️ file.gif + │ │ ├─ 🖼️ file.ico + │ │ ├─ 🖼️ file.jpeg + │ │ ├─ 🖼️ file.jpg + │ │ ├─ 🖼️ file.png + │ │ └─ ✒️ file.svg + │ └─ 📂 video/ + │ ├─ 🎬 file.avi + │ ├─ 🎬 file.mkv + │ ├─ 🎬 file.mov + │ ├─ 🎬 file.mp4 + │ ├─ 🎬 file.webm + │ └─ 🎬 file.wmv + └─ 📂 system/ + ├─ 💾 file.bak + ├─ 🔐 file.crt + ├─ 🔑 file.key + ├─ 📜 file.log + ├─ 🔐 file.pem + ├─ 🔓 file.pub + └─ 🗑️ file.tmp"""; + + assertThat(result).isEqualTo(expected); + } + +} From 102e7a6a32ded4662a95601e3b24e033980918c9 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Mon, 10 Nov 2025 18:08:08 +0100 Subject: [PATCH 52/57] Rework unit tests --- jfiletreeprettyprinter-core/pom.xml | 5 + .../jfiletreeprettyprinter/EmojisTest.java | 293 +++++++------ .../jfiletreeprettyprinter/FilteringTest.java | 402 +++++++++++++----- .../LineExtensionTest.java | 33 -- .../jfiletreeprettyprinter/SortingTest.java | 42 +- .../test/resources/base/images/landscape.jpeg | 0 .../resources/child_limit_dynamic/file_0_1 | 0 .../child_limit_dynamic/folder_1/file_1_1 | 0 .../child_limit_dynamic/folder_1/file_1_2 | 0 .../child_limit_dynamic/folder_1/file_1_3 | 0 .../child_limit_dynamic/folder_1/file_1_4 | 0 .../child_limit_dynamic/folder_1/file_1_5 | 0 .../node_modules/file_node_01 | 0 .../node_modules/file_node_02 | 0 .../node_modules/file_node_03 | 0 .../node_modules/file_node_04 | 0 .../node_modules/file_node_05 | 0 .../node_modules/file_node_06 | 0 .../node_modules/file_node_07 | 0 .../node_modules/file_node_08 | 0 .../node_modules/file_node_09 | 0 .../node_modules/file_node_10 | 0 .../node_modules/file_node_11 | 0 .../node_modules/file_node_12 | 0 .../node_modules/file_node_13 | 0 .../node_modules/file_node_14 | 0 .../node_modules/file_node_15 | 0 .../node_modules/file_node_16 | 0 .../node_modules/file_node_17 | 0 .../node_modules/file_node_18 | 0 .../node_modules/file_node_19 | 0 .../node_modules/file_node_20 | 0 .../resources/child_limit_static/file_0_1 | 0 .../child_limit_static/folder_1/file_1_1 | 0 .../child_limit_static/folder_1/file_1_2 | 0 .../child_limit_static/folder_1/file_1_3 | 0 .../child_limit_static/folder_1/file_1_4 | 0 .../child_limit_static/folder_1/file_1_5 | 0 .../child_limit_static/folder_2/file_2_1 | 0 .../child_limit_static/folder_2/file_2_2 | 0 .../child_limit_static/folder_2/file_2_3 | 0 .../child_limit_static/folder_2/file_2_4 | 0 .../child_limit_static/folder_2/file_2_5 | 0 .../child_limit_static/folder_3/file_3_1 | 0 .../child_limit_static/folder_3/file_3_2 | 0 .../child_limit_static/folder_3/file_3_3 | 0 .../child_limit_static/folder_3/file_3_4 | 0 .../child_limit_static/folder_3/file_3_5 | 0 .../child_limit_static/folder_4/file_4_1 | 0 .../child_limit_static/folder_4/file_4_2 | 0 .../child_limit_static/folder_4/file_4_3 | 0 .../child_limit_static/folder_4/file_4_4 | 0 .../child_limit_static/folder_4/file_4_5 | 0 .../child_limit_static/folder_5/file_5_1 | 0 .../child_limit_static/folder_5/file_5_2 | 0 .../child_limit_static/folder_5/file_5_3 | 0 .../child_limit_static/folder_5/file_5_4 | 0 .../child_limit_static/folder_5/file_5_5 | 0 .../resources/depth_limit/level_1/file_1_1 | 0 .../resources/depth_limit/level_1/file_1_2 | 0 .../depth_limit/level_1/level_2/file_2_1 | 0 .../depth_limit/level_1/level_2/file_2_2 | 0 .../level_1/level_2/level_3/file_3_1 | 0 .../level_1/level_2/level_3/file_3_2 | 0 .../level_1/level_2/level_3/level_4/file_4_1 | 0 .../level_1/level_2/level_3/level_4/file_4_2 | 0 .../level_2/level_3/level_4/level_5/file_5_1 | 0 .../level_2/level_3/level_4/level_5/file_5_2 | 0 .../emojis/applications/executables/file.apk | 0 .../emojis/applications/executables/file.app | 0 .../emojis/applications/executables/file.bin | 0 .../emojis/applications/executables/file.exe | 0 .../emojis/applications/executables/file.msi | 0 .../emojis/applications/executables/file2.ipa | 0 .../emojis/applications/libs/file.dll | 0 .../emojis/applications/libs/file.lib | 0 .../emojis/applications/libs/file.so | 0 .../test/resources/emojis/archives/file.7z | 0 .../test/resources/emojis/archives/file.gz | 0 .../test/resources/emojis/archives/file.img | 0 .../test/resources/emojis/archives/file.iso | 0 .../test/resources/emojis/archives/file.rar | 0 .../test/resources/emojis/archives/file.tar | 0 .../src/test/resources/emojis/code/.gitignore | 0 .../emojis/code/build_tools/build.gradle | 0 .../emojis/code/build_tools/makefile | 0 .../emojis/code/build_tools/package.json | 0 .../resources/emojis/code/build_tools/pom.xml | 0 .../resources/emojis/code/docker-compose.yml | 0 .../test/resources/emojis/code/lang/file.c | 0 .../resources/emojis/code/lang/file.class | 0 .../test/resources/emojis/code/lang/file.cpp | 0 .../test/resources/emojis/code/lang/file.cs | 0 .../test/resources/emojis/code/lang/file.css | 0 .../test/resources/emojis/code/lang/file.htm | 0 .../test/resources/emojis/code/lang/file.html | 0 .../test/resources/emojis/code/lang/file.htmx | 0 .../test/resources/emojis/code/lang/file.jar | 0 .../test/resources/emojis/code/lang/file.java | 0 .../test/resources/emojis/code/lang/file.less | 0 .../test/resources/emojis/code/lang/file.php | 0 .../test/resources/emojis/code/lang/file.py | 0 .../test/resources/emojis/code/lang/file.scss | 0 .../test/resources/emojis/code/lang/file.sql | 0 .../test/resources/emojis/code/lang/file.ts | 0 .../resources/emojis/code/scripting/file.bash | 0 .../resources/emojis/code/scripting/file.bat | 0 .../resources/emojis/code/scripting/file.sh | 0 .../src/test/resources/emojis/data/file.cfg | 0 .../src/test/resources/emojis/data/file.conf | 0 .../src/test/resources/emojis/data/file.csv | 0 .../src/test/resources/emojis/data/file.ini | 0 .../src/test/resources/emojis/data/file.json | 0 .../src/test/resources/emojis/data/file.ods | 0 .../resources/emojis/data/file.properties | 0 .../src/test/resources/emojis/data/file.xls | 0 .../src/test/resources/emojis/data/file.xlsx | 0 .../src/test/resources/emojis/data/file.xml | 0 .../src/test/resources/emojis/data/file.yaml | 0 .../src/test/resources/emojis/data/file.yml | 0 .../src/test/resources/emojis/doc/file.doc | 0 .../src/test/resources/emojis/doc/file.docx | 0 .../src/test/resources/emojis/doc/file.epub | 0 .../src/test/resources/emojis/doc/file.md | 0 .../src/test/resources/emojis/doc/file.odt | 0 .../src/test/resources/emojis/doc/file.pdf | Bin .../src/test/resources/emojis/doc/file.rtf | 0 .../src/test/resources/emojis/doc/file.txt | 0 .../resources/emojis/file.unknown_extension | 0 .../resources/emojis/file_without_extension | 0 .../emojis/internet/github/changelog | 0 .../emojis/internet/github/changelog.md | 0 .../emojis/internet/github/contributing | 0 .../emojis/internet/github/contributing.md | 0 .../resources/emojis/internet/github/license | 0 .../emojis/internet/github/license.md | 0 .../resources/emojis/internet/github/readme | 0 .../emojis/internet/github/readme.md | 0 .../resources/emojis/internet/github/roadmap | 0 .../emojis/internet/github/roadmap.md | 0 .../resources/emojis/internet/github/security | 0 .../emojis/internet/github/security.md | 0 .../test/resources/emojis/internet/robots.txt | 0 .../resources/emojis/media/audio/file.aac | 0 .../resources/emojis/media/audio/file.flac | 0 .../resources/emojis/media/audio/file.midi | 0 .../resources/emojis/media/audio/file.mp3 | 0 .../resources/emojis/media/audio/file.ogg | 0 .../resources/emojis/media/audio/file.wav | 0 .../resources/emojis/media/images/file.bmp | 0 .../resources/emojis/media/images/file.gif | 0 .../resources/emojis/media/images/file.ico | 0 .../resources/emojis/media/images/file.jpeg | 0 .../resources/emojis/media/images/file.jpg | 0 .../resources/emojis/media/images/file.png | 0 .../resources/emojis/media/images/file.svg | 0 .../resources/emojis/media/video/file.avi | 0 .../resources/emojis/media/video/file.mkv | 0 .../resources/emojis/media/video/file.mov | 0 .../resources/emojis/media/video/file.mp4 | 0 .../resources/emojis/media/video/file.webm | 0 .../resources/emojis/media/video/file.wmv | 0 .../src/test/resources/emojis/system/file.bak | 0 .../src/test/resources/emojis/system/file.crt | 0 .../src/test/resources/emojis/system/file.key | 0 .../src/test/resources/emojis/system/file.log | 0 .../src/test/resources/emojis/system/file.pem | 0 .../src/test/resources/emojis/system/file.pub | 0 .../src/test/resources/emojis/system/file.tmp | 0 .../filtering/dir_with_java_files/file_B.java | 0 .../filtering/dir_with_java_files/file_C.cpp | 0 .../filtering/dir_with_java_files/file_D.ts | 0 .../filtering/dir_with_java_files/file_E.java | 0 .../nested_dir_with_java_files/file_G.java | 0 .../nested_dir_with_java_files/file_H.cpp | 0 .../nested_dir_with_java_files/file_I.ts | 0 .../nested_dir_with_java_files/file_J.java | 0 .../nested_dir_with_no_java_file/file_K.cpp | 0 .../nested_dir_with_no_java_file/file_L.ts | 0 .../dir_with_no_java_file/file_M.cpp | 0 .../filtering/dir_with_no_java_file/file_N.ts | 0 .../src/test/resources/filtering/file_A.java | 0 .../src/main/java/api/Controller.java | 0 .../src/main/java/domain/ValueObject.java | 0 .../src/main/java/infra/Repository.java | 0 .../src/main/resources/application.properties | 0 .../test/resources/max_depth/level1/file1#1 | 0 .../test/resources/max_depth/level1/file1#2 | 0 .../resources/max_depth/level1/level2/file2#1 | 0 .../resources/max_depth/level1/level2/file2#2 | 0 .../max_depth/level1/level2/level3/file3#1 | 0 .../max_depth/level1/level2/level3/file3#2 | 0 .../level1/level2/level3/level4/file4#1 | 0 .../level1/level2/level3/level4/file4#2 | 0 .../resources/single_directory_child/file1 | 0 .../resources/single_directory_child/file2 | 0 .../this/is/single/directory/child/file1 | 0 .../this/is/single/directory/child/file2 | 0 .../this/is/single/directory/child/file3 | 0 .../src/test/resources/sorting/a_file | 1 - .../resources/sorting/by_file_size/file_1 | 1 + .../resources/sorting/by_file_size/file_2 | 1 + .../sorting/{x_file => by_file_size/file_3} | 0 .../resources/sorting/by_file_size/file_4 | 1 + .../sorting/{b_file => by_file_size/file_5} | 0 .../src/test/resources/sorting/c_dir/c_file | 1 - .../src/test/resources/sorting/d_dir/d_a_file | 1 - .../resources/sorting/d_dir/d_b_dir/d_b_file | 1 - .../src/test/resources/sorting/y_file | 0 .../src/test/resources/tree_format/file_1 | 0 .../src/test/resources/tree_format/file_2 | 0 .../resources/tree_format/subFolder/subFile_1 | 0 .../resources/tree_format/subFolder/subFile_2 | 0 .../example/BasicUsage.java | 7 +- .../example/ChildLimitDynamic.java | 7 +- .../example/ChildLimitStatic.java | 7 +- .../example/CompactDirectories.java | 7 +- .../example/Emojis.java | 7 +- .../example/FileTreeFormat.java | 7 +- .../example/Filtering.java | 7 +- .../example/LineExtension.java | 8 +- .../example/MaxDepth.java | 7 +- .../example/ProjectStructure.java | 67 +-- .../example/Sorting.java | 7 +- .../src/main/resources/emojis}/Dockerfile | 0 .../src/main/resources/emojis}/Jenkinsfile | 0 .../emojis/applications/executables/file.apk | 0 .../emojis/applications/executables/file.app | 0 .../emojis/applications/executables/file.bin | 0 .../emojis/applications/executables/file.exe | 0 .../emojis/applications/executables/file.msi | 0 .../emojis/applications/executables/file2.ipa | 0 .../emojis/applications/libs/file.dll | 0 .../emojis/applications/libs/file.lib | 0 .../emojis/applications/libs/file.so | 0 .../main/resources/emojis/archives/file.7z | 0 .../main/resources/emojis/archives/file.gz | 0 .../main/resources/emojis/archives/file.img | 0 .../main/resources/emojis/archives/file.iso | 0 .../main/resources/emojis/archives/file.rar | 0 .../main/resources/emojis/archives/file.tar | 0 .../main/resources/emojis/archives/file.zip | 0 .../src/main/resources/emojis/code/.gitignore | 0 .../src/main/resources/emojis/code/Dockerfile | 0 .../main/resources/emojis/code/Jenkinsfile | 0 .../emojis/code/build_tools/build.gradle | 0 .../emojis/code/build_tools/makefile | 0 .../emojis/code/build_tools/package.json | 0 .../resources/emojis/code/build_tools/pom.xml | 0 .../resources/emojis/code/docker-compose.yml | 0 .../main/resources/emojis/code/lang/file.c | 0 .../resources/emojis/code/lang/file.class | 0 .../main/resources/emojis/code/lang/file.cpp | 0 .../main/resources/emojis/code/lang/file.cs | 0 .../main/resources/emojis/code/lang/file.css | 0 .../main/resources/emojis/code/lang/file.htm | 0 .../main/resources/emojis/code/lang/file.html | 0 .../main/resources/emojis/code/lang/file.htmx | 0 .../main/resources/emojis/code/lang/file.jar | 0 .../main/resources/emojis/code/lang/file.java | 0 .../main/resources/emojis/code/lang/file.less | 0 .../main/resources/emojis/code/lang/file.php | 0 .../main/resources/emojis/code/lang/file.py | 0 .../main/resources/emojis/code/lang/file.scss | 0 .../main/resources/emojis/code/lang/file.sql | 0 .../main/resources/emojis/code/lang/file.ts | 0 .../resources/emojis/code/scripting/file.bash | 0 .../resources/emojis/code/scripting/file.bat | 0 .../resources/emojis/code/scripting/file.sh | 0 .../src/main/resources/emojis/data/file.cfg | 0 .../src/main/resources/emojis/data/file.conf | 0 .../src/main/resources/emojis/data/file.csv | 0 .../src/main/resources/emojis/data/file.ini | 0 .../src/main/resources/emojis/data/file.json | 0 .../src/main/resources/emojis/data/file.ods | 0 .../resources/emojis/data/file.properties | 0 .../src/main/resources/emojis/data/file.xls | 0 .../src/main/resources/emojis/data/file.xlsx | 0 .../src/main/resources/emojis/data/file.xml | 0 .../src/main/resources/emojis/data/file.yaml | 0 .../src/main/resources/emojis/data/file.yml | 0 .../src/main/resources/emojis/doc/file.doc | 0 .../src/main/resources/emojis/doc/file.docx | 0 .../src/main/resources/emojis/doc/file.epub | 0 .../src/main/resources/emojis/doc/file.md | 0 .../src/main/resources/emojis/doc/file.odt | 0 .../src/main/resources/emojis/doc/file.pdf | Bin .../src/main/resources/emojis/doc/file.rtf | 0 .../src/main/resources/emojis/doc/file.txt | 0 .../src/main/resources/emojis/file.avi | Bin .../src/main/resources/emojis/file.docx | Bin .../src/main/resources/emojis/file.ini | 0 .../src/main/resources/emojis/file.java | 0 .../src/main/resources/emojis/file.jpeg | 0 .../src/main/resources/emojis/file.mp3 | 0 .../src/main/resources/emojis/file.pdf | Bin .../resources/emojis/file.unknown_extension | 0 .../src/main/resources/emojis/file.xlsx | 0 .../src/main/resources/emojis}/file.zip | 0 .../resources/emojis/file_without_extension | 0 .../emojis/internet/github/changelog | 0 .../emojis/internet/github/changelog.md | 0 .../emojis/internet/github/contributing | 0 .../emojis/internet/github/contributing.md | 0 .../resources/emojis/internet/github/license | 0 .../emojis/internet/github/license.md | 0 .../resources/emojis/internet/github/readme | 0 .../emojis/internet/github/readme.md | 0 .../resources/emojis/internet/github/roadmap | 0 .../emojis/internet/github/roadmap.md | 0 .../resources/emojis/internet/github/security | 0 .../emojis/internet/github/security.md | 0 .../main/resources/emojis/internet/robots.txt | 0 .../resources/emojis/media/audio/file.aac | 0 .../resources/emojis/media/audio/file.flac | 0 .../resources/emojis/media/audio/file.midi | 0 .../resources/emojis/media/audio/file.mp3 | 0 .../resources/emojis/media/audio/file.ogg | 0 .../resources/emojis/media/audio/file.wav | 0 .../resources/emojis/media/images/file.bmp | 0 .../resources/emojis/media/images/file.gif | 0 .../resources/emojis/media/images/file.ico | 0 .../resources/emojis/media/images/file.jpeg | 0 .../resources/emojis/media/images/file.jpg | 0 .../resources/emojis/media/images/file.png | 0 .../resources/emojis/media/images/file.svg | 0 .../resources/emojis/media/video/file.avi | 0 .../resources/emojis/media/video/file.mkv | 0 .../resources/emojis/media/video/file.mov | 0 .../resources/emojis/media/video/file.mp4 | 0 .../resources/emojis/media/video/file.webm | 0 .../resources/emojis/media/video/file.wmv | 0 .../src/main/resources/emojis/readme | 0 .../src/main/resources/emojis/system/file.bak | 0 .../src/main/resources/emojis/system/file.crt | 0 .../src/main/resources/emojis/system/file.key | 0 .../src/main/resources/emojis/system/file.log | 0 .../src/main/resources/emojis/system/file.pem | 0 .../src/main/resources/emojis/system/file.pub | 0 .../src/main/resources/emojis/system/file.tmp | 0 .../jfiletreeprettyprinter/EmojisTest.java | 150 ------- .../example/BasicUsageTest.java | 32 ++ .../example/ChildLimitDynamicTest.java | 28 ++ .../example/ChildLimitStaticTest.java | 31 ++ .../example/CompactDirectoriesTest.java | 25 ++ .../example/EmojisTest.java | 31 ++ .../example/FileTreeFormatTest.java | 24 ++ .../example/FilteringTest.java | 27 ++ .../example/LineExtensionTest.java | 30 ++ .../example/MaxDepthTest.java | 27 ++ .../example/ProjectStructureTest.java | 40 ++ .../example/SortingTest.java | 29 ++ pom.xml | 12 +- 353 files changed, 888 insertions(+), 518 deletions(-) delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/base/images/landscape.jpeg delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/file_0_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_5 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_01 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_02 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_03 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_04 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_05 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_06 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_07 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_08 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_09 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_10 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_11 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_12 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_13 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_14 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_15 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_16 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_17 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_18 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_19 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_20 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/file_0_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_5 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_5 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_5 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_5 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_5 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.apk delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.app delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.bin delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.exe delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.msi delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file2.ipa delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.dll delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.lib delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.so delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.7z delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.gz delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.img delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.iso delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.rar delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.tar delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/.gitignore delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/build.gradle delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/makefile delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/package.json delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/pom.xml delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/docker-compose.yml delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.c delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.class delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cpp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cs delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.css delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htm delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.html delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htmx delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.jar delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.less delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.php delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.py delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.scss delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.sql delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.ts delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bash delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bat delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.sh delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.cfg delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.conf delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.csv delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ini delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.json delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ods delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.properties delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xls delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xlsx delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xml delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yaml delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yml delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.doc delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.docx delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.epub delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.odt delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.pdf delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.rtf delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.txt delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/file.unknown_extension delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/file_without_extension delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security.md delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/internet/robots.txt delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.aac delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.flac delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.midi delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.mp3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.ogg delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.wav delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.bmp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.gif delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.ico delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpeg delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpg delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.png delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.svg delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.avi delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mkv delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mov delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mp4 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.webm delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.wmv delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.bak delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.crt delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.key delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.log delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pem delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pub delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.tmp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_B.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_C.cpp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_D.ts delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_E.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_M.cpp delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_N.ts delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/filtering/file_A.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/api/Controller.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/domain/ValueObject.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/infra/Repository.java delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/resources/application.properties delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file3 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/a_file create mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_1 create mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_2 rename jfiletreeprettyprinter-core/src/test/resources/sorting/{x_file => by_file_size/file_3} (100%) create mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_4 rename jfiletreeprettyprinter-core/src/test/resources/sorting/{b_file => by_file_size/file_5} (100%) delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/c_dir/c_file delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_a_file delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_b_dir/d_b_file delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/sorting/y_file delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/tree_format/file_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/tree_format/file_2 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_1 delete mode 100644 jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_2 rename {jfiletreeprettyprinter-core/src/test/resources/emojis/code => jfiletreeprettyprinter-examples/src/main/resources/emojis}/Dockerfile (100%) rename {jfiletreeprettyprinter-core/src/test/resources/emojis/code => jfiletreeprettyprinter-examples/src/main/resources/emojis}/Jenkinsfile (100%) delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.apk delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.app delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.bin delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.exe delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.msi delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file2.ipa delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.dll delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.lib delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.so delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.7z delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.gz delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.img delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.iso delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.rar delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.tar delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.zip delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/.gitignore delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Dockerfile delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Jenkinsfile delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/build.gradle delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/makefile delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/package.json delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/pom.xml delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/docker-compose.yml delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.c delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.class delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cpp delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cs delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.css delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htm delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.html delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htmx delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.jar delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.java delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.less delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.php delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.py delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.scss delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.sql delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.ts delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bash delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bat delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.sh delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.cfg delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.conf delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.csv delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ini delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.json delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ods delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.properties delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xls delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xlsx delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xml delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yaml delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yml delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.doc delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.docx delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.epub delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.odt delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.pdf delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.rtf delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.txt rename jfiletreeprettyprinter-core/src/test/resources/base/businessPlan.pdf => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.avi (100%) rename jfiletreeprettyprinter-core/src/test/resources/base/businessProject.pdf => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.docx (100%) rename jfiletreeprettyprinter-core/src/test/resources/base/cars/Ferrari.doc => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.ini (100%) rename jfiletreeprettyprinter-core/src/test/resources/base/cars/Porsche.doc => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.java (100%) rename jfiletreeprettyprinter-core/src/test/resources/base/diyIdeas.docx => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.jpeg (100%) rename jfiletreeprettyprinter-core/src/test/resources/base/giftIdeas.txt => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.mp3 (100%) rename jfiletreeprettyprinter-core/src/test/resources/base/images/funnyCat.gif => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.pdf (100%) delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/file.unknown_extension rename jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheBeach.jpeg => jfiletreeprettyprinter-examples/src/main/resources/emojis/file.xlsx (100%) rename {jfiletreeprettyprinter-core/src/test/resources/emojis/archives => jfiletreeprettyprinter-examples/src/main/resources/emojis}/file.zip (100%) delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/file_without_extension delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security.md delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/robots.txt delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.aac delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.flac delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.midi delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.mp3 delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.ogg delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.wav delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.bmp delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.gif delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.ico delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpeg delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpg delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.png delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.svg delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.avi delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mkv delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mov delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mp4 delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.webm delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.wmv rename jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheZoo.jpeg => jfiletreeprettyprinter-examples/src/main/resources/emojis/readme (100%) delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.bak delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.crt delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.key delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.log delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pem delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pub delete mode 100644 jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.tmp delete mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsageTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamicTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStaticTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectoriesTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/EmojisTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormatTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FilteringTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtensionTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepthTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructureTest.java create mode 100644 jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/SortingTest.java diff --git a/jfiletreeprettyprinter-core/pom.xml b/jfiletreeprettyprinter-core/pom.xml index eb47fa6..95a94dd 100644 --- a/jfiletreeprettyprinter-core/pom.xml +++ b/jfiletreeprettyprinter-core/pom.xml @@ -42,6 +42,11 @@ junit-jupiter-engine test + + org.junit.jupiter + junit-jupiter-params + test + org.assertj assertj-core diff --git a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java index 0123993..1919f2a 100644 --- a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java @@ -11,6 +11,8 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; class EmojisTest { @@ -30,137 +32,176 @@ void emptyDir() { assertThat(result).isEqualTo(expected); } - @Test - void emojis() { + @ParameterizedTest + @CsvSource(delimiter = ' ', textBlock = """ + + 📄 file.unknown_extension + 📄 file_without_extension + + # ------------------------------ + # Application + + # Executables + 📱 file.apk + 🖥️ file.app + ⚙️ file.bin + ⚙️ file.exe + 📦 file.msi + 📱 file.ipa + + # Libs + 🧩 file.dll + 🧩 file.lib + 🧩 file.so + + # ------------------------------ + # Archives + + 📦 file.7z + 📦 file.gz + 💿 file.img + 💿 file.iso + 📦 file.rar + 📦 file.tar + 📦 file.zip + + # ------------------------------ + # Code + + 🚫 .gitignore + 🐳 Dockerfile + 🤵 Jenkinsfile + ⚙️ docker-compose.yml + + # Build tools + 🛠️ build.gradle + 🛠️ makefile + 🛠️ package.json + 🛠️ pom.xml + + # Lang + 💠 file.c + ☕ file.class + 💠 file.cpp + 💠 file.cs + 🎨 file.css + 🌐 file.htm + 🌐 file.html + 🌐 file.htmx + 📦 file.jar + ☕ file.java + 🎨 file.less + 🐘 file.php + 🐍 file.py + 🎨 file.scss + 🗄️ file.sql + 🔷 file.ts + + # Scripting + 📜 file.bash + 📜 file.bat + 📜 file.sh + + # ------------------------------ + # Data + + ⚙️ file.cfg + ⚙️ file.conf + 📊 file.csv + ⚙️ file.ini + 📝 file.json + 📊 file.ods + ⚙️ file.properties + 📊 file.xls + 📊 file.xlsx + 📝 file.xml + 📝 file.yaml + 📝 file.yml + + # ------------------------------ + # Doc + + 📝 file.doc + 📝 file.docx + 📚 file.epub + 📝 file.md + 📝 file.odt + 📕 file.pdf + 📝 file.rtf + 📝 file.txt + + # ------------------------------ + # Internet + + 🤖 robots.txt + + # Github + 🆕 changelog + 🆕 changelog.md + 🤝 contributing + 🤝 contributing.md + ⚖️ license + ⚖️ license.md + 📘 readme + 📘 readme.md + 🗺️ roadmap + 🗺️ roadmap.md + 🛡️ security + 🛡️ security.md + + # ------------------------------ + # Media + + # Audio + 🎵 file.aac + 🎵 file.flac + 🎹 file.midi + 🎵 file.mp3 + 🎵 file.ogg + 🎵 file.wav + + # Images + 🖼️ file.bmp + 🎞️ file.gif + 🖼️ file.ico + 🖼️ file.jpeg + 🖼️ file.jpg + 🖼️ file.png + ✒️ file.svg + + # Video + 🎬 file.avi + 🎬 file.mkv + 🎬 file.mov + 🎬 file.mp4 + 🎬 file.webm + 🎬 file.wmv + + # ------------------------------ + # System + + 💾 file.bak + 🔐 file.crt + 🔑 file.key + 📜 file.log + 🔐 file.pem + 🔓 file.pub + 🗑️ file.tmp + + """) + void emojis(String expectedEmoji, String fileName) { var printer = FileTreePrettyPrinter.builder() .customizeOptions(PrettyPrintOptions::withDefaultEmojis) .build(); - var result = printer.prettyPrint("src/test/resources/emojis"); - var expected = """ - 📂 emojis/ - ├─ 📂 applications/ - │ ├─ 📂 executables/ - │ │ ├─ 📱 file.apk - │ │ ├─ 🖥️ file.app - │ │ ├─ ⚙️ file.bin - │ │ ├─ ⚙️ file.exe - │ │ ├─ 📦 file.msi - │ │ └─ 📱 file2.ipa - │ └─ 📂 libs/ - │ ├─ 🧩 file.dll - │ ├─ 🧩 file.lib - │ └─ 🧩 file.so - ├─ 📂 archives/ - │ ├─ 📦 file.7z - │ ├─ 📦 file.gz - │ ├─ 💿 file.img - │ ├─ 💿 file.iso - │ ├─ 📦 file.rar - │ ├─ 📦 file.tar - │ └─ 📦 file.zip - ├─ 📂 code/ - │ ├─ 🚫 .gitignore - │ ├─ 🐳 Dockerfile - │ ├─ 🤵 Jenkinsfile - │ ├─ 📂 build_tools/ - │ │ ├─ 🛠️ build.gradle - │ │ ├─ 🛠️ makefile - │ │ ├─ 🛠️ package.json - │ │ └─ 🛠️ pom.xml - │ ├─ ⚙️ docker-compose.yml - │ ├─ 📂 lang/ - │ │ ├─ 💠 file.c - │ │ ├─ ☕ file.class - │ │ ├─ 💠 file.cpp - │ │ ├─ 💠 file.cs - │ │ ├─ 🎨 file.css - │ │ ├─ 🌐 file.htm - │ │ ├─ 🌐 file.html - │ │ ├─ 🌐 file.htmx - │ │ ├─ 📦 file.jar - │ │ ├─ ☕ file.java - │ │ ├─ 🎨 file.less - │ │ ├─ 🐘 file.php - │ │ ├─ 🐍 file.py - │ │ ├─ 🎨 file.scss - │ │ ├─ 🗄️ file.sql - │ │ └─ 🔷 file.ts - │ └─ 📂 scripting/ - │ ├─ 📜 file.bash - │ ├─ 📜 file.bat - │ └─ 📜 file.sh - ├─ 📂 data/ - │ ├─ ⚙️ file.cfg - │ ├─ ⚙️ file.conf - │ ├─ 📊 file.csv - │ ├─ ⚙️ file.ini - │ ├─ 📝 file.json - │ ├─ 📊 file.ods - │ ├─ ⚙️ file.properties - │ ├─ 📊 file.xls - │ ├─ 📊 file.xlsx - │ ├─ 📝 file.xml - │ ├─ 📝 file.yaml - │ └─ 📝 file.yml - ├─ 📂 doc/ - │ ├─ 📝 file.doc - │ ├─ 📝 file.docx - │ ├─ 📚 file.epub - │ ├─ 📝 file.md - │ ├─ 📝 file.odt - │ ├─ 📕 file.pdf - │ ├─ 📝 file.rtf - │ └─ 📝 file.txt - ├─ 📄 file.unknown_extension - ├─ 📄 file_without_extension - ├─ 📂 internet/ - │ ├─ 📂 github/ - │ │ ├─ 🆕 changelog - │ │ ├─ 🆕 changelog.md - │ │ ├─ 🤝 contributing - │ │ ├─ 🤝 contributing.md - │ │ ├─ ⚖️ license - │ │ ├─ ⚖️ license.md - │ │ ├─ 📘 readme - │ │ ├─ 📘 readme.md - │ │ ├─ 🗺️ roadmap - │ │ ├─ 🗺️ roadmap.md - │ │ ├─ 🛡️ security - │ │ └─ 🛡️ security.md - │ └─ 🤖 robots.txt - ├─ 📂 media/ - │ ├─ 📂 audio/ - │ │ ├─ 🎵 file.aac - │ │ ├─ 🎵 file.flac - │ │ ├─ 🎹 file.midi - │ │ ├─ 🎵 file.mp3 - │ │ ├─ 🎵 file.ogg - │ │ └─ 🎵 file.wav - │ ├─ 📂 images/ - │ │ ├─ 🖼️ file.bmp - │ │ ├─ 🎞️ file.gif - │ │ ├─ 🖼️ file.ico - │ │ ├─ 🖼️ file.jpeg - │ │ ├─ 🖼️ file.jpg - │ │ ├─ 🖼️ file.png - │ │ └─ ✒️ file.svg - │ └─ 📂 video/ - │ ├─ 🎬 file.avi - │ ├─ 🎬 file.mkv - │ ├─ 🎬 file.mov - │ ├─ 🎬 file.mp4 - │ ├─ 🎬 file.webm - │ └─ 🎬 file.wmv - └─ 📂 system/ - ├─ 💾 file.bak - ├─ 🔐 file.crt - ├─ 🔑 file.key - ├─ 📜 file.log - ├─ 🔐 file.pem - ├─ 🔓 file.pub - └─ 🗑️ file.tmp"""; + var path = FileStructureCreator.forTargetPath(root) + .createFile(fileName) + .getPath(); + + var result = printer.prettyPrint(path); + + var expected = "📂 targetPath/\n└─ " + expectedEmoji + " " + fileName; assertThat(result).isEqualTo(expected); } diff --git a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java index 6834d3e..355a8b5 100644 --- a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/FilteringTest.java @@ -6,6 +6,7 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PathSorts; import io.github.computerdaddyguy.jfiletreeprettyprinter.util.FileStructureCreator; import java.nio.file.Path; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; @@ -15,174 +16,345 @@ class FilteringTest { private Path root; @Test - void example_file() { + void some_file_match() { + var path = FileStructureCreator.forTargetPath(root) + .createFile("file1.java") + .createFile("file2.php") + .createFile("file3.java") + .createFile("file4.c") + .createFile("file5.java") + .getPath(); + + var fileFilter = PathMatchers.hasExtension("java"); - var filter = PathMatchers.hasExtension("java"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.filterFiles(filter)) + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterFiles(fileFilter)) .build(); - var result = printer.prettyPrint("src/test/resources/filtering"); + var result = printer.prettyPrint(path); + var expected = """ - filtering/ - ├─ dir_with_java_files/ - │ ├─ file_B.java - │ └─ file_E.java - ├─ dir_with_nested_java_files/ - │ ├─ nested_dir_with_java_files/ - │ │ ├─ file_G.java - │ │ └─ file_J.java - │ └─ nested_dir_with_no_java_file/ - ├─ dir_with_no_java_file/ - └─ file_A.java"""; + targetPath/ + ├─ file1.java + ├─ file3.java + └─ file5.java"""; + assertThat(result).isEqualTo(expected); } @Test - void example_dir() { + void no_file_match() { + var path = FileStructureCreator.forTargetPath(root) + .createFile("file1.java") + .createFile("file2.php") + .createFile("file3.java") + .createFile("file4.c") + .createFile("file5.java") + .getPath(); + + var fileFilter = PathMatchers.hasExtension("exe"); - var filter = PathMatchers.hasNameEndingWith("no_java_file"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.filterDirectories(filter)) + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterFiles(fileFilter)) .build(); - var result = printer.prettyPrint("src/test/resources/filtering"); + var result = printer.prettyPrint(path); + var expected = """ - filtering/ - ├─ dir_with_no_java_file/ - │ ├─ file_M.cpp - │ └─ file_N.ts - └─ file_A.java"""; + targetPath/"""; + assertThat(result).isEqualTo(expected); } @Test - void example_and_sorting() { + void some_directory_match() { + var path = FileStructureCreator.forTargetPath(root) + .createDirectory("dir1_A") + .createDirectory("dir2_B") + .createDirectory("dir3_A") + .createDirectory("dir4_C") + .createDirectory("dir5_A") + .getPath(); - var filter = PathMatchers.hasExtension("java"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.sort(PathSorts.ALPHABETICAL.reversed())) - .customizeOptions(options -> options.filterFiles(filter)) + var dirFilter = PathMatchers.hasNameEndingWith("_A"); + + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterDirectories(dirFilter)) .build(); - var result = printer.prettyPrint("src/test/resources/filtering"); + var result = printer.prettyPrint(path); + var expected = """ - filtering/ - ├─ file_A.java - ├─ dir_with_no_java_file/ - ├─ dir_with_nested_java_files/ - │ ├─ nested_dir_with_no_java_file/ - │ └─ nested_dir_with_java_files/ - │ ├─ file_J.java - │ └─ file_G.java - └─ dir_with_java_files/ - ├─ file_E.java - └─ file_B.java"""; + targetPath/ + ├─ dir1_A/ + ├─ dir3_A/ + └─ dir5_A/"""; + assertThat(result).isEqualTo(expected); } @Test - void example_childLimit_1() { + void no_directory_match() { + var path = FileStructureCreator.forTargetPath(root) + .createDirectory("dir1_A") + .createDirectory("dir2_B") + .createDirectory("dir3_A") + .createDirectory("dir4_C") + .createDirectory("dir5_A") + .getPath(); + + var dirFilter = PathMatchers.hasNameEndingWith("_Z"); - var filter = PathMatchers.hasExtension("java"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withChildLimit(1)) - .customizeOptions(options -> options.filterFiles(filter)) + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterDirectories(dirFilter)) .build(); - var result = printer.prettyPrint("src/test/resources/filtering"); + var result = printer.prettyPrint(path); + var expected = """ - filtering/ - ├─ dir_with_java_files/ - │ ├─ file_B.java - │ └─ ... - └─ ..."""; + targetPath/"""; + assertThat(result).isEqualTo(expected); } @Test - void example_childLimit_2() { + void matchingFiles_inside_nonMathDir_are_not_displayed() { + // @formatter:off + var path = FileStructureCreator.forTargetPath(root) + .createAndEnterDirectory("dir_A") + .createFile("file_A1.java") + .up() + .createAndEnterDirectory("dir_B") + .createFile("file_B1.java") + .up() + .getPath(); + // @formatter:on - var filter = PathMatchers.hasExtension("java"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withChildLimit(2)) - .customizeOptions(options -> options.filterFiles(filter)) + var dirFilter = PathMatchers.hasNameEndingWith("_A"); + var fileFilter = PathMatchers.hasExtension("java"); + + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterDirectories(dirFilter)) + .customizeOptions(options -> options.filterFiles(fileFilter)) .build(); - var result = printer.prettyPrint("src/test/resources/filtering"); + var result = printer.prettyPrint(path); + var expected = """ - filtering/ - ├─ dir_with_java_files/ - │ ├─ file_B.java - │ └─ file_E.java - ├─ dir_with_nested_java_files/ - │ ├─ nested_dir_with_java_files/ - │ │ ├─ file_G.java - │ │ └─ file_J.java - │ └─ nested_dir_with_no_java_file/ - └─ ..."""; + targetPath/ + └─ dir_A/ + └─ file_A1.java"""; + assertThat(result).isEqualTo(expected); } @Test - void example_childLimit_3() { + void matchingDirectories_inside_nonMathDir_are_not_displayed() { + // @formatter:off + var path = FileStructureCreator.forTargetPath(root) + .createAndEnterDirectory("dir_A") + .createDirectory("dir_A_sub") + .up() + .createAndEnterDirectory("dir_B") + .createDirectory("dir_B_sub") + .up() + .getPath(); + // @formatter:on + + var dirFilter = PathMatchers.anyOf( + PathMatchers.hasNameEndingWith("_A"), + PathMatchers.hasNameEndingWith("_sub") + ); - var filter = PathMatchers.hasExtension("java"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withChildLimit(3)) - .customizeOptions(options -> options.filterFiles(filter)) + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.filterDirectories(dirFilter)) .build(); - var result = printer.prettyPrint("src/test/resources/filtering"); + var result = printer.prettyPrint(path); + var expected = """ - filtering/ - ├─ dir_with_java_files/ - │ ├─ file_B.java - │ └─ file_E.java - ├─ dir_with_nested_java_files/ - │ ├─ nested_dir_with_java_files/ - │ │ ├─ file_G.java - │ │ └─ file_J.java - │ └─ nested_dir_with_no_java_file/ - ├─ dir_with_no_java_file/ - └─ ..."""; + targetPath/ + └─ dir_A/ + └─ dir_A_sub/"""; + assertThat(result).isEqualTo(expected); } - @Test - void example_compact_dir() { + @Nested + class WithSorting { + @Test + void combine_filtering_and_sorting() { // @formatter:off - var path = FileStructureCreator - .forTargetPath(root) - .createAndEnterDirectory("level1") - .createAndEnterDirectory("level2-1") - .createAndEnterDirectory("level3-1") - .createAndEnterDirectory("level4-1") - .createFiles("file4-1#", 3) - .up() // level4 - .createAndEnterDirectory("level4-2") - .createFiles("file4-2#", 3) - .up() // level4 - .up() // level3 - .up() // level2 - .up() // level1 + var path = FileStructureCreator.forTargetPath(root) + .createAndEnterDirectory("dir_A") + .createFile("file_A3.java") + .createFile("file_A2.java") + .createFile("file_Z4.java") + .createFile("file_A1.java") + .up() + .createAndEnterDirectory("dir_B") + .createFile("file_B1.java") + .up() .getPath(); // @formatter:on - var dirFilter = PathMatchers.hasNameEndingWith("1"); - var fileFilter = PathMatchers.hasExtension("java"); - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withCompactDirectories(true)) - .customizeOptions(options -> options.filterDirectories(dirFilter)) - .customizeOptions(options -> options.filterFiles(fileFilter)) - .build(); + var fileFilter = PathMatchers.hasExtension("java"); + + FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.sort(PathSorts.ALPHABETICAL.reversed())) + .customizeOptions(options -> options.filterFiles(fileFilter)) + .build(); + + var result = printer.prettyPrint(path); + var expected = """ + targetPath/ + ├─ dir_B/ + │ └─ file_B1.java + └─ dir_A/ + ├─ file_Z4.java + ├─ file_A3.java + ├─ file_A2.java + └─ file_A1.java"""; + assertThat(result).isEqualTo(expected); + } + + } + + @Nested + class WithChildLimit { + + private void combine_filtering_and_childLimit(int limit, String expected) { + // @formatter:off + var path = FileStructureCreator.forTargetPath(root) + .createAndEnterDirectory("dir_A") + .createFile("file_A1.java") + .createFile("file_A2.java") + .createFile("file_A3.java") + .up() + .createAndEnterDirectory("dir_B") + .createFile("file_B1.java") + .createFile("file_B2.java") + .createFile("file_B3.java") + .up() + .getPath(); + // @formatter:on + + var fileFilter = PathMatchers.hasExtension("java"); + + FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(limit)) + .customizeOptions(options -> options.filterFiles(fileFilter)) + .build(); + + var result = printer.prettyPrint(path); + assertThat(result).isEqualTo(expected); + } + + @Test + void childLimit_1() { + var expected = """ + targetPath/ + ├─ dir_A/ + │ ├─ file_A1.java + │ └─ ... + └─ ..."""; + + combine_filtering_and_childLimit(1, expected); + } + + @Test + void childLimit_2() { + var expected = """ + targetPath/ + ├─ dir_A/ + │ ├─ file_A1.java + │ ├─ file_A2.java + │ └─ ... + └─ dir_B/ + ├─ file_B1.java + ├─ file_B2.java + └─ ..."""; + + combine_filtering_and_childLimit(2, expected); + } + + @Test + void childLimit_3() { + var expected = """ + targetPath/ + ├─ dir_A/ + │ ├─ file_A1.java + │ ├─ file_A2.java + │ └─ file_A3.java + └─ dir_B/ + ├─ file_B1.java + ├─ file_B2.java + └─ file_B3.java"""; + + combine_filtering_and_childLimit(3, expected); + } + + } + + @Nested + class WithCompactDir { + + @Test + void nominal() { + + // @formatter:off + var path = FileStructureCreator + .forTargetPath(root) + .createAndEnterDirectory("level1-1") + .createAndEnterDirectory("level2-1") + .createAndEnterDirectory("level3-1") + .createFile("level3-1#1.java") + .createFile("level3-1#2.java") + .createFile("level3-1#3.java") + .createAndEnterDirectory("level4-1") + .createAndEnterDirectory("level5-1") + .createFile("level5-1#1.java") + .createFile("level5-1#2.java") + .createFile("level5-1#3.java") + .up() // level5 + .up() // level4 + .createAndEnterDirectory("level4-2") + .createAndEnterDirectory("level5-2") + .createFile("level5-2#1.java") + .createFile("level5-2#2.java") + .createFile("level5-2#3.java") + .up() // level5 + .up() // level4 + .up() // level3 + .up() // level2 + .up() // level1 + .getPath(); + // @formatter:on + + var dirFilter = PathMatchers.hasNameEndingWith("1"); + var fileFilter = PathMatchers.hasExtension("java"); + + FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withCompactDirectories(true)) + .customizeOptions(options -> options.filterDirectories(dirFilter)) + .customizeOptions(options -> options.filterFiles(fileFilter)) + .build(); + + var result = printer.prettyPrint(path); + var expected = """ + targetPath/ + └─ level1-1/level2-1/level3-1/ + ├─ level3-1#1.java + ├─ level3-1#2.java + ├─ level3-1#3.java + └─ level4-1/level5-1/ + ├─ level5-1#1.java + ├─ level5-1#2.java + └─ level5-1#3.java"""; + assertThat(result).isEqualTo(expected); + } - var result = printer.prettyPrint(path); - var expected = """ - targetPath/ - └─ level1/level2-1/level3-1/level4-1/"""; - assertThat(result).isEqualTo(expected); } } diff --git a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java index 2eb886b..aa355ed 100644 --- a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/LineExtensionTest.java @@ -28,39 +28,6 @@ void emptyDir() { assertThat(result).isEqualTo(expected); } - @Test - void example_dir_match() { - - var printedPath = Path.of("src/test/resources/line_extension"); - - Function lineExtension = LineExtensions.builder() - .add(PathMatchers.hasRelativePathMatchingGlob(printedPath, "src/main/java/api"), "\t\t\t// All API code: controllers, etc.") - .add(PathMatchers.hasRelativePathMatchingGlob(printedPath, "src/main/java/domain"), "\t\t\t// All domain code: value objects, etc.") - .add(PathMatchers.hasRelativePathMatchingGlob(printedPath, "src/main/java/infra"), "\t\t\t// All infra code: database, email service, etc.") - .add(PathMatchers.hasNameMatchingGlob("*.properties"), "\t// Config file") - .build(); - - var printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withLineExtension(lineExtension)) - .build(); - - var result = printer.prettyPrint(printedPath); - var expected = """ - line_extension/ - └─ src/ - └─ main/ - ├─ java/ - │ ├─ api/ // All API code: controllers, etc. - │ │ └─ Controller.java - │ ├─ domain/ // All domain code: value objects, etc. - │ │ └─ ValueObject.java - │ └─ infra/ // All infra code: database, email service, etc. - │ └─ Repository.java - └─ resources/ - └─ application.properties // Config file"""; - assertThat(result).isEqualTo(expected); - } - @Test void compact_dir_first_dir() { diff --git a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java index 97f35aa..d9d1029 100644 --- a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/SortingTest.java @@ -13,29 +13,6 @@ class SortingTest { @TempDir private Path root; - @Test - void example() { - - FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.sort(PathSorts.DIRECTORY_FIRST)) - .build(); - - var result = printer.prettyPrint("src/test/resources/sorting"); - var expected = """ - sorting/ - ├─ c_dir/ - │ └─ c_file - ├─ d_dir/ - │ ├─ d_b_dir/ - │ │ └─ d_b_file - │ └─ d_a_file - ├─ a_file - ├─ b_file - ├─ x_file - └─ y_file"""; - assertThat(result).isEqualTo(expected); - } - // ---------- Alphabetical ---------- private Path buildDefaultPath() { @@ -111,19 +88,14 @@ void fileSize() { .customizeOptions(options -> options.sort(PathSorts.BY_FILE_SIZE)) .build(); - var result = printer.prettyPrint("src/test/resources/sorting"); + var result = printer.prettyPrint("src/test/resources/sorting/by_file_size"); var expected = """ - sorting/ - ├─ c_dir/ - │ └─ c_file - ├─ d_dir/ - │ ├─ d_b_dir/ - │ │ └─ d_b_file - │ └─ d_a_file - ├─ y_file - ├─ x_file - ├─ a_file - └─ b_file"""; + by_file_size/ + ├─ file_3 + ├─ file_1 + ├─ file_4 + ├─ file_2 + └─ file_5"""; assertThat(result).isEqualTo(expected); } diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/images/landscape.jpeg b/jfiletreeprettyprinter-core/src/test/resources/base/images/landscape.jpeg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/file_0_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/file_0_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/folder_1/file_1_5 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_01 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_01 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_02 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_02 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_03 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_03 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_04 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_04 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_05 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_05 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_06 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_06 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_07 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_07 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_08 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_08 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_09 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_09 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_10 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_10 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_11 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_11 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_12 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_12 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_13 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_13 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_14 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_14 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_15 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_15 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_16 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_16 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_17 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_17 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_18 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_18 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_19 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_19 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_20 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_dynamic/node_modules/file_node_20 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/file_0_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/file_0_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_1/file_1_5 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_2/file_2_5 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_3/file_3_5 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_4/file_4_5 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_1 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_2 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_3 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_4 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_5 b/jfiletreeprettyprinter-core/src/test/resources/child_limit_static/folder_5/file_5_5 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_1 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_2 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/file_1_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_1 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_2 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/file_2_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_1 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_2 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/file_3_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/file_4_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 b/jfiletreeprettyprinter-core/src/test/resources/depth_limit/level_1/level_2/level_3/level_4/level_5/file_5_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.apk b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.apk deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.app b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.app deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.bin b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.bin deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.exe b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.exe deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.msi b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file.msi deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file2.ipa b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/executables/file2.ipa deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.dll b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.dll deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.lib b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.lib deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.so b/jfiletreeprettyprinter-core/src/test/resources/emojis/applications/libs/file.so deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.7z b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.7z deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.gz b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.gz deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.img b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.img deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.iso b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.iso deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.rar b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.rar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.tar b/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.tar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/.gitignore b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/build.gradle b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/build.gradle deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/makefile b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/package.json b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/package.json deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/pom.xml b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/build_tools/pom.xml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/docker-compose.yml b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/docker-compose.yml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.c b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.c deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.class deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cpp b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cs b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.cs deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.css b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.css deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htm b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htm deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.html b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.html deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htmx b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.htmx deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.jar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.java b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.less b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.less deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.php b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.php deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.py b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.py deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.scss b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.scss deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.sql b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.sql deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.ts b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/lang/file.ts deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bash b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bash deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bat b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.bat deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.sh b/jfiletreeprettyprinter-core/src/test/resources/emojis/code/scripting/file.sh deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.cfg b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.cfg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.conf b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.conf deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.csv b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.csv deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ini b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ini deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.json b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.json deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ods b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.ods deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.properties b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.properties deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xls b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xls deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xlsx b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xlsx deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xml b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.xml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yaml b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yml b/jfiletreeprettyprinter-core/src/test/resources/emojis/data/file.yml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.doc b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.doc deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.docx b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.docx deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.epub b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.epub deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.odt b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.odt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.pdf b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.pdf deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.rtf b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.rtf deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.txt b/jfiletreeprettyprinter-core/src/test/resources/emojis/doc/file.txt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/file.unknown_extension b/jfiletreeprettyprinter-core/src/test/resources/emojis/file.unknown_extension deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/file_without_extension b/jfiletreeprettyprinter-core/src/test/resources/emojis/file_without_extension deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/changelog.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/contributing.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/license.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/readme.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/roadmap.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security.md b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/github/security.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/robots.txt b/jfiletreeprettyprinter-core/src/test/resources/emojis/internet/robots.txt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.aac b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.aac deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.flac b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.flac deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.midi b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.midi deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.mp3 b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.ogg b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.ogg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.wav b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/audio/file.wav deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.bmp b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.bmp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.gif b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.gif deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.ico b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.ico deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpeg b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpeg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpg b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.png b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.png deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.svg b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/images/file.svg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.avi b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.avi deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mkv b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mkv deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mov b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mov deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mp4 b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.mp4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.webm b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.webm deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.wmv b/jfiletreeprettyprinter-core/src/test/resources/emojis/media/video/file.wmv deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.bak b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.bak deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.crt b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.crt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.key b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.key deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.log b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.log deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pem b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pem deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pub b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.pub deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.tmp b/jfiletreeprettyprinter-core/src/test/resources/emojis/system/file.tmp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_B.java b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_B.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_C.cpp b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_C.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_D.ts b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_D.ts deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_E.java b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_java_files/file_E.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_G.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_H.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_I.ts deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_java_files/file_J.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_K.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_nested_java_files/nested_dir_with_no_java_file/file_L.ts deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_M.cpp b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_M.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_N.ts b/jfiletreeprettyprinter-core/src/test/resources/filtering/dir_with_no_java_file/file_N.ts deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/filtering/file_A.java b/jfiletreeprettyprinter-core/src/test/resources/filtering/file_A.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/api/Controller.java b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/api/Controller.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/domain/ValueObject.java b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/domain/ValueObject.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/infra/Repository.java b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/java/infra/Repository.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/resources/application.properties b/jfiletreeprettyprinter-core/src/test/resources/line_extension/src/main/resources/application.properties deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#1 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#2 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/file1#2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#1 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#2 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/file2#2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#1 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#2 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/file3#2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#1 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#2 b/jfiletreeprettyprinter-core/src/test/resources/max_depth/level1/level2/level3/level4/file4#2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file1 b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file2 b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/file2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file1 b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file2 b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file3 b/jfiletreeprettyprinter-core/src/test/resources/single_directory_child/this/is/single/directory/child/file3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/a_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/a_file deleted file mode 100644 index 4632e06..0000000 --- a/jfiletreeprettyprinter-core/src/test/resources/sorting/a_file +++ /dev/null @@ -1 +0,0 @@ -123456 \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_1 b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_1 new file mode 100644 index 0000000..274c005 --- /dev/null +++ b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_1 @@ -0,0 +1 @@ +1234 \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_2 b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_2 new file mode 100644 index 0000000..8615dba --- /dev/null +++ b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_2 @@ -0,0 +1 @@ +1234567 \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/x_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_3 similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/sorting/x_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_3 diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_4 b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_4 new file mode 100644 index 0000000..bd41cba --- /dev/null +++ b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_4 @@ -0,0 +1 @@ +12345 \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/b_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_5 similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/sorting/b_file rename to jfiletreeprettyprinter-core/src/test/resources/sorting/by_file_size/file_5 diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/c_dir/c_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/c_dir/c_file deleted file mode 100644 index 3b0fe33..0000000 --- a/jfiletreeprettyprinter-core/src/test/resources/sorting/c_dir/c_file +++ /dev/null @@ -1 +0,0 @@ -small file \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_a_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_a_file deleted file mode 100644 index 3b0fe33..0000000 --- a/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_a_file +++ /dev/null @@ -1 +0,0 @@ -small file \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_b_dir/d_b_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_b_dir/d_b_file deleted file mode 100644 index 3b0fe33..0000000 --- a/jfiletreeprettyprinter-core/src/test/resources/sorting/d_dir/d_b_dir/d_b_file +++ /dev/null @@ -1 +0,0 @@ -small file \ No newline at end of file diff --git a/jfiletreeprettyprinter-core/src/test/resources/sorting/y_file b/jfiletreeprettyprinter-core/src/test/resources/sorting/y_file deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/tree_format/file_1 b/jfiletreeprettyprinter-core/src/test/resources/tree_format/file_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/tree_format/file_2 b/jfiletreeprettyprinter-core/src/test/resources/tree_format/file_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_1 b/jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_1 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_2 b/jfiletreeprettyprinter-core/src/test/resources/tree_format/subFolder/subFile_2 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java index c43c1a6..1a144ee 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsage.java @@ -5,9 +5,12 @@ public class BasicUsage { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.createDefault(); - var tree = prettyPrinter.prettyPrint("src/main/resources/base"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/base"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java index 520b6e9..7cd86f3 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamic.java @@ -7,6 +7,10 @@ public class ChildLimitDynamic { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var childLimit = ChildLimits.builder() .setDefault(ChildLimits.UNLIMITED) // Unlimited children by default .add(PathMatchers.hasName("node_modules"), 0) // Do NOT print any children in "node_modules" folder @@ -14,8 +18,7 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withChildLimit(childLimit)) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/child_limit_dynamic"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/child_limit_dynamic"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java index 3e64480..e61a035 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStatic.java @@ -5,11 +5,14 @@ public class ChildLimitStatic { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withChildLimit(3)) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/child_limit_static"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/child_limit_static"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java index a278dd6..685f62f 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectories.java @@ -5,11 +5,14 @@ public class CompactDirectories { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withCompactDirectories(true)) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/single_directory_child"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/single_directory_child"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java index 248318b..fb7a859 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Emojis.java @@ -5,11 +5,14 @@ public class Emojis { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withDefaultEmojis()) // or withEmojis(EmojiMapping) for custom mapping .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/emojis"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/emojis"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java index 576aeba..ddb9525 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormat.java @@ -6,11 +6,14 @@ public class FileTreeFormat { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withTreeFormat(TreeFormats.CLASSIC_ASCII)) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/tree_format"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/tree_format"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java index fc60a74..dd73910 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Filtering.java @@ -6,6 +6,10 @@ public class Filtering { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var excludeDirWithNoJavaFiles = PathMatchers.not(PathMatchers.hasNameEndingWith("no_java_file")); var hasJavaExtension = PathMatchers.hasExtension("java"); @@ -17,8 +21,7 @@ public static void main(String[] args) { ) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/filtering"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/filtering"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java index 17bfe94..9e432e8 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtension.java @@ -9,6 +9,10 @@ public class LineExtension { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var printedPath = Path.of("src/main/resources/line_extension"); Function lineExtension = LineExtensions.builder() @@ -22,8 +26,8 @@ public static void main(String[] args) { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withLineExtension(lineExtension)) .build(); - var tree = prettyPrinter.prettyPrint(printedPath); - System.out.println(tree); + + return prettyPrinter.prettyPrint(printedPath); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java index 74f6ba3..233e3b4 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepth.java @@ -5,11 +5,14 @@ public class MaxDepth { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.withMaxDepth(3)) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/max_depth"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/max_depth"); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java index 7036b22..0857628 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java @@ -11,7 +11,41 @@ public class ProjectStructure { + /* + ================================ + Expected result + ================================ + + 📂 JFileTreePrettyPrinter/ + ├─ 📂 jfiletreeprettyprinter-core/ // The Java lib + │ ├─ 📂 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ + │ │ └─ ☕ FileTreePrettyPrinter.java // Lib main entry point + │ └─ ... + ├─ 📂 jfiletreeprettyprinter-examples/ // Some examples + │ └─ ... + ├─ 📂 jfiletreeprettyprinter-cli/ // Everything to build the executable + │ └─ ... + ├─ 📂 assets/ + │ └─ 🖼️ project-structure.png // This image + ├─ 📂 docs/ + │ ├─ 📝 How-to-build-a-native-executable-locally.md + │ └─ 📝 Release-process.md + ├─ 🆕 CHANGELOG.md + ├─ 🤝 CONTRIBUTING.md + ├─ ⚖️ LICENSE + ├─ 📘 README.md // You're reading at this! + ├─ 🗺️ ROADMAP.md + ├─ 🛡️ SECURITY.md + ├─ 🛠️ pom.xml + └─ 📜 runMutationTests.sh + + */ + public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { /* * ========================================================================================== @@ -121,38 +155,7 @@ public static void main(String[] args) { /* * Pretty print and display the result! */ - var tree = prettyPrinter.prettyPrint(projectFolder); - System.out.println(tree); - - /* - ================================ - Expected result - ================================ - - 📂 JFileTreePrettyPrinter/ - ├─ 📂 jfiletreeprettyprinter-core/ // The Java lib - │ ├─ 📂 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ - │ │ └─ ☕ FileTreePrettyPrinter.java // Lib main entry point - │ └─ ... - ├─ 📂 jfiletreeprettyprinter-examples/ // Some examples - │ └─ ... - ├─ 📂 jfiletreeprettyprinter-cli/ // Everything to build the executable - │ └─ ... - ├─ 📂 assets/ - │ └─ 🖼️ project-structure.png // This image - ├─ 📂 docs/ - │ ├─ 📝 How-to-build-a-native-executable-locally.md - │ └─ 📝 Release-process.md - ├─ 🆕 CHANGELOG.md - ├─ 🤝 CONTRIBUTING.md - ├─ ⚖️ LICENSE - ├─ 📘 README.md // You're reading at this! - ├─ 🗺️ ROADMAP.md - ├─ 🛡️ SECURITY.md - ├─ 🛠️ pom.xml - └─ 📜 runMutationTests.sh - - */ + return prettyPrinter.prettyPrint(projectFolder); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java index 4a9e7eb..9519839 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/Sorting.java @@ -6,11 +6,14 @@ public class Sorting { public static void main(String[] args) { + System.out.println(run()); + } + + public static String run() { var prettyPrinter = FileTreePrettyPrinter.builder() .customizeOptions(options -> options.sort(PathSorts.DIRECTORY_FIRST)) .build(); - var tree = prettyPrinter.prettyPrint("src/main/resources/sorting"); - System.out.println(tree); + return prettyPrinter.prettyPrint("src/main/resources/sorting"); } } diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/Dockerfile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/Dockerfile similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/emojis/code/Dockerfile rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/Dockerfile diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/code/Jenkinsfile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/Jenkinsfile similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/emojis/code/Jenkinsfile rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/Jenkinsfile diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.apk b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.apk deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.app b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.app deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.bin b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.bin deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.exe b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.exe deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.msi b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file.msi deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file2.ipa b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/executables/file2.ipa deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.dll b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.dll deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.lib b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.lib deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.so b/jfiletreeprettyprinter-examples/src/main/resources/emojis/applications/libs/file.so deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.7z b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.7z deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.gz b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.gz deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.img b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.img deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.iso b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.iso deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.rar b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.rar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.tar b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.tar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.zip b/jfiletreeprettyprinter-examples/src/main/resources/emojis/archives/file.zip deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/.gitignore b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/.gitignore deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Dockerfile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Dockerfile deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Jenkinsfile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/Jenkinsfile deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/build.gradle b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/build.gradle deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/makefile b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/makefile deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/package.json b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/package.json deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/pom.xml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/build_tools/pom.xml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/docker-compose.yml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/docker-compose.yml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.c b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.c deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.class b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.class deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cpp b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cpp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cs b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.cs deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.css b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.css deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htm b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htm deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.html b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.html deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htmx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.htmx deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.jar b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.jar deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.java b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.java deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.less b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.less deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.php b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.php deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.py b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.py deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.scss b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.scss deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.sql b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.sql deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.ts b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/lang/file.ts deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bash b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bash deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bat b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.bat deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.sh b/jfiletreeprettyprinter-examples/src/main/resources/emojis/code/scripting/file.sh deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.cfg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.cfg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.conf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.conf deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.csv b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.csv deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ini b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ini deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.json b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.json deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ods b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.ods deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.properties b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.properties deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xls b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xls deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xlsx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xlsx deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.xml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yaml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yaml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yml b/jfiletreeprettyprinter-examples/src/main/resources/emojis/data/file.yml deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.doc b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.doc deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.docx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.docx deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.epub b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.epub deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.odt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.odt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.pdf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.pdf deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.rtf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.rtf deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.txt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/doc/file.txt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/businessPlan.pdf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.avi similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/businessPlan.pdf rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.avi diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/businessProject.pdf b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.docx similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/businessProject.pdf rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.docx diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/cars/Ferrari.doc b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.ini similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/cars/Ferrari.doc rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.ini diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/cars/Porsche.doc b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.java similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/cars/Porsche.doc rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.java diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/diyIdeas.docx b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.jpeg similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/diyIdeas.docx rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.jpeg diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/giftIdeas.txt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.mp3 similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/giftIdeas.txt rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.mp3 diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/images/funnyCat.gif b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.pdf similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/images/funnyCat.gif rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.pdf diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.unknown_extension b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.unknown_extension deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheBeach.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.xlsx similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheBeach.jpeg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.xlsx diff --git a/jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.zip b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file.zip similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/emojis/archives/file.zip rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/file.zip diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/file_without_extension b/jfiletreeprettyprinter-examples/src/main/resources/emojis/file_without_extension deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/changelog.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/contributing.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/license.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/readme.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/roadmap.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security.md b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/github/security.md deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/robots.txt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/internet/robots.txt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.aac b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.aac deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.flac b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.flac deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.midi b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.midi deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.mp3 b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.mp3 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.ogg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.ogg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.wav b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/audio/file.wav deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.bmp b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.bmp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.gif b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.gif deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.ico b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.ico deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpeg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.jpg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.png b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.png deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.svg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/images/file.svg deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.avi b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.avi deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mkv b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mkv deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mov b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mov deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mp4 b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.mp4 deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.webm b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.webm deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.wmv b/jfiletreeprettyprinter-examples/src/main/resources/emojis/media/video/file.wmv deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheZoo.jpeg b/jfiletreeprettyprinter-examples/src/main/resources/emojis/readme similarity index 100% rename from jfiletreeprettyprinter-core/src/test/resources/base/images/holidays/meAtTheZoo.jpeg rename to jfiletreeprettyprinter-examples/src/main/resources/emojis/readme diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.bak b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.bak deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.crt b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.crt deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.key b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.key deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.log b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.log deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pem b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pem deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pub b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.pub deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.tmp b/jfiletreeprettyprinter-examples/src/main/resources/emojis/system/file.tmp deleted file mode 100644 index e69de29..0000000 diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java deleted file mode 100644 index 71139e4..0000000 --- a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/EmojisTest.java +++ /dev/null @@ -1,150 +0,0 @@ -package io.github.computerdaddyguy.jfiletreeprettyprinter; - -import static org.assertj.core.api.Assertions.assertThat; - -import io.github.computerdaddyguy.jfiletreeprettyprinter.options.PrettyPrintOptions; -import java.nio.file.Path; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.io.TempDir; - -class EmojisTest { - - @TempDir - private Path root; - - @Test - void emojis() { - - var printer = FileTreePrettyPrinter.builder() - .customizeOptions(PrettyPrintOptions::withDefaultEmojis) - .build(); - - var result = printer.prettyPrint("src/main/resources/emojis"); - var expected = """ - 📂 emojis/ - ├─ 📂 applications/ - │ ├─ 📂 executables/ - │ │ ├─ 📱 file.apk - │ │ ├─ 🖥️ file.app - │ │ ├─ ⚙️ file.bin - │ │ ├─ ⚙️ file.exe - │ │ ├─ 📦 file.msi - │ │ └─ 📱 file2.ipa - │ └─ 📂 libs/ - │ ├─ 🧩 file.dll - │ ├─ 🧩 file.lib - │ └─ 🧩 file.so - ├─ 📂 archives/ - │ ├─ 📦 file.7z - │ ├─ 📦 file.gz - │ ├─ 💿 file.img - │ ├─ 💿 file.iso - │ ├─ 📦 file.rar - │ ├─ 📦 file.tar - │ └─ 📦 file.zip - ├─ 📂 code/ - │ ├─ 🚫 .gitignore - │ ├─ 🐳 Dockerfile - │ ├─ 🤵 Jenkinsfile - │ ├─ 📂 build_tools/ - │ │ ├─ 🛠️ build.gradle - │ │ ├─ 🛠️ makefile - │ │ ├─ 🛠️ package.json - │ │ └─ 🛠️ pom.xml - │ ├─ ⚙️ docker-compose.yml - │ ├─ 📂 lang/ - │ │ ├─ 💠 file.c - │ │ ├─ ☕ file.class - │ │ ├─ 💠 file.cpp - │ │ ├─ 💠 file.cs - │ │ ├─ 🎨 file.css - │ │ ├─ 🌐 file.htm - │ │ ├─ 🌐 file.html - │ │ ├─ 🌐 file.htmx - │ │ ├─ 📦 file.jar - │ │ ├─ ☕ file.java - │ │ ├─ 🎨 file.less - │ │ ├─ 🐘 file.php - │ │ ├─ 🐍 file.py - │ │ ├─ 🎨 file.scss - │ │ ├─ 🗄️ file.sql - │ │ └─ 🔷 file.ts - │ └─ 📂 scripting/ - │ ├─ 📜 file.bash - │ ├─ 📜 file.bat - │ └─ 📜 file.sh - ├─ 📂 data/ - │ ├─ ⚙️ file.cfg - │ ├─ ⚙️ file.conf - │ ├─ 📊 file.csv - │ ├─ ⚙️ file.ini - │ ├─ 📝 file.json - │ ├─ 📊 file.ods - │ ├─ ⚙️ file.properties - │ ├─ 📊 file.xls - │ ├─ 📊 file.xlsx - │ ├─ 📝 file.xml - │ ├─ 📝 file.yaml - │ └─ 📝 file.yml - ├─ 📂 doc/ - │ ├─ 📝 file.doc - │ ├─ 📝 file.docx - │ ├─ 📚 file.epub - │ ├─ 📝 file.md - │ ├─ 📝 file.odt - │ ├─ 📕 file.pdf - │ ├─ 📝 file.rtf - │ └─ 📝 file.txt - ├─ 📄 file.unknown_extension - ├─ 📄 file_without_extension - ├─ 📂 internet/ - │ ├─ 📂 github/ - │ │ ├─ 🆕 changelog - │ │ ├─ 🆕 changelog.md - │ │ ├─ 🤝 contributing - │ │ ├─ 🤝 contributing.md - │ │ ├─ ⚖️ license - │ │ ├─ ⚖️ license.md - │ │ ├─ 📘 readme - │ │ ├─ 📘 readme.md - │ │ ├─ 🗺️ roadmap - │ │ ├─ 🗺️ roadmap.md - │ │ ├─ 🛡️ security - │ │ └─ 🛡️ security.md - │ └─ 🤖 robots.txt - ├─ 📂 media/ - │ ├─ 📂 audio/ - │ │ ├─ 🎵 file.aac - │ │ ├─ 🎵 file.flac - │ │ ├─ 🎹 file.midi - │ │ ├─ 🎵 file.mp3 - │ │ ├─ 🎵 file.ogg - │ │ └─ 🎵 file.wav - │ ├─ 📂 images/ - │ │ ├─ 🖼️ file.bmp - │ │ ├─ 🎞️ file.gif - │ │ ├─ 🖼️ file.ico - │ │ ├─ 🖼️ file.jpeg - │ │ ├─ 🖼️ file.jpg - │ │ ├─ 🖼️ file.png - │ │ └─ ✒️ file.svg - │ └─ 📂 video/ - │ ├─ 🎬 file.avi - │ ├─ 🎬 file.mkv - │ ├─ 🎬 file.mov - │ ├─ 🎬 file.mp4 - │ ├─ 🎬 file.webm - │ └─ 🎬 file.wmv - └─ 📂 system/ - ├─ 💾 file.bak - ├─ 🔐 file.crt - ├─ 🔑 file.key - ├─ 📜 file.log - ├─ 🔐 file.pem - ├─ 🔓 file.pub - └─ 🗑️ file.tmp"""; - - assertThat(result).isEqualTo(expected); - } - -} diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsageTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsageTest.java new file mode 100644 index 0000000..cdb1282 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/BasicUsageTest.java @@ -0,0 +1,32 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class BasicUsageTest { + + @Test + void test() { + var result = BasicUsage.run(); + + var expected = """ + base/ + ├─ businessPlan.pdf + ├─ businessProject.pdf + ├─ cars/ + │ ├─ Ferrari.doc + │ └─ Porsche.doc + ├─ diyIdeas.docx + ├─ giftIdeas.txt + └─ images/ + ├─ funnyCat.gif + ├─ holidays/ + │ ├─ meAtTheBeach.jpeg + │ └─ meAtTheZoo.jpeg + └─ landscape.jpeg"""; + + assertThat(result).isEqualTo(expected); + } + +} diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamicTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamicTest.java new file mode 100644 index 0000000..876af59 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitDynamicTest.java @@ -0,0 +1,28 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class ChildLimitDynamicTest { + + @Test + void test() { + var result = ChildLimitDynamic.run(); + + var expected = """ + child_limit_dynamic/ + ├─ file_0_1 + ├─ folder_1/ + │ ├─ file_1_1 + │ ├─ file_1_2 + │ ├─ file_1_3 + │ ├─ file_1_4 + │ └─ file_1_5 + └─ node_modules/ + └─ ..."""; + + assertThat(result).isEqualTo(expected); + } + +} diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStaticTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStaticTest.java new file mode 100644 index 0000000..fde1e9a --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ChildLimitStaticTest.java @@ -0,0 +1,31 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class ChildLimitStaticTest { + + @Test + void test() { + var result = ChildLimitStatic.run(); + + var expected = """ + child_limit_static/ + ├─ file_0_1 + ├─ folder_1/ + │ ├─ file_1_1 + │ ├─ file_1_2 + │ ├─ file_1_3 + │ └─ ... + ├─ folder_2/ + │ ├─ file_2_1 + │ ├─ file_2_2 + │ ├─ file_2_3 + │ └─ ... + └─ ..."""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectoriesTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectoriesTest.java new file mode 100644 index 0000000..c074d58 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/CompactDirectoriesTest.java @@ -0,0 +1,25 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class CompactDirectoriesTest { + + @Test + void test() { + var result = CompactDirectories.run(); + + var expected = """ + single_directory_child/ + ├─ file1 + ├─ file2 + └─ this/is/single/directory/child/ + ├─ file1 + ├─ file2 + └─ file3"""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/EmojisTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/EmojisTest.java new file mode 100644 index 0000000..417d698 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/EmojisTest.java @@ -0,0 +1,31 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class EmojisTest { + + @Test + void test() { + var result = Emojis.run(); + + var expected = """ + 📂 emojis/ + ├─ 🐳 Dockerfile + ├─ 🤵 Jenkinsfile + ├─ 🎬 file.avi + ├─ 📝 file.docx + ├─ ⚙️ file.ini + ├─ ☕ file.java + ├─ 🖼️ file.jpeg + ├─ 🎵 file.mp3 + ├─ 📕 file.pdf + ├─ 📊 file.xlsx + ├─ 📦 file.zip + └─ 📘 readme"""; + + assertThat(result).isEqualTo(expected); + } + +} diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormatTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormatTest.java new file mode 100644 index 0000000..55cda6d --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FileTreeFormatTest.java @@ -0,0 +1,24 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class FileTreeFormatTest { + + @Test + void test() { + var result = FileTreeFormat.run(); + + var expected = """ + tree_format/ + |-- file_1 + |-- file_2 + `-- subFolder/ + |-- subFile_1 + `-- subFile_2"""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FilteringTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FilteringTest.java new file mode 100644 index 0000000..9a5f147 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/FilteringTest.java @@ -0,0 +1,27 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class FilteringTest { + + @Test + void test() { + var result = Filtering.run(); + + var expected = """ + filtering/ + ├─ dir_with_java_files/ + │ ├─ file_B.java + │ └─ file_E.java + ├─ dir_with_nested_java_files/ + │ └─ nested_dir_with_java_files/ + │ ├─ file_G.java + │ └─ file_J.java + └─ file_A.java"""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtensionTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtensionTest.java new file mode 100644 index 0000000..9a92d70 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/LineExtensionTest.java @@ -0,0 +1,30 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class LineExtensionTest { + + @Test + void test() { + var result = LineExtension.run(); + + var expected = """ + line_extension/ + └─ src/ + └─ main/ + ├─ java/ + │ ├─ api/ // All API code: controllers, etc. + │ │ └─ Controller.java + │ ├─ domain/ // All domain code: value objects, etc. + │ │ └─ ValueObject.java + │ └─ infra/ // All infra code: database, email service, etc. + │ └─ Repository.java + └─ resources/ + └─ application.properties // Config file"""; + + assertThat(result).isEqualTo(expected); + } + +} diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepthTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepthTest.java new file mode 100644 index 0000000..ac034ba --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/MaxDepthTest.java @@ -0,0 +1,27 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class MaxDepthTest { + + @Test + void test() { + var result = MaxDepth.run(); + + var expected = """ + max_depth/ + └─ level1/ + ├─ file1#1 + ├─ file1#2 + └─ level2/ + ├─ file2#1 + ├─ file2#2 + └─ level3/ + └─ ..."""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructureTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructureTest.java new file mode 100644 index 0000000..8bad591 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructureTest.java @@ -0,0 +1,40 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class ProjectStructureTest { + + @Test + void test() { + var result = ProjectStructure.run(); + + var expected = """ + 📂 JFileTreePrettyPrinter/ + ├─ 📂 jfiletreeprettyprinter-core/ // The Java lib + │ ├─ 📂 src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ + │ │ └─ ☕ FileTreePrettyPrinter.java // Lib main entry point + │ └─ ... + ├─ 📂 jfiletreeprettyprinter-examples/ // Some examples + │ └─ ... + ├─ 📂 jfiletreeprettyprinter-cli/ // Everything to build the executable + │ └─ ... + ├─ 📂 assets/ + │ └─ 🖼️ project-structure.png // This image + ├─ 📂 docs/ + │ ├─ 📝 How-to-build-a-native-executable-locally.md + │ └─ 📝 Release-process.md + ├─ 🆕 CHANGELOG.md + ├─ 🤝 CONTRIBUTING.md + ├─ ⚖️ LICENSE + ├─ 📘 README.md // You're reading at this! + ├─ 🗺️ ROADMAP.md + ├─ 🛡️ SECURITY.md + ├─ 🛠️ pom.xml + └─ 📜 runMutationTests.sh"""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/SortingTest.java b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/SortingTest.java new file mode 100644 index 0000000..5e4c080 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/SortingTest.java @@ -0,0 +1,29 @@ +package io.github.computerdaddyguy.jfiletreeprettyprinter.example; + +import static org.assertj.core.api.Assertions.assertThat; + +import org.junit.jupiter.api.Test; + +class SortingTest { + + @Test + void test() { + var result = Sorting.run(); + + var expected = """ + sorting/ + ├─ c_dir/ + │ └─ c_file + ├─ d_dir/ + │ ├─ d_b_dir/ + │ │ └─ d_b_file + │ └─ d_a_file + ├─ a_file + ├─ b_file + ├─ x_file + └─ y_file"""; + + assertThat(result).isEqualTo(expected); + } + +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index b5172cb..6a9500c 100644 --- a/pom.xml +++ b/pom.xml @@ -45,7 +45,7 @@ 0.11.1 9.0.2 1.7.3 - + computerdaddyguy ComputerDaddyGuy_JFileTreePrettyPrinter @@ -63,7 +63,7 @@ **/src/test/** - + @@ -79,6 +79,12 @@ ${junit.version} test + + org.junit.jupiter + junit-jupiter-params + ${junit.version} + test + org.assertj assertj-core @@ -218,7 +224,7 @@ - + From 86421746910c3c5c586db3ecf0479d88d5c86daa Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Mon, 10 Nov 2025 21:55:15 +0100 Subject: [PATCH 53/57] Fix Sonar issue --- .../jfiletreeprettyprinter/options/PrettyPrintOptions.java | 7 ++++--- .../renderer/DefaultLineRenderer.java | 5 ++--- .../jfiletreeprettyprinter/renderer/RenderingOptions.java | 3 ++- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java index 8a52df7..8cf06e3 100644 --- a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java +++ b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/options/PrettyPrintOptions.java @@ -8,6 +8,7 @@ import java.util.Objects; import java.util.function.Function; import java.util.function.ToIntFunction; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; @@ -213,11 +214,11 @@ public PrettyPrintOptions filterFiles(@Nullable PathMatcher matcher) { // ---------- Line extension ---------- @Nullable - private Function lineExtension; + private Function<@NonNull Path, @Nullable String> lineExtension; @Override @Nullable - public Function getLineExtension() { + public Function<@NonNull Path, @Nullable String> getLineExtension() { return lineExtension; } @@ -237,7 +238,7 @@ public Function getLineExtension() { * @see LineExtensions * @see LineExtensionBuilder */ - public PrettyPrintOptions withLineExtension(@Nullable Function lineExtension) { + public PrettyPrintOptions withLineExtension(@Nullable Function<@NonNull Path, @Nullable String> lineExtension) { this.lineExtension = lineExtension; return this; } diff --git a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java index f25d520..46f540e 100644 --- a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java +++ b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/DefaultLineRenderer.java @@ -8,7 +8,6 @@ import java.util.List; import java.util.Objects; import org.jspecify.annotations.NullMarked; -import org.jspecify.annotations.Nullable; @NullMarked class DefaultLineRenderer implements LineRenderer { @@ -32,12 +31,12 @@ public String renderFile(Depth depth, FileEntry fileEntry) { } @Override - public @Nullable String renderChildLimitReached(Depth depth, SkippedChildrenEntry skippedChildrenEntry) { + public String renderChildLimitReached(Depth depth, SkippedChildrenEntry skippedChildrenEntry) { return treeFormatter.format(depth) + fileFormatter.formatChildLimitReached(skippedChildrenEntry); } @Override - public @Nullable String renderMaxDepthReached(Depth depth, MaxDepthReachEntry maxDepthReachEntry) { + public String renderMaxDepthReached(Depth depth, MaxDepthReachEntry maxDepthReachEntry) { return treeFormatter.format(depth) + fileFormatter.formatMaxDepthReached(maxDepthReachEntry); } diff --git a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java index bbe1cab..e4150df 100644 --- a/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java +++ b/jfiletreeprettyprinter-core/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/renderer/RenderingOptions.java @@ -4,6 +4,7 @@ import io.github.computerdaddyguy.jfiletreeprettyprinter.options.TreeFormat; import java.nio.file.Path; import java.util.function.Function; +import org.jspecify.annotations.NonNull; import org.jspecify.annotations.NullMarked; import org.jspecify.annotations.Nullable; @@ -33,6 +34,6 @@ public interface RenderingOptions { * @return */ @Nullable - Function getLineExtension(); + Function<@NonNull Path, @Nullable String> getLineExtension(); } From 50fbd322bdbd38d04374986b38fca1849a729cf1 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Mon, 10 Nov 2025 22:10:54 +0100 Subject: [PATCH 54/57] Fix Sonar issue --- .../ChildLimitStaticTest.java | 75 +++++-------------- .../example/ProjectStructure.java | 5 +- 2 files changed, 20 insertions(+), 60 deletions(-) diff --git a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java index 66ebc5e..a05ffc0 100644 --- a/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java +++ b/jfiletreeprettyprinter-core/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/ChildLimitStaticTest.java @@ -12,101 +12,64 @@ class ChildLimitStaticTest { @TempDir private Path root; - private FileTreePrettyPrinter printer = FileTreePrettyPrinter.builder() - .customizeOptions(options -> options.withChildLimit(3)) - .build(); - @Test - void nominal() { + void empty_directory() { var path = FileStructures.emptyDirectory(root); + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(3)) + .build(); var result = printer.prettyPrint(path); var expected = "targetPath/"; assertThat(result).isEqualTo(expected); } - @Test - void dirWith_1_file() { - var path = FileStructures.simpleDirectoryWithFiles(root, 1); - var result = printer.prettyPrint(path); - var expected = """ - targetPath/ - └─ file1"""; - assertThat(result).isEqualTo(expected); - } + private void doTest(int limit, String expected) { + var path = FileStructures.simpleDirectoryWithFiles(root, 3); - @Test - void dirWith_limit_minus_one_files() { - var path = FileStructures.simpleDirectoryWithFiles(root, 2); - var result = printer.prettyPrint(path); - var expected = """ - targetPath/ - ├─ file1 - └─ file2"""; - assertThat(result).isEqualTo(expected); - } + var printer = FileTreePrettyPrinter.builder() + .customizeOptions(options -> options.withChildLimit(limit)) + .build(); - @Test - void dirWith_exact_limit_of_files() { - var path = FileStructures.simpleDirectoryWithFiles(root, 3); var result = printer.prettyPrint(path); - var expected = """ - targetPath/ - ├─ file1 - ├─ file2 - └─ file3"""; + assertThat(result).isEqualTo(expected); } @Test - void dirWith_1_extra_file() { - var path = FileStructures.simpleDirectoryWithFiles(root, 4); - var result = printer.prettyPrint(path); + void test_0_file() { var expected = """ targetPath/ - ├─ file1 - ├─ file2 - ├─ file3 └─ ..."""; - assertThat(result).isEqualTo(expected); + doTest(0, expected); } @Test - void dirWith_2_extra_files() { - var path = FileStructures.simpleDirectoryWithFiles(root, 5); - var result = printer.prettyPrint(path); + void test_1_file() { var expected = """ targetPath/ ├─ file1 - ├─ file2 - ├─ file3 └─ ..."""; - assertThat(result).isEqualTo(expected); + doTest(1, expected); } @Test - void dirWith_2_extra_files_and_1_extra_folder() { - var path = FileStructures.simpleDirectoryWithFilesAndFolders(root, 5, 1); - var result = printer.prettyPrint(path); + void test_limit_minus_one_files() { var expected = """ targetPath/ ├─ file1 ├─ file2 - ├─ file3 └─ ..."""; - assertThat(result).isEqualTo(expected); + doTest(2, expected); } @Test - void dirWith_2_extra_files_and_2_extra_folders() { - var path = FileStructures.simpleDirectoryWithFilesAndFolders(root, 5, 2); - var result = printer.prettyPrint(path); + void test_exact_limit_of_files() { var expected = """ targetPath/ ├─ file1 ├─ file2 - ├─ file3 - └─ ..."""; - assertThat(result).isEqualTo(expected); + └─ file3"""; + doTest(3, expected); } } diff --git a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java index 0857628..011a826 100644 --- a/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java +++ b/jfiletreeprettyprinter-examples/src/main/java/io/github/computerdaddyguy/jfiletreeprettyprinter/example/ProjectStructure.java @@ -74,15 +74,12 @@ public static String run() { PathMatchers.hasRelativePathMatchingGlob(projectFolder, "*/src/**") ) ); + /* * Filter for files (display only files that pass this filter) * Note: files for which the parent folder does not match the directory filter * are obviously not displayed, even if they pass the file filter. */ -// var fileFilter = PathMatchers.noneOf( -// PathMatchers.hasNameStartingWith(".") -// ); - var fileFilter = PathMatchers.anyOf( PathMatchers.hasAbsolutePathMatchingGlob("**/jfiletreeprettyprinter-core/**/FileTreePrettyPrinter.java"), PathMatchers.noneOf( From 29a7d339be3ce3aa89d00e217cbab8e84165d476 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Mon, 10 Nov 2025 22:27:17 +0100 Subject: [PATCH 55/57] Sonar config --- .github/workflows/sonarcloud.yml | 4 +++- pom.xml | 6 ------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/sonarcloud.yml b/.github/workflows/sonarcloud.yml index 801f020..40f7313 100644 --- a/.github/workflows/sonarcloud.yml +++ b/.github/workflows/sonarcloud.yml @@ -44,4 +44,6 @@ jobs: - name: Build and analyze env: SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} - run: mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ No newline at end of file + run: | + mvn clean install + mvn -B verify org.sonarsource.scanner.maven:sonar-maven-plugin:sonar \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6a9500c..02c4b44 100644 --- a/pom.xml +++ b/pom.xml @@ -51,12 +51,6 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io false - - src/main/java - - - src/test/java - **/src/test/** From 5706858aafa75cd9bf7b1f7bacb0aa1905c9a972 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Mon, 10 Nov 2025 22:32:46 +0100 Subject: [PATCH 56/57] Fix Sonar issue --- .../cli/FileTreePrettyPrinterCommandLineTest.java | 10 +++++----- pom.xml | 6 ------ 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java b/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java index 81e6210..79c7269 100644 --- a/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java +++ b/jfiletreeprettyprinter-cli/src/test/java/io/github/computerdaddyguy/jfiletreeprettyprinter/cli/FileTreePrettyPrinterCommandLineTest.java @@ -21,15 +21,15 @@ class FileTreePrettyPrinterCommandLineTest { - private ByteArrayOutputStream out_and_err; + private ByteArrayOutputStream outAndErrStream; private ConsoleOutput output; @BeforeEach void prepareSystemOut() { - out_and_err = new ByteArrayOutputStream(); + outAndErrStream = new ByteArrayOutputStream(); - output = new DefaultConsoleOutput(new PrintStream(out_and_err), new PrintStream(out_and_err)); + output = new DefaultConsoleOutput(new PrintStream(outAndErrStream), new PrintStream(outAndErrStream)); } private String[] buildCliArgs(String targetPath, @Nullable String optionsPath) { @@ -42,13 +42,13 @@ private String[] buildCliArgs(String targetPath, @Nullable String optionsPath) { private void runSuccessTest(FileTreePrettyPrinterCommandLine cli, String[] args, FileTreePrettyPrinter ref, String targetPath) { cli.executeCommand(args); - var allWrittenLines = new String(out_and_err.toByteArray()); + var allWrittenLines = new String(outAndErrStream.toByteArray()); assertThat(allWrittenLines).isEqualToNormalizingNewlines(ref.prettyPrint(targetPath) + System.lineSeparator()); } private void runErrorTest(FileTreePrettyPrinterCommandLine cli, String[] args, Consumer outputAssertor) { cli.executeCommand(args); - var allWrittenLines = new String(out_and_err.toByteArray()); + var allWrittenLines = new String(outAndErrStream.toByteArray()); outputAssertor.accept(allWrittenLines); } diff --git a/pom.xml b/pom.xml index 02c4b44..4052263 100644 --- a/pom.xml +++ b/pom.xml @@ -51,12 +51,6 @@ ComputerDaddyGuy_JFileTreePrettyPrinter https://sonarcloud.io false - - **/src/test/** - - - **/src/test/** - From b1a6c48e1711dee827e0a773b65abec7a3a2b7d6 Mon Sep 17 00:00:00 2001 From: Samuel SCHNEGG Date: Wed, 12 Nov 2025 22:42:43 +0100 Subject: [PATCH 57/57] Docs --- CHANGELOG.md | 20 +- README.md | 133 +++++++++++-- ROADMAP.md | 5 +- ...jfiletreeprettyprinter-options.schema.json | 181 ++++++++++++++++++ .../resources/cli/options/full-options.yaml | 38 ++++ 5 files changed, 351 insertions(+), 26 deletions(-) create mode 100644 jfiletreeprettyprinter-cli/src/main/resources/schemas/jfiletreeprettyprinter-options.schema.json create mode 100644 jfiletreeprettyprinter-examples/src/main/resources/cli/options/full-options.yaml diff --git a/CHANGELOG.md b/CHANGELOG.md index f1e617a..fc099f3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,11 +6,25 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). --- -## [0.1.1] - 2025-10-17 - Native executable +## [0.2.0] - 2025-11-12 - Native executable + +> [!IMPORTANT] +> Maven artifactId of Java lib changed from `jfiletreeprettyprinter` to `jfiletreeprettyprinter-core` ### Added -- Run JFileTreePrettyPrinter using command line (options in external file) -- Native executable attachment to the Github release +- Run JFileTreePrettyPrinter in command line, using native executable on Windows, Linux, MacOS (see Github release attachments): +`$ jfiletreeprettyprinter myFolder` +- Scanning and rendering options in external file: +`$ jfiletreeprettyprinter myFolder --options myOptions.json` + +### Changed +- Split code into 3 sub-modules: cli, core and examples + +--- +## [0.1.1] - 2025-11-08 - Native executable (POC) + +> [!CAUTION] +> Do not use this version (was for proof of concept only). --- ## [0.1.0] - 2025-10-13 - First beta release diff --git a/README.md b/README.md index 5a9f5d9..62c78ed 100644 --- a/README.md +++ b/README.md @@ -27,14 +27,16 @@ Supports various [options](#customization-options) to customize the directories JFileTreePrettyPrint project structure, using JFileTreePrettyPrint

-> [!IMPORTANT] -> Complete documentation available in [wiki](https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter/wiki). - * [Why use JFileTreePrettyPrinter?](#why-use-jfiletreeprettyprinter) -* [Requirements](#requirements) -* [Import dependency](#import-dependency) -* [Basic usage](#basic-usage) -* [Customization options](#customization-options) +* [Java lib](#java-lib) + * [Requirements](#requirements) + * [Import dependency](#import-dependency) + * [Basic usage](#basic-usage) + * [Customization options](#customization-options) +* [Native CLI](#native-cli) + * [Download and install](#download-and-install) + * [Usage](#cli-usage) + * [Options](#cli-options) * [Project Information](#project-information) # Why use JFileTreePrettyPrinter? @@ -44,11 +46,13 @@ Unlike a plain recursive `Files.walk()`, this library: - Supports **dynamic child limits** and **custom extensions** per line. - Is **dependency-free** (on runtime) and compatible with **Java 21+**. -# Requirements +# Java lib + +## Requirements - **Java 21 or later** -- No runtime dependencies +- No runtime dependencies! -# Import dependency +## Import dependency For Maven, import this dependency to your `pom.xml`: ```xml @@ -64,7 +68,7 @@ For Gradle: implementation "io.github.computerdaddyguy:jfiletreeprettyprinter-core:0.1.1" ``` -# Basic usage +## Basic usage ```java // Example: BasicUsage.java var printer = FileTreePrettyPrinter.createDefault(); // Create a printer with default options @@ -94,7 +98,9 @@ base/ > [!NOTE] > In case of error while reading directories or files, an [UncheckedIOException](https://docs.oracle.com/en/java/javase/21/docs/api/java.base/java/io/UncheckedIOException.html) is thrown. -# Customization options +## Customization options +> [!NOTE] +> All code below is availabe in [jfiletreeprettyprinter-examples] submodule.(jfiletreeprettyprinter-examples\src\main\java\io\github\computerdaddyguy\jfiletreeprettyprinter\example) * [Filtering](#filtering) * [Sorting](#sorting) @@ -105,7 +111,7 @@ base/ * [Max depth](#max-depth) * [Tree format](#tree-format) -## Filtering +### Filtering Files and directories can be selectively included or excluded using a custom `PathMatcher`. Filtering applies independently to files and directories. Files are filtered only if their parent directory passes the directory filter. @@ -139,7 +145,7 @@ filtering/ └─ file_A.java ``` -## Sorting +### Sorting Files and directories can be sorted using a custom comparator (default is alphabetical order). If the provided comparator considers two paths equal (i.e., returns `0`), an alphabetical comparator is applied as a tie-breaker to ensure consistent results across all systems. @@ -166,9 +172,10 @@ sorting/ └─ y_file ``` -## Emojis ❤️ +### Emojis ❤️ You can choose to use default built-in emojis, or define your own emoji mapping. -Folders use the 📂 emoji, and files will have an emoji depending on their extension (when applicable). +Folders use the 📂 emoji, and files will have an emoji depending on their name or extension (when applicable). +Define your own emoji mappings with the `EmojiMapping` class! ```java // Example: Emojis.java @@ -194,7 +201,7 @@ var prettyPrinter = FileTreePrettyPrinter.builder() └─ 🎬 file.avi ``` -## Child limit +### Child limit You can set a fixed limit to the number of children displayed for each directory. Each directory and file that pass the filter (if set) counts for one. ```java @@ -250,7 +257,7 @@ child_limit_dynamic/ └─ ... ``` -## Line extension +### Line extension You can extend each displayed path with additional information by providing a custom `Function`. This is useful to annotate your tree with comments, display file sizes, or add domain-specific notes. @@ -290,7 +297,7 @@ line_extension/ └─ application.properties // Config file ``` -## Compact directories +### Compact directories Directory chains with a single child directory are fully expanded by default, but you can inline them into a single tree entry. ```java @@ -310,7 +317,7 @@ single_directory_child/ └─ file3 ``` -## Max depth +### Max depth You can customize the default max depth (default is 20). ```java @@ -332,7 +339,7 @@ max_depth/ └─ ... (max depth reached) ``` -## Tree format +### Tree format Choose between different built-in tree formats, or create your own. The default is `UNICODE_BOX_DRAWING`, supported by all terminals, but you can also switch to use `CLASSIC_ASCII`. @@ -351,6 +358,90 @@ tree_format/ |-- subFile_1 `-- subFile_2 ``` +# Native CLI + +## Download and install +You can download the latest CLI release directly from https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter/releases/latest. +Choose the archive for your platform (Windows, Linux, or macOS), download it, and unzip it anywhere on your system. + +> [!NOTE] +> If desired, add the executable’s folder to your system’s `PATH` variable to run it from any directory. + +## CLI usage +To pretty-print a folder and its contents, simply run: +```bash +$ jfiletreeprettyprinter +``` +Example: +```bash +$ jfiletreeprettyprinter jfiletreeprettyprinter-examples/src/main/resources/base/ +base/ +├─ businessPlan.pdf +├─ businessProject.pdf +├─ cars/ +│ ├─ Ferrari.doc +│ └─ Porsche.doc +├─ diyIdeas.docx +├─ giftIdeas.txt +└─ images/ + ├─ funnyCat.gif + ├─ holidays/ + │ ├─ meAtTheBeach.jpeg + │ └─ meAtTheZoo.jpeg + └─ landscape.jpeg +``` + +To get an overview of the CLI’s capabilities and available options: +```bash +$ jfiletreeprettyprinter --help +Usage: prettyprint [-dhV] [-o] [] +Pretty-prints directory structure + [] The path to pretty print + -d, --debug debug mode + -h, --help Show this help message and exit. + -o, --options the options file + -V, --version Print version information and exit. +``` + +### UTF-8 console +If the tree symbols appear as garbled characters (e.g., Ôöé instead of ├─), your console is likely not using UTF-8 encoding. + +**Set UTF-8 Encoding** +``` +# Windows +> chcp 65001 + +# Linux (bash, zsh) +$ export LANG=en_US.UTF-8 + +# macOS (bash, zsh) +$ export LC_CTYPE=UTF-8 +``` + +## CLI options +The native CLI supports (almost all) pretty print options through an external JSON or YAML configuration file provided as an argument. + +This configuration file must comply with the [CLI options file schema](jfiletreeprettyprinter-cli/src/main/resources/schemas/jfiletreeprettyprinter-options.schema.json). +```bash +$ jfiletreeprettyprinter myFolder --options myOptions.json +``` + +See an [example file](jfiletreeprettyprinter-examples/src/main/resources/cli/options/full-options.yaml). + +### Options lookup order +If no options file is explicitly provided as argument, the CLI automatically searches for one in the following order: +1. **Inside the target path:** +A `.prettyprint` file located within the directory being printed. +1. **Beside the executable:** +A `.prettyprint` file in the same folder as the native executable. +1. **In the user’s home directory:** +A `.prettyprint` file located in the user’s home folder. +1. **Fallback:** +If no configuration file is found, default options are used — +equivalent to `PrettyPrintOptions.createDefault()`. + +> [!TIP] +> Using a `.prettyprint` file allows each project or directory to define its own display style — no need to pass extra parameters each time. # Project Information diff --git a/ROADMAP.md b/ROADMAP.md index 3bb4e06..935ea28 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -30,11 +30,12 @@ - [x] Github actions - [x] Publish `0.0.x` **alpha** on Maven Central! - [x] Publish `0.x.0` **beta** on Maven Central! +- [x] **Native CLI** + - [x] Options in external file + - [x] Distribute executable file with release in Github ## To do - [ ] Gather feedback -- [x] Use as command line (options as arguments of provided in external file) -- [x] Executable file distributed with release files in Github ## Backlog / To analyze / To implement if requested - [ ] Rework/fix Github wiki to be up to date diff --git a/jfiletreeprettyprinter-cli/src/main/resources/schemas/jfiletreeprettyprinter-options.schema.json b/jfiletreeprettyprinter-cli/src/main/resources/schemas/jfiletreeprettyprinter-options.schema.json new file mode 100644 index 0000000..139905f --- /dev/null +++ b/jfiletreeprettyprinter-cli/src/main/resources/schemas/jfiletreeprettyprinter-options.schema.json @@ -0,0 +1,181 @@ +{ + "$schema": "https://json-schema.org/draft/2020-12/schema", + "$id": "https://github.com/ComputerDaddyGuy/JFileTreePrettyPrinter/tree/main/jfiletreeprettyprinter-cli/src/main/resources/schemas/jfiletreeprettyprinter-options.schema.json", + "title": "JFileTreePrettyPrinter options", + "description": "Options file for JFileTreePrettyPrinter, JSON/YAML-based settings.", + "type": "object", + "properties": { + + "emojis": { + "type": "boolean", + "description": "Whether to display emojis next to files and directories." + }, + + "compactDirectories": { + "type": "boolean", + "description": "Whether to compact directories with a single directory child into one line." + }, + + "maxDepth": { + "type": "integer", + "description": "Maximum depth of directories to print. Negative value means unlimited." + }, + + "childLimit": { + "oneOf": [ + { + "properties": { + "type": { "const": "static" }, + "limit": { + "type": "integer", + "description": "Global limit rule to apply to all paths. Negative value means unlimited." + } + }, + "required": ["type", "limit"], + "additionalProperties": false + }, + { + "properties": { + "type": { "const": "dynamic" }, + "limits": { + "type": "array", + "description": "Dynamic list of limit rules based on path matchers. Negative value means unlimited.", + "items": { + "type": "object", + "properties": { + "limit": { + "type": "integer", + "minimum": -1, + "description": "Number of allowed children. Negative value means unlimited." + }, + "matcher": { "$ref": "#/$defs/matcher" } + }, + "required": ["limit", "matcher"], + "additionalProperties": false + } + } + }, + "required": ["type", "limits"], + "additionalProperties": false + } + ] + }, + + "filter": { + "type": "object", + "description": "Optional filters for including or excluding paths.", + "properties": { + "dir": { "$ref": "#/$defs/matcher" }, + "file": { "$ref": "#/$defs/matcher" } + }, + "additionalProperties": false + }, + + "lineExtensions": { + "type": "array", + "description": "Custom text or comments appended to matching file lines.", + "items": { + "type": "object", + "properties": { + "extension": { + "type": "string", + "description": "The string appended after the path (e.g., file comment)." + }, + "matcher": { "$ref": "#/$defs/matcher" } + }, + "required": ["extension", "matcher"], + "additionalProperties": false + } + } + }, + "additionalProperties": false, + + "$defs": { + + "matcher": { + "type": "object", + "description": "Defines a path matching rule.", + "oneOf": [ + { + "description": "Matches everything.", + "properties": { + "type": { "const": "everything" }, + }, + "required": ["type"], + "additionalProperties": false + }, + { + "description": "Matches nothing.", + "properties": { + "type": { "const": "nothing" }, + }, + "required": ["type"], + "additionalProperties": false + }, + { + "description": "Matches all of nested matchers.", + "properties": { + "type": { "const": "allOf" }, + "matchers": { + "type": "array", + "description": "Nested matchers.", + "items": { "$ref": "#/$defs/matcher" } + } + }, + "required": ["type", "matchers"], + "additionalProperties": false + }, + { + "description": "Matches any of nested matchers.", + "properties": { + "type": { "const": "anyOf" }, + "matchers": { + "type": "array", + "description": "Nested matchers.", + "items": { "$ref": "#/$defs/matcher" } + } + }, + "required": ["type", "matchers"], + "additionalProperties": false + }, + { + "description": "Matches none of nested matchers.", + "properties": { + "type": { "const": "noneOf" }, + "matchers": { + "type": "array", + "description": "Nested matchers.", + "items": { "$ref": "#/$defs/matcher" } + } + }, + "required": ["type", "matchers"], + "additionalProperties": false + }, + { + "description": "File or directory name glob matcher", + "properties": { + "type": { "const": "name" }, + "glob": { + "type": "string", + "description": "Glob pattern to match file or directory name." + }, + }, + "required": ["type", "glob"], + "additionalProperties": false + }, + { + "description": "File or directory path glob matcher, relative to pretty printed root dir", + "properties": { + "type": { "const": "path" }, + "glob": { + "type": "string", + "description": "Glob pattern to match file or directory path." + }, + }, + "required": ["type", "glob"], + "additionalProperties": false + } + ] + } + } +} diff --git a/jfiletreeprettyprinter-examples/src/main/resources/cli/options/full-options.yaml b/jfiletreeprettyprinter-examples/src/main/resources/cli/options/full-options.yaml new file mode 100644 index 0000000..1bd2aa9 --- /dev/null +++ b/jfiletreeprettyprinter-examples/src/main/resources/cli/options/full-options.yaml @@ -0,0 +1,38 @@ +emojis: true +maxDepth: 2 +compactDirectories: true +childLimit: + type: dynamic + limits: + - limit: 2 + matcher: + type: noneOf + matchers: + - type: name + glob: "*a" + - type: name + glob: "folder*" + - limit: 3 + matcher: + type: noneOf + matchers: + - type: name + glob: "*a" + - type: name + glob: "*xxx*" +lineExtensions: + - extension: " // This is java file" + matcher: + type: name + glob: "*.java" + - extension: " // This is php file" + matcher: + type: name + glob: "*.php" +filter: + dir: + type: name + glob: "*a" + file: + type: name + glob: "*.java" \ No newline at end of file