cmake_minimum_required(VERSION 3.16)

project(new_explicit_version_file_no_patchlevel VERSION 1.5.6.7)

set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules)
include(ECMSetupVersion)

ecm_setup_version(2.3
    VARIABLE_PREFIX Foo
    PACKAGE_VERSION_FILE FooVersion.cmake
)

include(../version_helpers.cmake)
project_version_var_checks(1.5.6.7)
version_var_checks(Foo 2.3)
assert_var_num_value(Foo_SOVERSION 2)

macro(AnyNewer_2_3_checks filename)
    # too old - fails
    test_version_file("${filename}" "3.1")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # too old - fails
    test_version_file("${filename}" "3")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # too old - fails
    test_version_file("${filename}" "2.3.4")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # newer - succeeds
    test_version_file("${filename}" "1.1")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # newer - succeeds
    test_version_file("${filename}" "2.1")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # newer - succeeds
    test_version_file("${filename}" "2")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # unspecified - succeeds
    test_version_file("${filename}" "")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
    assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)

    # exact - succeeds
    test_version_file("${filename}" "2.3")
    assert_var_str_value(PACKAGE_VERSION "2.3")
    assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
    assert_var_bool_value(PACKAGE_VERSION_EXACT TRUE)
endmacro()
AnyNewer_2_3_checks("${CMAKE_CURRENT_BINARY_DIR}/FooVersion.cmake")

add_executable(dummy main.c)
