From ddt-tools
Data-Driven Testing tools for CenterTest — validate DC references, diff xlsx test data, report unused codes, and convert xlsx for git. Use when the user says "check references", "validate DC", "diff testdata", "cleanup unused codes", "DDT check", or works with DataCombination xlsx files. Triggers on phrases like "run DDT check", "validate references", "diff xlsx", "unused codes", or any DDT/DC file work.
How this skill is triggered — by the user, by Claude, or both
Slash command
/ddt-tools:ddt-toolsThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
A suite of tools for working with CenterTest Data-Driven Testing (DDT) xlsx files:
A suite of tools for working with CenterTest Data-Driven Testing (DDT) xlsx files:
Trigger this skill when the user:
All scripts need to run from the root of a CenterTest project that contains a testdata/ directory with DC xlsx files.
On first run, the scripts will prompt for the project path and save it to ~/.centertest/ddt-tools.json. The CENTERTEST_PROJECT_DIR environment variable overrides the saved config.
# Set/override project path
PYTHON=$(python3 --version >/dev/null 2>&1 && echo python3 || echo python)
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/ddt_config.py" --set-path "/path/to/centertest-project"
# Show current path
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/ddt_config.py" --show-path
xlsx-validate-refs.py)Validates that DC DataCombination sheets only reference codes that exist in their reference data sheets.
PYTHON=$(python3 --version >/dev/null 2>&1 && echo python3 || echo python)
# Validate all DC files
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-validate-refs.py"
# Validate a specific DC file
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-validate-refs.py" testdata/WorkersCompDC.xlsx
What it checks:
# in the DataCombination sheet reference valid sheet namestestdata/DataDrivenHierarchy.json (child DCs inherit parent codes)Exit code: 0 if all valid, 1 if broken references found.
xlsx-diff.py)Smart cell-level diff for xlsx test data files.
PYTHON=$(python3 --version >/dev/null 2>&1 && echo python3 || echo python)
# Diff working copy vs origin/main
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-diff.py" testdata/WorkersCompDC.xlsx
# Diff vs a specific git ref
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-diff.py" --ref HEAD~1 testdata/WorkersCompDC.xlsx
# Diff two files directly
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-diff.py" old.xlsx new.xlsx
Output includes: new/removed sheets, added/removed columns, cell-level changes grouped by code, added/removed rows.
xlsx-cleanup-unused.py)Reports codes in Data files that are not referenced by any DC DataCombination sheet. This is a report-only tool — it never modifies files.
PYTHON=$(python3 --version >/dev/null 2>&1 && echo python3 || echo python)
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-cleanup-unused.py"
ddt-check-code-usages.py)Validates that hardcoded string codes in DDTHelper.getXxx("code") Java calls reference codes that actually exist in the corresponding xlsx files. This is a report-only tool.
PYTHON=$(python3 --version >/dev/null 2>&1 && echo python3 || echo python)
# Check all Java source files
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/ddt-check-code-usages.py"
# Check a specific file
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/ddt-check-code-usages.py" src/main/java/com/example/SomeTest.java
How it works:
DDTHelper.java to build a map of method name → (xlsx file, sheet)DDTHelper.getXxx("literal") callsNote: Only catches hardcoded string literals. Dynamic codes (from variables or data fields) cannot be statically validated.
xlsx-textconv.py)Converts xlsx to human-readable text. Useful as a git textconv driver.
PYTHON=$(python3 --version >/dev/null 2>&1 && echo python3 || echo python)
"$PYTHON" "${CLAUDE_PLUGIN_ROOT}/scripts/xlsx-textconv.py" testdata/WorkersCompDC.xlsx
openpyxl (auto-installed or prompt user: pip install openpyxl)testdata/DataDrivenHierarchy.json maps parent DC files to child DC patterns*DC.xlsx in testdata/ or subdirectories*Data.xlsx in testdata/# in the DataCombination sheet — the part after # maps to a sheet namepython3 or python)openpyxl Python packageCreates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub kimputing/centertest-skills --plugin ddt-tools