Back to Repositories

Validating RenameConverter Parameter Processing in jadx

This test suite evaluates the RenameConverter functionality in the JADX decompiler’s CLI arguments processing. It verifies the conversion of rename options into appropriate RenameEnum sets, ensuring proper handling of valid and invalid input parameters.

Test Coverage Overview

The test suite provides comprehensive coverage of the RenameConverter class functionality.

Key areas tested include:
  • Conversion of ‘all’ parameter to complete RenameEnum set
  • Handling of ‘none’ parameter resulting in empty set
  • Validation of incorrect parameter inputs
  • Error message accuracy for invalid parameters

Implementation Analysis

The testing approach utilizes JUnit 5 framework with AssertJ assertions for enhanced readability and validation precision.

Testing patterns include:
  • Setup isolation using @BeforeEach
  • Exception testing with assertThrows
  • Set-based assertions for enum collections
  • Multiple assertion points per test case

Technical Details

Testing infrastructure includes:
  • JUnit Jupiter test framework
  • AssertJ assertion library
  • JADX CLI argument processing components
  • Custom exception handling for validation

Best Practices Demonstrated

The test suite exemplifies several testing best practices:

  • Clear test method naming reflecting functionality
  • Proper test isolation and setup
  • Comprehensive assertion coverage
  • Exception testing with message validation
  • Single responsibility per test method

skylot/jadx

jadx-cli/src/test/java/jadx/cli/RenameConverterTest.java

            
package jadx.cli;

import java.util.Set;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

import jadx.api.JadxArgs.RenameEnum;
import jadx.cli.JadxCLIArgs.RenameConverter;
import jadx.core.utils.exceptions.JadxArgsValidateException;

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertThrows;

public class RenameConverterTest {

	private RenameConverter converter;

	@BeforeEach
	public void init() {
		converter = new RenameConverter("someParam");
	}

	@Test
	public void all() {
		Set<RenameEnum> set = converter.convert("all");
		assertThat(set).hasSize(3);
		assertThat(set).contains(RenameEnum.CASE);
		assertThat(set).contains(RenameEnum.VALID);
		assertThat(set).contains(RenameEnum.PRINTABLE);
	}

	@Test
	public void none() {
		Set<RenameEnum> set = converter.convert("none");
		assertThat(set).isEmpty();
	}

	@Test
	public void wrong() {
		JadxArgsValidateException thrown = assertThrows(JadxArgsValidateException.class,
				() -> converter.convert("wrong"),
				"Expected convert() to throw, but it didn't");

		assertThat(thrown.getMessage()).isEqualTo("'wrong' is unknown for parameter someParam, possible values are case, valid, printable");
	}
}