diff --git a/CMakeLists.txt b/CMakeLists.txt index 6bd2eba..7573888 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -169,8 +169,8 @@ add_custom_target( # ============================================================================ # Test # ============================================================================ -add_custom_target( - test - COMMAND "./tests/test.sh" - DEPENDS libcbxp cbxp -) +include(CTest) + +if(BUILD_TESTING) + add_subdirectory(tests) +endif() diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt new file mode 100644 index 0000000..0f2c299 --- /dev/null +++ b/tests/CMakeLists.txt @@ -0,0 +1,259 @@ +# ============================================================================= +# CTest suite +# +# Conventions used: +# * Tests that expect exit code 0 -> plain add_test (CTest default pass) +# * Tests that expect exit code 255 -> add_test + WILL_FAIL TRUE +# * Tests that expect "null" on stdout -> add_test + PASS_REGULAR_EXPRESSION "null" +# +# The cbxp executable is referenced via the generator expression +# $ so the path is always correct regardless of the +# build-output directory. +# ============================================================================= + +set(EXE $) +set(SAMPLES ${CMAKE_SOURCE_DIR}/tests/samples) + +# --------------------------------------------------------------------------- +# Build fixture - ensures cbxp (and its libcbxp dependency) are compiled +# before any test runs. Building cbxp is sufficient; libcbxp is already a +# link dependency of cbxp so CMake will build it automatically. +# --------------------------------------------------------------------------- +add_test(NAME cbxp.build + COMMAND ${CMAKE_COMMAND} --build ${CMAKE_BINARY_DIR} --target cbxp) +set_property(TEST cbxp.build PROPERTY FIXTURES_SETUP cbxp.built) + +# --------------------------------------------------------------------------- +# Helper macros - "cbxp.test" prefix is prepended to every test name +# --------------------------------------------------------------------------- +macro(cbxp_test_success name) + add_test(NAME cbxp.test${name} COMMAND ${ARGN}) + set_property(TEST cbxp.test${name} PROPERTY FIXTURES_REQUIRED cbxp.built) +endmacro() + +# Helper macro - tests that MUST exit non-zero (255) +macro(cbxp_test_fail name) + add_test(NAME cbxp.test${name} COMMAND ${ARGN}) + set_property(TEST cbxp.test${name} PROPERTY WILL_FAIL TRUE) + set_property(TEST cbxp.test${name} PROPERTY FIXTURES_REQUIRED cbxp.built) +endmacro() + +# Helper macro - tests whose stdout must contain "null" +macro(cbxp_test_null name) + add_test(NAME cbxp.test${name} COMMAND ${ARGN}) + set_property(TEST cbxp.test${name} PROPERTY PASS_REGULAR_EXPRESSION "null") + set_property(TEST cbxp.test${name} PROPERTY FIXTURES_REQUIRED cbxp.built) +endmacro() + +# ============================================================================= +# General +# ============================================================================= +cbxp_test_success(GeneralHelpShort ${EXE} -h) +cbxp_test_success(GeneralHelpLong ${EXE} --help) +cbxp_test_success(GeneralVersionShort ${EXE} -v) +cbxp_test_success(GeneralVersionLong ${EXE} --version) +cbxp_test_fail(GeneralErrorBadArgJunk ${EXE} junk) +cbxp_test_fail(GeneralErrorBadFlagJunk ${EXE} --junk) + +# ============================================================================= +# Extract - Show Usage +# ============================================================================= +cbxp_test_success(ExtractHelpLong ${EXE} extract --help) +cbxp_test_success(ExtractHelpShort ${EXE} extract -h) + +# ============================================================================= +# Extract - Basic Usage +# ============================================================================= +cbxp_test_success(ExtractPsa ${EXE} extract psa) +cbxp_test_success(ExtractCvt ${EXE} extract cvt) +cbxp_test_success(ExtractEcvt ${EXE} extract ecvt) +cbxp_test_success(ExtractAsvt ${EXE} extract asvt) +cbxp_test_success(ExtractAscb ${EXE} extract ascb) +cbxp_test_success(ExtractAssb ${EXE} extract assb) +cbxp_test_success(ExtractOucb ${EXE} extract oucb) +cbxp_test_success(ExtractLdax ${EXE} extract ldax) + +# ============================================================================= +# Extract - Debug Mode +# ============================================================================= +cbxp_test_success(ExtractDebugShort ${EXE} extract -d psa) +cbxp_test_success(ExtractDebugLong ${EXE} extract --debug psa) + +# ============================================================================= +# Extract - Include Patterns +# ============================================================================= +cbxp_test_success(ExtractIncludeCvtPsa ${EXE} extract -i cvt psa) +cbxp_test_success(ExtractIncludeCvtPsaLong ${EXE} extract --include cvt psa) +cbxp_test_success(ExtractIncludeEcvtCvt ${EXE} extract -i ecvt cvt) +cbxp_test_success(ExtractIncludeAsvtCvt ${EXE} extract -i asvt cvt) +cbxp_test_success(ExtractIncludeAscbAsvt ${EXE} extract -i ascb asvt) +cbxp_test_success(ExtractIncludeCvtEcvtPsa ${EXE} extract -i cvt.ecvt psa) +cbxp_test_success(ExtractIncludeCvtAsvtAscbPsa ${EXE} extract -i cvt.asvt.ascb psa) +cbxp_test_success(ExtractIncludeAsvtAscbCvt ${EXE} extract -i asvt.ascb cvt) +cbxp_test_success(ExtractIncludeMultiEcvtAsvtCvt ${EXE} extract -i ecvt -i asvt cvt) +cbxp_test_success(ExtractIncludeMultiCvtEcvtCvtAsvtAscbPsa ${EXE} extract -i cvt.ecvt -i cvt.asvt.ascb psa) +cbxp_test_success(ExtractIncludeGlobCvtDeepPsa ${EXE} extract -i "cvt.**" psa) +cbxp_test_success(ExtractIncludeGlobCvtShallowPsa ${EXE} extract -i "cvt.*" psa) +cbxp_test_success(ExtractIncludeGlobAsvtShallowWildCvt ${EXE} extract -i "asvt.*" -i "*" cvt) +cbxp_test_success(ExtractIncludeAssbAscb ${EXE} extract -i assb ascb) +cbxp_test_success(ExtractIncludeOucbAscb ${EXE} extract -i oucb ascb) +cbxp_test_success(ExtractIncludeCvtEcvtCvtAsvtAscbAssbPsa ${EXE} extract -i cvt.ecvt -i cvt.asvt.ascb.assb psa) +cbxp_test_success(ExtractIncludeCvtEcvtCvtAsvtAscbOucbPsa ${EXE} extract -i cvt.ecvt -i cvt.asvt.ascb.oucb psa) +cbxp_test_success(ExtractIncludeGlobWildAssb ${EXE} extract -i "*" assb) +cbxp_test_success(ExtractIncludeGlobDeepWildAssb ${EXE} extract -i "**" assb) +cbxp_test_success(ExtractIncludeGlobAssbDeepAscb ${EXE} extract -i "assb.**" ascb) +cbxp_test_success(ExtractIncludeLdaxAssb ${EXE} extract -i ldax assb) +cbxp_test_success(ExtractIncludeAssbLdaxAscb ${EXE} extract -i assb.ldax ascb) +cbxp_test_success(ExtractIncludeAscbAssbLdaxAsvt ${EXE} extract -i ascb.assb.ldax asvt) +cbxp_test_success(ExtractIncludeCvtAsvtAscbAssbLdaxPsa ${EXE} extract -i cvt.asvt.ascb.assb.ldax psa) + +# ============================================================================= +# Extract - Filters +# ============================================================================= +cbxp_test_success(ExtractFilterPsapsaEqPSA ${EXE} extract -f psapsa=PSA psa) +cbxp_test_success(ExtractFilterAssbjbnsMASTERGlobAllPsa ${EXE} extract -f "cvt.asvt.ascb.assb.assbjbns=*MASTER*" -i "**" psa) +cbxp_test_success(ExtractFilterAssbjbnsMASTERIncludeAssbPsa ${EXE} extract -f "cvt.asvt.ascb.assb.assbjbns=*MASTER*" -i cvt.asvt.ascb.assb psa) +cbxp_test_success(ExtractFilterAssbjbnsMASTERAscbasidGt0GlobPsa ${EXE} extract -f "cvt.asvt.ascb.assb.assbjbns=*MASTER*" -f "cvt.asvt.ascb.ascbasid>0" -i "**" psa) +cbxp_test_success(ExtractFilterAssbjbnsMASWildERIncludeAssbPsa ${EXE} extract -f "cvt.asvt.ascb.assb.assbjbns=?MAS?ER?" -i cvt.asvt.ascb.assb psa) +cbxp_test_success(ExtractFilterAscbasidEq1 ${EXE} extract -f "cvt.asvt.ascb.ascbasid=1" -i "**" psa) +cbxp_test_success(ExtractFilterAscbasidGt0 ${EXE} extract -f "cvt.asvt.ascb.ascbasid>0" -i "**" psa) +cbxp_test_success(ExtractFilterAscbasidLt2 ${EXE} extract -f "cvt.asvt.ascb.ascbasid<2" -i "**" psa) +cbxp_test_success(ExtractFilterAscbasidGe1 ${EXE} extract -f "cvt.asvt.ascb.ascbasid>=1" -i "**" psa) +cbxp_test_success(ExtractFilterAscbasidLe2 ${EXE} extract -f "cvt.asvt.ascb.ascbasid<=2" -i "**" psa) +cbxp_test_success(ExtractFilterCvtasmvtEqDecimal ${EXE} extract -f "cvtasmvt=2281701376" cvt) +cbxp_test_success(ExtractFilterCvtasmvtEqHex ${EXE} extract -f "cvtasmvt=0x88000000" cvt) +cbxp_test_success(ExtractFilterCvtasmvtGtHex ${EXE} extract -f "cvtasmvt>0x87FFFFFF" cvt) +cbxp_test_success(ExtractFilterCvtasmvtLtHex ${EXE} extract -f "cvtasmvt<0x88000001" cvt) +cbxp_test_success(ExtractFilterCvtasmvtGeHex ${EXE} extract -f "cvtasmvt>=0x87FFFFFF" cvt) +cbxp_test_success(ExtractFilterCvtasmvtLeHex ${EXE} extract -f "cvtasmvt<=0x88000000" cvt) +cbxp_test_success(ExtractFilterOucbtrxnEqOMVS ${EXE} extract -f "oucbtrxn=OMVS" oucb) +cbxp_test_success(ExtractFilterOucbOucbtrxnEqOMVSIncludeOucbAscb ${EXE} extract -i oucb -f "oucb.oucbtrxn=OMVS" ascb) +cbxp_test_null(ExtractFilterNullPsapsaEqPSB ${EXE} extract -f psapsa=PSB psa) +cbxp_test_null(ExtractFilterNullAssbjbnsMASTERAscbasid2IncludeAsvt ${EXE} extract -f "ascb.assb.assbjbns=*MASTER*" -f "ascb.ascbasid=2" -i ascb.assb asvt) +cbxp_test_success(ExtractFilterAssbjbnsMASTERAssbjbniEmptyBare ${EXE} extract -f assbjbns=*MASTER* -f assbjbni= assb) +cbxp_test_success(ExtractFilterAssbjbnsMASTERAssbjbniEmptyDquote ${EXE} extract -f assbjbns=*MASTER* -f assbjbni="" assb) +cbxp_test_success(ExtractFilterAssbjbnsMASTERAssbjbniEmptySquote ${EXE} extract -f assbjbns=*MASTER* -f assbjbni='' assb) +cbxp_test_success(ExtractFilterLdaxTcthwmEq0 ${EXE} extract -f "cvt.asvt.ascb.assb.ldax.ldax_tcthwm=0" -i cvt.asvt.ascb.assb.ldax psa) +cbxp_test_success(ExtractFilterLdaxTcthwmEq0Ldax ${EXE} extract -f "ldax_tcthwm=0" ldax) +cbxp_test_null(ExtractFilterNullLdaxIdInvalid ${EXE} extract -f "cvt.asvt.ascb.assb.ldax.ldax_id=INVALID" -i cvt.asvt.ascb.assb.ldax psa) + +# ============================================================================= +# Extract - Errors: Bad Usage +# ============================================================================= +cbxp_test_fail(ExtractErrorNoArgs ${EXE} extract) +cbxp_test_fail(ExtractErrorBadFlagJunk ${EXE} extract --junk) +cbxp_test_fail(ExtractErrorBadFlagJunkJunk ${EXE} extract --junk junk) +cbxp_test_fail(ExtractErrorUnknownFlagX ${EXE} extract -x "unknown flag" cvt) +cbxp_test_fail(ExtractErrorIncludeNoValue ${EXE} extract -i cvt) +cbxp_test_fail(ExtractErrorIncludeMissingValue ${EXE} extract -i -i cvt psa) +cbxp_test_fail(ExtractErrorFilterNoValue ${EXE} extract -f psa) +cbxp_test_fail(ExtractErrorFilterNoBlock ${EXE} extract -f psapsa=psa) +cbxp_test_fail(ExtractErrorBadFlagF ${EXE} extract -F ${SAMPLES}/ascb.bin psa) +cbxp_test_fail(ExtractErrorBadFlagO ${EXE} extract -o 1 psa) + +# ============================================================================= +# Extract - Errors: Unknown Control Block +# ============================================================================= +cbxp_test_fail(ExtractErrorUnknownBlock ${EXE} extract unknown) + +# ============================================================================= +# Extract - Errors: Bad Include Patterns +# ============================================================================= +cbxp_test_fail(ExtractErrorIncludeCommaAsvtAscbCvt ${EXE} extract -i asvt,ascb cvt) +cbxp_test_fail(ExtractErrorIncludeCommaAsvtAsCvt ${EXE} extract -i asvt,as cvt) +cbxp_test_fail(ExtractErrorIncludeAsvtAscbPsa ${EXE} extract -i asvt.ascb psa) +cbxp_test_fail(ExtractErrorIncludeAscbPsa ${EXE} extract -i ascb psa) +cbxp_test_fail(ExtractErrorIncludeEcvtAscb ${EXE} extract -i ecvt ascb) +cbxp_test_fail(ExtractErrorIncludeCvtEcvtCvtAscbPsa ${EXE} extract -i cvt.ecvt -i cvt.ascb psa) +cbxp_test_fail(ExtractErrorIncludeCvtAsvtAscbEcvtPsa ${EXE} extract -i cvt.asvt.ascb -i ecvt psa) +cbxp_test_fail(ExtractErrorIncludeCvtCvt ${EXE} extract -i cvt cvt) +cbxp_test_fail(ExtractErrorIncludeLdaxPsa ${EXE} extract -i ldax psa) +cbxp_test_fail(ExtractErrorIncludeLdaxCvt ${EXE} extract -i ldax cvt) +cbxp_test_fail(ExtractErrorIncludeLdaxAscb ${EXE} extract -i ldax ascb) + +# ============================================================================= +# Extract - Errors: Bad Filters +# ============================================================================= +cbxp_test_fail(ExtractErrorFilterAssbjbnsLowercasePsa ${EXE} extract -f "cvt.asvt.ascb.assb.assbjbns=*master*" psa) +cbxp_test_fail(ExtractErrorFilterAssbjbnsLtGlobPsa ${EXE} extract -f "cvt.asvt.ascb.assb.assbjbns<*master*" -i "**" psa) +cbxp_test_fail(ExtractErrorFilterPsapsbEqPSA ${EXE} extract -f psapsb=PSA psa) +cbxp_test_fail(ExtractErrorFilterAssbasidEmpty ${EXE} extract -f assbasid= assb) +cbxp_test_fail(ExtractErrorFilterAscbasidLeJunk ${EXE} extract -f "ascbasid<=junk" ascb) +cbxp_test_fail(ExtractErrorFilterCommaMultiFilter ${EXE} extract -f "psapsa=psa,cvt.asvt.ascb.ascbasid<2" cvt) +cbxp_test_fail(ExtractErrorFilterJunkPsa ${EXE} extract -f junk psa) + +# ============================================================================= +# Format - Show Usage +# ============================================================================= +cbxp_test_success(FormatHelpShort ${EXE} format -h) +cbxp_test_success(FormatHelpLong ${EXE} format --help) + +# ============================================================================= +# Format - Basic Usage +# ============================================================================= +cbxp_test_success(FormatAscbFile ${EXE} format -F ${SAMPLES}/ascb.bin ascb) +cbxp_test_success(FormatOucbFile ${EXE} format -F ${SAMPLES}/oucb.bin oucb) +# pipe via shell - CTest runs commands directly, so we use +# cmake -E env + sh to emulate "cat file | cmd" +cbxp_test_success(FormatCvtPipe + ${CMAKE_COMMAND} -E env sh -c "cat ${SAMPLES}/cvt.bin | ${EXE} format cvt") + +# ============================================================================= +# Format - Debug Mode +# ============================================================================= +cbxp_test_success(FormatDebugShort ${EXE} format -F ${SAMPLES}/ascb.bin -d ascb) +cbxp_test_success(FormatDebugLong ${EXE} format -F ${SAMPLES}/ascb.bin --debug ascb) + +# ============================================================================= +# Format - Offset +# ============================================================================= +cbxp_test_success(FormatOffsetHex ${EXE} format -F ${SAMPLES}/ascb_offset_0x40.bin -o 0x40 ascb) +cbxp_test_success(FormatOffsetDecimal ${EXE} format -F ${SAMPLES}/ascb_offset_0x40.bin -o 64 ascb) +cbxp_test_success(FormatOffsetOucbPipeHex + ${CMAKE_COMMAND} -E env sh -c "cat ${SAMPLES}/oucb_offset_0x03a8.bin | ${EXE} format -o 0x03a8 oucb") +cbxp_test_success(FormatOffsetOucbPipeDecimal + ${CMAKE_COMMAND} -E env sh -c "cat ${SAMPLES}/oucb_offset_0x03a8.bin | ${EXE} format -o 936 oucb") + +# ============================================================================= +# Format - Errors: Bad Usage +# ============================================================================= +cbxp_test_fail(FormatErrorNoArgs ${EXE} format) +cbxp_test_fail(FormatErrorBadFlagJunk ${EXE} format --junk) +cbxp_test_fail(FormatErrorBadFlagJunkJunk ${EXE} format --junk junk) +cbxp_test_fail(FormatErrorNoFilePsa ${EXE} format psa) +cbxp_test_fail(FormatErrorFlagINotSupported ${EXE} format -i cvt psa) +cbxp_test_fail(FormatErrorFlagFNotSupported ${EXE} format -f psapsa=PSA psa) + +# ============================================================================= +# Format - Errors: Unknown Control Block +# ============================================================================= +cbxp_test_fail(FormatErrorUnknownBlock ${EXE} format -F ${SAMPLES}/ascb.bin -d unknown) + +# ============================================================================= +# Format - Errors: Bad Offset +# ============================================================================= +cbxp_test_fail(FormatErrorOffsetTooLarge ${EXE} format -F ${SAMPLES}/ascb.bin -o 999999 ascb) +cbxp_test_fail(FormatErrorOffsetNegative ${EXE} format -F ${SAMPLES}/ascb.bin -o -1 ascb) +cbxp_test_fail(FormatErrorOffsetJunk ${EXE} format -F ${SAMPLES}/ascb.bin -o JUNK ascb) +cbxp_test_fail(FormatErrorOffsetFloat ${EXE} format -F ${SAMPLES}/ascb.bin -o 5.5 ascb) + +# ============================================================================= +# Format - Errors: Error Opening File +# ============================================================================= +cbxp_test_fail(FormatErrorFileNotFound ${EXE} format -F ${SAMPLES}/notreal.bin psa) + +# ============================================================================= +# Format - Errors: No File/Pipe provided +# ============================================================================= +cbxp_test_fail(FormatErrorNoFileOrPipe ${EXE} format psa) + +# ============================================================================= +# Format - Errors: File and Pipe +# ============================================================================= +cbxp_test_fail(FormatErrorFileAndPipe + ${CMAKE_COMMAND} -E env sh -c "cat ${SAMPLES}/cvt.bin | ${EXE} format -F ${SAMPLES}/cvt.bin cvt") + +# ============================================================================= +# Format - Errors: Data Too Small +# ============================================================================= +cbxp_test_fail(FormatErrorDataTooSmall ${EXE} format -F ${SAMPLES}/ascb.bin psa) diff --git a/tests/test.sh b/tests/test.sh deleted file mode 100755 index 1d534c3..0000000 --- a/tests/test.sh +++ /dev/null @@ -1,191 +0,0 @@ -#!/bin/bash - -run_with_expected_exit_code() { - expected_code=$1 - shift - echo "Running: $* (expected exit code: $expected_code)" - - "$@" > /dev/null - return_code=$? - - if [ $return_code -eq $expected_code ]; then - echo "Command exited with $return_code as expected." - else - echo "Unexpected exit code: got $return_code, expected $expected_code" - exit 1 - fi - echo -} - -run_with_expected_null_response() { - echo "Running: $* (expecting null response)" - - if "$@" | grep -q -x "null"; then - echo "Command exited with null response as expected." - else - echo "Unexpected non-null response" - exit 1 - fi - echo -} - -## General Test Cases - -# General - Show Usage -run_with_expected_exit_code 0 ./dist/cbxp -h -run_with_expected_exit_code 0 ./dist/cbxp --help -# General - Show Version -run_with_expected_exit_code 0 ./dist/cbxp -v -run_with_expected_exit_code 0 ./dist/cbxp --version -# General - Errors: Bad Usage -run_with_expected_exit_code 255 ./dist/cbxp junk -run_with_expected_exit_code 255 ./dist/cbxp --junk - -## Extract Command - -# Extract - Show Usage -run_with_expected_exit_code 0 ./dist/cbxp extract --help -run_with_expected_exit_code 0 ./dist/cbxp extract -h -# Extract - Basic Usage -run_with_expected_exit_code 0 ./dist/cbxp extract psa -run_with_expected_exit_code 0 ./dist/cbxp extract cvt -run_with_expected_exit_code 0 ./dist/cbxp extract ecvt -run_with_expected_exit_code 0 ./dist/cbxp extract asvt -run_with_expected_exit_code 0 ./dist/cbxp extract ascb -run_with_expected_exit_code 0 ./dist/cbxp extract assb -run_with_expected_exit_code 0 ./dist/cbxp extract oucb -run_with_expected_exit_code 0 ./dist/cbxp extract ldax -# Extract - Debug Mode -run_with_expected_exit_code 0 ./dist/cbxp extract -d psa -run_with_expected_exit_code 0 ./dist/cbxp extract --debug psa -# Extract - Include Patterns -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt psa -run_with_expected_exit_code 0 ./dist/cbxp extract --include cvt psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i ecvt cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i asvt cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i ascb asvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt.ecvt psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt.asvt.ascb psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i asvt.ascb cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i ecvt -i asvt cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt.ecvt -i cvt.asvt.ascb psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i "cvt.**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i "cvt.*" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i "asvt.*" -i "*" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i assb ascb -run_with_expected_exit_code 0 ./dist/cbxp extract -i oucb ascb -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt.ecvt -i cvt.asvt.ascb.assb psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt.ecvt -i cvt.asvt.ascb.oucb psa -run_with_expected_exit_code 0 ./dist/cbxp extract -i "*" assb -run_with_expected_exit_code 0 ./dist/cbxp extract -i "**" assb -run_with_expected_exit_code 0 ./dist/cbxp extract -i "assb.**" ascb -run_with_expected_exit_code 0 ./dist/cbxp extract -i ldax assb -run_with_expected_exit_code 0 ./dist/cbxp extract -i assb.ldax ascb -run_with_expected_exit_code 0 ./dist/cbxp extract -i ascb.assb.ldax asvt -run_with_expected_exit_code 0 ./dist/cbxp extract -i cvt.asvt.ascb.assb.ldax psa -# Extract - Filters -run_with_expected_exit_code 0 ./dist/cbxp extract -f psapsa=PSA psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.assbjbns=*MASTER*" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.assbjbns=*MASTER*" -i cvt.asvt.ascb.assb psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.assbjbns=*MASTER*" -f "cvt.asvt.ascb.ascbasid>0" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.assbjbns=?MAS?ER?" -i cvt.asvt.ascb.assb psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.ascbasid=1" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.ascbasid>0" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.ascbasid<2" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.ascbasid>=1" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.ascbasid<=2" -i "**" psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvtasmvt=2281701376" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvtasmvt=0x88000000" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvtasmvt>0x87FFFFFF" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvtasmvt<0x88000001" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvtasmvt>=0x87FFFFFF" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvtasmvt<=0x88000000" cvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f 'oucbtrxn=OMVS' oucb -run_with_expected_exit_code 0 ./dist/cbxp extract -i oucb -f 'oucb.oucbtrxn=OMVS' ascb -run_with_expected_null_response ./dist/cbxp extract -f psapsa=PSB psa -run_with_expected_null_response ./dist/cbxp extract -f "ascb.assb.assbjbns=*MASTER*" -f "ascb.ascbasid=2" -i ascb.assb asvt -run_with_expected_exit_code 0 ./dist/cbxp extract -f assbjbns="*MASTER*" -f assbjbni= assb -run_with_expected_exit_code 0 ./dist/cbxp extract -f assbjbns="*MASTER*" -f assbjbni="" assb -run_with_expected_exit_code 0 ./dist/cbxp extract -f assbjbns="*MASTER*" -f assbjbni='' assb -run_with_expected_exit_code 0 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.ldax.ldax_tcthwm=0" -i cvt.asvt.ascb.assb.ldax psa -run_with_expected_exit_code 0 ./dist/cbxp extract -f "ldax_tcthwm=0" ldax -run_with_expected_null_response ./dist/cbxp extract -f "cvt.asvt.ascb.assb.ldax.ldax_id=INVALID" -i cvt.asvt.ascb.assb.ldax psa -# Extract - Errors: Bad Usage -run_with_expected_exit_code 255 ./dist/cbxp extract -run_with_expected_exit_code 255 ./dist/cbxp extract --junk -run_with_expected_exit_code 255 ./dist/cbxp extract --junk junk -run_with_expected_exit_code 255 ./dist/cbxp extract -x "unknown flag" cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -i cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -i -i cvt psa -run_with_expected_exit_code 255 ./dist/cbxp extract -f psa -run_with_expected_exit_code 255 ./dist/cbxp extract -f psapsa=psa -run_with_expected_exit_code 255 ./dist/cbxp extract -F tests/samples/ascb.bin psa -run_with_expected_exit_code 255 ./dist/cbxp extract -o 1 psa -# Extract - Errors: Unknown Control Block -run_with_expected_exit_code 255 ./dist/cbxp extract unknown -# Extract - Errors: Bad Include Patterns -run_with_expected_exit_code 255 ./dist/cbxp extract -i asvt,ascb cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -i asvt,as cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -i asvt.ascb psa -run_with_expected_exit_code 255 ./dist/cbxp extract -i ascb psa -run_with_expected_exit_code 255 ./dist/cbxp extract -i ecvt ascb -run_with_expected_exit_code 255 ./dist/cbxp extract -i cvt.ecvt -i cvt.ascb psa -run_with_expected_exit_code 255 ./dist/cbxp extract -i cvt.asvt.ascb -i ecvt psa -run_with_expected_exit_code 255 ./dist/cbxp extract -i cvt cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -i ldax psa -run_with_expected_exit_code 255 ./dist/cbxp extract -i ldax cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -i ldax ascb -# Extract - Errors: Bad Filters -run_with_expected_exit_code 255 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.assbjbns=*master*" psa -run_with_expected_exit_code 255 ./dist/cbxp extract -f "cvt.asvt.ascb.assb.assbjbns<*master*" -i "**" psa -run_with_expected_exit_code 255 ./dist/cbxp extract -f psapsb=PSA psa -run_with_expected_exit_code 255 ./dist/cbxp extract -f assbasid= assb -run_with_expected_exit_code 255 ./dist/cbxp extract -f 'ascbasid<=junk' ascb -run_with_expected_exit_code 255 ./dist/cbxp extract -f "psapsa=psa,cvt.asvt.ascb.ascbasid<2" cvt -run_with_expected_exit_code 255 ./dist/cbxp extract -f junk psa - -## Format Command - -# Format - Show Usage -run_with_expected_exit_code 0 ./dist/cbxp format -h -run_with_expected_exit_code 0 ./dist/cbxp format --help -# Format - Basic Usage -run_with_expected_exit_code 0 ./dist/cbxp format -F tests/samples/ascb.bin ascb -run_with_expected_exit_code 0 cat tests/samples/cvt.bin | ./dist/cbxp format cvt -run_with_expected_exit_code 0 ./dist/cbxp format -F tests/samples/oucb.bin oucb -# Format - Debug Mode -run_with_expected_exit_code 0 ./dist/cbxp format -F tests/samples/ascb.bin -d ascb -run_with_expected_exit_code 0 ./dist/cbxp format -F tests/samples/ascb.bin --debug ascb -# Format - Offset -run_with_expected_exit_code 0 ./dist/cbxp format -F tests/samples/ascb_offset_0x40.bin -o 0x40 ascb -run_with_expected_exit_code 0 ./dist/cbxp format -F tests/samples/ascb_offset_0x40.bin -o 64 ascb -run_with_expected_exit_code 0 cat tests/samples/oucb_offset_0x03a8.bin | ./dist/cbxp format -o 0x03a8 oucb -run_with_expected_exit_code 0 cat tests/samples/oucb_offset_0x03a8.bin | ./dist/cbxp format -o 936 oucb -# Format - Errors: Bad Usage -run_with_expected_exit_code 255 ./dist/cbxp format -run_with_expected_exit_code 255 ./dist/cbxp format --junk -run_with_expected_exit_code 255 ./dist/cbxp format --junk junk -run_with_expected_exit_code 255 ./dist/cbxp format psa -run_with_expected_exit_code 255 ./dist/cbxp format -i cvt psa -run_with_expected_exit_code 255 ./dist/cbxp format -f psapsa=PSA psa -# Format - Errors: Unknown Control Block -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/ascb.bin -d unknown -# Format - Errors: Bad Offset -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/ascb.bin -o 999999 ascb -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/ascb.bin -o -1 ascb -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/ascb.bin -o JUNK ascb -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/ascb.bin -o 5.5 ascb -# Format - Errors: Error Opening File -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/notreal.bin psa -# Format - Errors: No File/Pipe provided -run_with_expected_exit_code 255 ./dist/cbxp format psa -# Format - Errors: File and Pipe -run_with_expected_exit_code 255 sh -c 'cat tests/samples/cvt.bin | ./dist/cbxp format -F tests/samples/cvt.bin cvt' -# Format - Errors: Data Too Small -run_with_expected_exit_code 255 ./dist/cbxp format -F tests/samples/ascb.bin psa - -echo " -------------------------------- " -echo " -------------------------------- " -echo " All tests completed successfully" -echo " -------------------------------- " -echo " -------------------------------- "