Skip to content

Latest commit

 

History

History
184 lines (145 loc) · 6.85 KB

File metadata and controls

184 lines (145 loc) · 6.85 KB

ModStitch Test Coverage Enhancement

This document outlines the comprehensive test coverage improvements made to the ModStitch gradle plugin.

Overview

The ModStitch gradle plugin provides a unified API for building Minecraft mods across different mod loaders (Fabric Loom, NeoForge MDG, and legacy Forge MDG). This test suite ensures comprehensive coverage of all major features across all three platforms.

Test Structure

Core Architecture Tests

  • Platform Detection: Tests for Loom, MDG, and MDGLegacy platform identification
  • Configuration Management: Tests for minecraft version, mod loader version, and java version configuration
  • Auto Java Version Detection: Tests automatic Java version selection based on Minecraft version

Feature-Specific Tests

1. Core Configuration Tests (CoreConfigurationTests.kt)

  • Minecraft version configuration across all platforms
  • Mod loader version configuration (Fabric Loader, NeoForge, Forge)
  • Java version auto-detection for different Minecraft versions (Java 8, 16, 17, 21)
  • Manual Java version override capability
  • Platform detection utilities validation

2. Metadata and Manifest Tests (MetadataManifestTests.kt)

  • Metadata block configuration (mod ID, name, version, description, authors, license)
  • Platform-specific manifest generation:
    • Fabric: fabric.mod.json
    • NeoForge: META-INF/neoforge.mods.toml
    • Forge Legacy: META-INF/mods.toml
  • Template processing and variable substitution
  • Metadata validation with required fields

3. Mixin Configuration Tests (MixinConfigurationTests.kt)

  • Mixin config registration and setup
  • Multiple mixin configurations support
  • Environment-specific mixin configs (client/server)
  • Mixin config JSON generation and inclusion in JARs
  • Mixin annotation processor setup

4. Parchment Configuration Tests (ParchmentConfigurationTests.kt)

  • Parchment mappings configuration for parameter names
  • Custom version specification
  • Auto minecraft version inheritance
  • Parchment disabled/optional scenarios

5. Run Configuration Tests (RunConfigurationTests.kt)

  • Default run configurations for each platform
  • Custom run configuration creation
  • Multiple run configurations (client, server, data generation)
  • Environment variables configuration
  • Program arguments setup

6. Access Widener/Transformer Tests (existing AccessWidenerIntegration.kt)

  • Cross-platform access widener/transformer support
  • Automatic format conversion (AW v1 → AW v2 for Fabric, AW → AT for NeoForge)
  • File detection in project hierarchy
  • Inclusion in built JARs

7. Proxy Configuration Tests (ProxyConfigurationTests.kt)

  • Proxy configuration creation for abstracting platform differences
  • Source set proxy configurations
  • Mod vs non-mod dependency handling
  • Test source set proxy configurations
  • Dependency resolution validation

8. JAR Inspection Tests (JarInspectionTests.kt)

  • Comprehensive JAR structure validation for each platform
  • Manifest validation and version information
  • Mixin config inclusion in JARs
  • Access widener/transformer inclusion
  • Mod manifest files validation
  • Complete project build validation

9. Extension Integration Tests (ExtensionIntegrationTests.kt)

  • Publishing extension setup and configuration
  • Shadow extension setup and shadow JAR creation
  • Multi-platform publishing support
  • Final jar task configuration
  • Named jar task configuration

10. Unit Testing Integration Tests (UnitTestingIntegrationTests.kt)

  • Unit testing setup with Minecraft sources
  • Custom JUnit platform configuration
  • Test execution validation
  • Test class compilation verification

Platform Coverage

Each test is duplicated across all three supported platforms:

Loom (Fabric)

  • Tests tagged with @Tag("loom")
  • Uses Fabric Loader and fabric.mod.json
  • Access Widener v2 format
  • Fabric-specific run configurations

ModDevGradle (NeoForge)

  • Tests tagged with @Tag("mdg")
  • Uses NeoForge and META-INF/neoforge.mods.toml
  • Access Transformer format
  • NeoForge-specific configurations

ModDevGradle Legacy (Forge)

  • Tests tagged with @Tag("mdgl")
  • Uses legacy Forge and META-INF/mods.toml
  • Access Transformer format
  • Legacy Forge-specific configurations

Test Techniques

JAR Inspection

  • Uses JarFile to inspect built JAR contents
  • Validates presence of required files (manifests, access wideners, mixin configs)
  • Checks file content and structure
  • Verifies template processing results

Configuration Validation

  • Tests property configuration through Gradle TestKit
  • Validates auto-detection and inheritance behavior
  • Checks cross-platform compatibility

Task Validation

  • Verifies task creation and configuration
  • Tests task execution and outcomes
  • Validates task dependencies and ordering

Running Tests

By Platform

# Run only Loom tests
./gradlew test --tests "*" -Dtest.include.tags=loom

# Run only MDG tests  
./gradlew test --tests "*" -Dtest.include.tags=mdg

# Run only MDG Legacy tests
./gradlew test --tests "*" -Dtest.include.tags=mdgl

By Feature Area

# Run core configuration tests
./gradlew test --tests "*CoreConfigurationTests*"

# Run JAR inspection tests
./gradlew test --tests "*JarInspectionTests*"

# Run mixin configuration tests
./gradlew test --tests "*MixinConfigurationTests*"

Exclude Legacy Tests

# Exclude MDG Legacy tests (as they require special setup)
./gradlew test -Dtest.exclude.tags=mdgl

Test Coverage Metrics

The enhanced test suite provides coverage for:

  • Core Configuration: 100% coverage of main ModStitch extension properties
  • Platform Detection: All three platforms (Loom, MDG, MDGLegacy)
  • Metadata Management: Complete metadata block and template processing
  • Mixin Integration: Full mixin configuration and setup
  • Access Widener/Transformer: Cross-platform file handling
  • Run Configurations: All run configuration features
  • Dependency Management: Proxy configurations and mod vs non-mod handling
  • JAR Validation: Built artifact inspection and validation
  • Extension Integration: Publishing and shadow extensions
  • Unit Testing: ModStitch unit testing functionality

Benefits

  1. Comprehensive Coverage: Tests all major features across all platforms
  2. Platform Parity: Ensures consistent behavior across Loom, MDG, and MDGLegacy
  3. JAR Validation: Validates that built artifacts are correctly structured
  4. Regression Prevention: Catches breaking changes in any platform implementation
  5. Documentation: Tests serve as living documentation of plugin behavior
  6. Quality Assurance: Ensures ModStitch maintains high quality across releases

This test suite significantly improves the reliability and maintainability of the ModStitch gradle plugin while ensuring consistent behavior across all supported Minecraft mod development platforms.