Jesús Pérex 852df37ffc refactor(tests): improve test logging setup and organization
- Create unit test and integration tests for logs in separate tests
- Centralize temporary log file creation in common.rs
- Remove redundant logging initialization code from common.rs
- Update all test files to handle their own logging initialization
- Add detailed debug logging throughout test execution
- Add log file content display for better test debugging
- Standardize error handling across test files

Changes:
- Create setup_test_log_file() helper in common.rs
- Remove setup_test_logging() and setup_temp_log() functions
- Update test files to use common setup_test_log_file():
  - test_log_detail_macro.rs
  - test_log_timed_macro.rs
  - test_different_log_levels.rs
  - test_init_logging_with_file.rs
  - test_init_logging_append_mode.rs

This change improves test maintainability by:
1. Reducing code duplication
2. Making test behavior more explicit
3. Improving test output for debugging
4. Following single responsibility principle
2025-05-27 00:59:44 +01:00
2025-05-20 22:13:11 +01:00
2025-05-20 21:58:20 +01:00
2025-05-23 20:00:19 +01:00
2025-05-23 19:19:43 +01:00
2025-05-26 19:13:46 +01:00

dir-odt-to-pdf

Dir ODT to PDF

Convert source directory with odt files to target path with pdf files

Note

Source files will be converted if are changed or not exist in target path

Table of Contents

Overview

The following extensions will be converted via LibreOffice soffice command.

FILES_TO_CONVERT: odt, doc, docx

The following extensions or path will be copied to target with any conversion

FILES_TO_COPY: jpg, jpeg, png, gif, bmp, tiff, webp, avif, txt, md

The following path will be ignored during clean_target_directory process after coversions and copy tasks

PATHS_TO_IGNORE: .DS_Store, .syncthing, .sync-conflict-, .stfolder, .stversions

Repository Content

.
├── Cargo.lock
├── Cargo.toml                  Rust Cargo defs
├── justfile                    File defs for just command
├── linux                       Files to pack app for Linux
│   ├── install.sh              Installer command (app and bin)
│   └── README                  README for linux installation
├── macos
│   ├── dir-odt-to-pdf.scpt     Apple Script to build APP
│   ├── DirOdtToPdf.app         Apple app 
│   ├── install.command         DMG Installer command (app and bin)
│   └── README                  DMG README
├── packages                    Distribution Packages
│   └── DirOdtToPdf.dmg         DMG file
├── README.md
├── resources                  
│   ├── icon
│   ├── icon.psd
│   ├── ins_background.png
│   └── tools
├── run.sh                      Script model to run 
├── src
│   └── main.rs                 Rust source code
└── test                        Path to test with run.sh
    ├── documents               Target path PDFs files
    └── originals               Source path ODTs files

dir-odt-to-pdf is the Cargo.toml pakage name and it should be directory name for path where just command will be used with justfile commands and recipes .

MacOS APP

DirOdtToPdf.app run run-dir-odt-to-pdf.sh located in /usr/local/bin

/usr/local/bin/run-dir-odt-to-pdf.sh can be used as a sequence of several executions of dir-odt-to-pdf

justfile settings:

MACOS_APP_PATH := "DirOdtToPdf.app"

Terminal Commands

dir-odt-to-pdf can be used via commands installed in BIN_APP_PATH(/usr/local/bin):

Command filename Type Descripción Required parameters
dir-odt-to-pdf Binary Executable that converts .odt files to .pdf.
Requires source and destination paths
SOURCE (for .odt files) DEST (for .pdf files)
run-dir-odt-to-pdf.sh Script bash Script to executes dir-odt-to-pdf binary
with specific values for SOURCE and DEST
To be used as model.
Does not require (defines them internally)

In MacOS install.command copy above commands to BIN_APP_PATH(/usr/local/bin)

Basic Usage

dir-odt-to-pdf <SOURCE_DIR> <TARGET_DIR> [OPTIONS]

Options

Required Arguments:
  <SOURCE_DIR>          Source directory with .odt, .doc, or .docx files
  <TARGET_DIR>          Target directory for PDFs converted files

Optional Arguments:
  --log-file <path>     Write logs to file instead of console
  --log-level <level>   Set log level (error/warn/info/debug/trace)
                        Default: info
  --append-log          Append to existing log file instead of overwriting
  -h, --help            Print help
  -V, --version         Print version

Examples

  1. Basic conversion (logs to console):
dir-odt-to-pdf /path/to/documents /path/to/pdfs
  1. Log to file:
dir-odt-to-pdf /path/to/documents /path/to/pdfs --log-file conversion.log
  1. Debug level logging to console:
dir-odt-to-pdf /path/to/documents /path/to/pdfs --log-level debug
  1. Append to existing log file with custom level:
dir-odt-to-pdf /path/to/documents /path/to/pdfs \
    --log-file conversion.log \
    --log-level debug \
    --append-log

Log Levels

Available log levels in increasing verbosity:

  • error: Only errors that prevent normal operation
  • warn: Warnings about potential issues
  • info: General progress information (default)
  • debug: Detailed information for troubleshooting
  • trace: Very detailed debugging information

Notes

  • When --log-file is specified, output goes only to the file (not to console)
  • Without --append-log, the log file is overwritten each time
  • The program will create the target directory if it doesn't exist
  • Existing PDF files are only updated if the source file is newer

Settings

justfile settings:

APP_PACKAGE := "DirOdtToPdf"
BIN_APP_PATH := "/usr/local/bin"

Just

Recipes

Available recipes:
    benchmark # [alias: be]
    build     # [alias: b]
    buildall  # [aliases: ba, ball]
    clean     # [alias: cl]
    doc       # [alias: d]
    expand    # [alias: e]
    fmt       # [alias: f]
    install   # [alias: i]
    make-app  # [alias: mk, mkapp]
    package   # [alias: p, pkg]
    run       # [alias: ru]
    runtest   # [alias: rt]
    test      # [alias: t]

The following have different recipes for macos and linux

  • buildall
  • make-run
  • make-app
  • make-package
  • install

Main Values

APP_NAME := file_name(justfile_directory())
APP_PACKAGE := "DirOdtToPdf"
APP_PACKAGES_PATH :=  justfile_directory() + "/packages/"
APP_RESOURCES_PATH := justfile_directory() + "/resources/"

MACOS_ROOT_PATH := justfile_directory() + "/macos/"
MACOS_APP_PATH := "DirOdtToPdf.app"
MACOS_APP_ICNS_PATH := justfile_directory() + "/resources/icon/app/macos/AppIcon.icns"
SRC_MACOS := file_name(justfile_directory()) + ".scpt"

RUN_SRC := "run.sh"
BIN_APP_PATH := "/usr/local/bin"

For Development

Note

Command-line-options can be added RUST_LOG environment variable controls env_logger output

Recipe alias Descripción parameters
build b run cargo cargo arguments
buildall ba, ball on MacOS:
  • build target releases for aarch64, x86_64
  • create universal (apple-darwin)i with lipo
on Linux:
  • build target release
architecture (arm64 or x86_64 or universal)
run ru run cargo b -r cargo arguments
expand e run cargo expand cargo arguments
fmt f run cargo +nightly fmt cargo arguments
clean cl run cargo clean cargo arguments
doc d run cargo doc --open --no-deps cargo arguments
benchmark be run cargo bench cargo arguments
test* be run cargo t cargo arguments
runtest rt run run.sh script using test directories for SOURCE and DEST parametets
add Command-line-options

To work on app

Recipe alias Descripción parameters
install i on MacOS: on Linux:
  • just make-run
  • install commands
make-app mk , mkapp on MacOS: on Linux:
  • just buildall
architecture (arm64 or x86_64 or universal)
make-run on MacOS: on Linux:
  • just delete-run
  • install commands
delete-run Ask for replace run-dir-odt-to-pdf.sh created from run.sh
package on MacOS: on Linux:
  • just make-app
  • pack binary in compressed archive
    with linux files and commands
architecture (arm64 or x86_64 or universal)
Description
Convert source directory with odt files to target path with pdf files
Readme 938 KiB
Languages
Rust 66.5%
Just 20.1%
Shell 7.4%
AppleScript 6%