Skip to content

Commit

Permalink
tests: Fix some command generation problems
Browse files Browse the repository at this point in the history
Can't figure out how to generate this correctly. 🤷
  • Loading branch information
Xaymar committed Apr 22, 2023
1 parent 6f4488a commit 4ab58b1
Show file tree
Hide file tree
Showing 2 changed files with 97 additions and 132 deletions.
140 changes: 94 additions & 46 deletions tests/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,25 +8,49 @@ include("helpers.cmake")
# Generation
message(STATUS "\n\n===== Generation =====")
# - Valid Cases
test_generate("0.0")
test_generate("1.0" MAJOR 1)
test_generate("0.2" MINOR 2)
test_generate("0.0.3" PATCH 3)
test_generate("0.0.0.4" TWEAK 4)
test_generate("0.0-5" COMPRESS PRERELEASE 5)
test_generate("0.0a5" COMPRESS PRERELEASE a5)
test_generate("0.0a5.5" COMPRESS PRERELEASE "a5;5")
test_generate("0.0+6" BUILD 6)
test_generate("0.0+6.8" BUILD "6;8")
version(GENERATE _TEST)
compare_test("0.0")
version(GENERATE _TEST MAJOR 1)
compare_test("1.0")
version(GENERATE _TEST MINOR 2)
compare_test("0.2")
version(GENERATE _TEST PATCH 3)
compare_test("0.0.3")
version(GENERATE _TEST TWEAK 4)
compare_test("0.0.0.4")
version(GENERATE _TEST COMPRESS PRERELEASE 5)
compare_test("0.0-5")
version(GENERATE _TEST COMPRESS PRERELEASE a5)
compare_test("0.0a5")
version(GENERATE _TEST COMPRESS PRERELEASE "a5;5")
compare_test("0.0a5.5")
version(GENERATE _TEST BUILD 6)
compare_test("0.0+6")
version(GENERATE _TEST BUILD "6;8")
compare_test("0.0+6.8")
version(GENERATE _TEST MAJOR 1 MINOR 2 PATCH 3 TWEAK 4 BUILD "gABCDEF01")
compare_test("1.2.3.4+gABCDEF01") # Discovered in StreamFX
version(GENERATE _TEST REQUIRE "PATCH;")
compare_test("0.0.0") # Discovered in TonPlugIns, StreamFX
version(GENERATE _TEST REQUIRE "TWEAK;PATCH")
compare_test("0.0.0.0") # Discovered in TonPlugIns, StreamFX
# - Invalid Cases
test_generate("-1.0.0" FAIL MAJOR "-1")
test_generate("0.-1.0" FAIL MINOR "-1")
test_generate("0.0.-1" FAIL PATCH "-1")
test_generate("0.0.0.-1" FAIL TWEAK "-1")
test_generate("0.0.0-#" FAIL PRERELEASE "#")
test_generate("0.0.0-0 0" FAIL PRERELEASE "0 0")
test_generate("0.0.0+#" FAIL BUILD "#")
test_generate("0.0.0+0 0" FAIL BUILD "0 0")
version(GENERATE _TEST MAJOR "-1")
compare_test("-1.0.0" FAIL)
version(GENERATE _TEST MINOR "-1")
compare_test("0.-1.0" FAIL)
version(GENERATE _TEST PATCH "-1")
compare_test("0.0.-1" FAIL)
version(GENERATE _TEST TWEAK "-1")
compare_test("0.0.0.-1" FAIL)
version(GENERATE _TEST PRERELEASE "#")
compare_test("0.0.0-#" FAIL)
version(GENERATE _TEST PRERELEASE "0 0")
compare_test("0.0.0-0 0" FAIL)
version(GENERATE _TEST BUILD "#")
compare_test("0.0.0+#" FAIL)
version(GENERATE _TEST BUILD "0 0")
compare_test("0.0.0+0 0" FAIL)

# Parsing
message(STATUS "\n\n===== Parsing =====")
Expand Down Expand Up @@ -63,30 +87,59 @@ test_parse("0.0.0+.0" FAIL)
# Modifying
message(STATUS "\n\n===== Modifying =====")
# - Valid Cases
test_modify("1.2" "0.2" MAJOR 1)
test_modify("1.2" "0.2" MAJOR "+1")
test_modify("1.2" "2.2" MAJOR "-1")
test_modify("1.2" "1.0" MINOR 2)
test_modify("1.2" "1.0" MINOR "+2")
test_modify("1.2" "1.3" MINOR "-1")
test_modify("1.2.3" "1.2" PATCH 3)
test_modify("1.2.3" "1.2.2" PATCH "+1")
test_modify("1.2.3" "1.2.4" PATCH "-1")
test_modify("1.2.0.4" "1.2" TWEAK 4)
test_modify("1.2.3.4" "1.2.3.3" TWEAK "+1")
test_modify("1.2.3.4" "1.2.3.5" TWEAK "-1")
test_modify("1.2-5" "1.2" COMPRESS PRERELEASE 5)
test_modify("1.2a5" "1.2" COMPRESS PRERELEASE a5)
test_modify("1.2+6" "1.2" COMPRESS BUILD 6)
test_modify("1.2-5+6" "1.2" COMPRESS PRERELEASE 5 BUILD 6)
test_modify("1.2a5+6" "1.2" COMPRESS PRERELEASE a5 BUILD 6)
version(MODIFY _TEST "0.2" MAJOR 1)
compare_test("1.2")
version(MODIFY _TEST "0.2" MAJOR "+1")
compare_test("1.2")
version(MODIFY _TEST "2.2" MAJOR "-1")
compare_test("1.2")
version(MODIFY _TEST "1.0" MINOR 2)
compare_test("1.2")
version(MODIFY _TEST "1.0" MINOR "+2")
compare_test("1.2")
version(MODIFY _TEST "1.3" MINOR "-1")
compare_test("1.2")
version(MODIFY _TEST "1.2" PATCH 3)
compare_test("1.2.3")
version(MODIFY _TEST "1.2.2" PATCH "+1")
compare_test("1.2.3")
version(MODIFY _TEST "1.2.4" PATCH "-1")
compare_test("1.2.3")
version(MODIFY _TEST "1.2" TWEAK 4)
compare_test("1.2.0.4")
version(MODIFY _TEST "1.2.3.3" TWEAK "+1")
compare_test("1.2.3.4")
version(MODIFY _TEST "1.2.3.5" TWEAK "-1")
compare_test("1.2.3.4")
version(MODIFY _TEST "1.2" COMPRESS PRERELEASE 5)
compare_test("1.2-5")
version(MODIFY _TEST "1.2" COMPRESS PRERELEASE a5)
compare_test("1.2a5")
version(MODIFY _TEST "1.2" COMPRESS BUILD 6)
compare_test("1.2+6")
version(MODIFY _TEST "1.2" COMPRESS PRERELEASE 5 BUILD 6)
compare_test("1.2-5+6")
version(MODIFY _TEST "1.2" COMPRESS PRERELEASE a5 BUILD 6)
compare_test("1.2a5+6")
version(MODIFY _TEST "0.2.0" TWEAK "4" BUILD "gABCDEF01")
compare_test("0.2.0.4+gABCDEF01") # Discovered in StreamFX
version(MODIFY _TEST "1.2" COMPRESS REQUIRE "PATCH;")
compare_test("1.2.0") # Discovered in TonPlugIns, StreamFX
version(MODIFY _TEST "1.2" COMPRESS REQUIRE "TWEAK;")
compare_test("1.2.0.0") # Discovered in TonPlugIns, StreamFX
# - Invalid Cases
test_modify("0.0" "0.0" FAIL MAJOR -1)
test_modify("0.0" "0.0" FAIL MINOR -1)
test_modify("0.0" "0.0" FAIL PATCH -1)
test_modify("0.0" "0.0" FAIL TWEAK -1)
test_modify("0.0" "0.0" FAIL COMPRESS PRERELEASE "#")
test_modify("0.0" "0.0" FAIL COMPRESS BUILD "#")
version(MODIFY _TEST "0.0" MAJOR -1)
compare_test("0.0" FAIL)
version(MODIFY _TEST "0.0" MINOR -1)
compare_test("0.0" FAIL)
version(MODIFY _TEST "0.0" PATCH -1)
compare_test("0.0" FAIL)
version(MODIFY _TEST "0.0" TWEAK -1)
compare_test("0.0" FAIL)
version(MODIFY _TEST "0.0" COMPRESS PRERELEASE "#")
compare_test("0.0" FAIL)
version(MODIFY _TEST "0.0" COMPRESS BUILD "#")
compare_test("0.0" FAIL)

# Comparing
message(STATUS "\n\n===== Comparing =====")
Expand All @@ -111,8 +164,3 @@ test_compare("0.0-5" "+PRERELEASE" "0.0")
test_compare("0.0" "-PRERELEASE" "0.0-5")
test_compare("0.0+6" "+BUILD" "0.0")
test_compare("0.0" "-BUILD" "0.0+6")

# Discovered failure cases
message(STATUS "\n\n===== User-generated Cases =====")
test_generate("1.2.3.4+gABCDEF01" MAJOR 1 MINOR 2 PATCH 3 TWEAK 4 BUILD "gABCDEF01")
test_modify("0.2.0.4+gABCDEF01" "0.2.0" TWEAK "4" BUILD "gABCDEF01")
89 changes: 3 additions & 86 deletions tests/helpers.cmake
Original file line number Diff line number Diff line change
@@ -1,38 +1,13 @@
include("../version.cmake")

function(test_generate)
function(compare_test)
cmake_parse_arguments(
PARSE_ARGV 1
_6edc8bbd
"COMPRESS;FAIL"
"MAJOR;MINOR;PATCH;TWEAK;PRERELEASE;BUILD"
"FAIL"
""
""
)

set(ARGS "")
if(_6edc8bbd_MAJOR)
set(ARGS "${ARGS} MAJOR \"${_6edc8bbd_MAJOR}\"")
endif()
if(_6edc8bbd_MINOR)
set(ARGS "${ARGS} MINOR \"${_6edc8bbd_MINOR}\"")
endif()
if(_6edc8bbd_PATCH)
set(ARGS "${ARGS} PATCH \"${_6edc8bbd_PATCH}\"")
endif()
if(_6edc8bbd_TWEAK)
set(ARGS "${ARGS} TWEAK \"${_6edc8bbd_TWEAK}\"")
endif()
if(_6edc8bbd_PRERELEASE)
set(ARGS "${ARGS} PRERELEASE \"${_6edc8bbd_PRERELEASE}\"")
endif()
if(_6edc8bbd_BUILD)
set(ARGS "${ARGS} BUILD \"${_6edc8bbd_BUILD}\"")
endif()
if(_6edc8bbd_COMPRESS)
set(ARGS "${ARGS} COMPRESS")
endif()
cmake_language(EVAL CODE "version(GENERATE _TEST ${ARGS})")

if(_TEST_ERROR)
if(_6edc8bbd_FAIL)
message(STATUS "PASSED: '${ARGV0}'.\n\t${_TEST_ERROR}")
Expand Down Expand Up @@ -139,64 +114,6 @@ function(test_parse)
endif()
endfunction()

function(test_modify)
cmake_parse_arguments(
PARSE_ARGV 2
_6edc8bbd
"FAIL;COMPRESS"
"MAJOR;MINOR;PATCH;TWEAK;PRERELEASE;BUILD"
""
)

set(ARGS "")
if(_6edc8bbd_MAJOR)
set(ARGS "${ARGS} MAJOR \"${_6edc8bbd_MAJOR}\"")
endif()
if(_6edc8bbd_MINOR)
set(ARGS "${ARGS} MINOR \"${_6edc8bbd_MINOR}\"")
endif()
if(_6edc8bbd_PATCH)
set(ARGS "${ARGS} PATCH \"${_6edc8bbd_PATCH}\"")
endif()
if(_6edc8bbd_TWEAK)
set(ARGS "${ARGS} TWEAK \"${_6edc8bbd_TWEAK}\"")
endif()
if(_6edc8bbd_PRERELEASE)
set(ARGS "${ARGS} PRERELEASE \"${_6edc8bbd_PRERELEASE}\"")
endif()
if(_6edc8bbd_BUILD)
set(ARGS "${ARGS} BUILD \"${_6edc8bbd_BUILD}\"")
endif()
if(_6edc8bbd_COMPRESS)
set(ARGS "${ARGS} COMPRESS")
endif()
cmake_language(EVAL CODE "version(MODIFY _TEST \"${ARGV1}\" ${ARGS})")

set(FAILED OFF)
if(_TEST_ERROR)
set(MESSAGE "${_TEST_ERROR}")
set(FAILED ON)
else()
if(NOT (_TEST STREQUAL ARGV0))
set(FAILED ON)
endif()
endif()

if(FAILED)
if(_6edc8bbd_FAIL)
message(STATUS "PASSED: '${ARGV0}' != '${_TEST}'.\n\t${MESSAGE}")
else()
message(SEND_ERROR "FAILED: '${ARGV0}' != '${_TEST}'.\n\t${MESSAGE}")
endif()
else()
if(_6edc8bbd_FAIL)
message(SEND_ERROR "FAILED: '${ARGV0}' == '${_TEST}'.\n\t${MESSAGE}")
else()
message(STATUS "PASSED: '${ARGV0}' == '${_TEST}'.")
endif()
endif()
endfunction()

function(test_compare)
cmake_parse_arguments(
PARSE_ARGV 3
Expand Down

0 comments on commit 4ab58b1

Please sign in to comment.