require_relative './lib' class Simple < IntegrationTest ADDER_PACKAGE_NAME = 'testpack-adder' def test_update_single_package @prj = make_project 'using-adder' create_with_commit_sha update_to_version_1 update_with_option_off_and_build end def create_with_commit_sha @prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")' assert_success @prj.configure cache = @prj.read_cache assert_equal 1, cache.packages.size adder_cache = cache.packages[ADDER_PACKAGE_NAME] assert_not_nil adder_cache assert_equal '0', adder_cache.ver assert File.directory? adder_cache.src_dir assert File.directory? adder_cache.bin_dir @adder_ver_file = File.join(adder_cache.src_dir, 'version') assert File.file? @adder_ver_file assert_equal 'initial', File.read(@adder_ver_file).strip # calculated adder values assert_equal 'ON', cache['ADDER_BUILD_EXAMPLES'] assert_equal 'ON', cache['ADDER_BUILD_TESTS'] assert_equal adder_cache.src_dir, cache['adder_SOURCE_DIR'] assert_equal adder_cache.bin_dir, cache['adder_BINARY_DIR'] # store for future comparisons @adder_cache0 = adder_cache end def update_to_version_1 @prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")' assert_success @prj.configure cache = @prj.read_cache assert_equal 1, cache.packages.size adder_cache = cache.packages[ADDER_PACKAGE_NAME] assert_not_nil adder_cache assert_equal '1.0.0', adder_cache.ver # dirs shouldn't have changed assert_equal @adder_cache0.src_dir, adder_cache.src_dir assert_equal @adder_cache0.bin_dir, adder_cache.bin_dir assert_equal '1.0.0', File.read(@adder_ver_file).strip end def update_with_option_off_and_build @prj.create_lists_with package: <<~PACK CPMAddPackage( NAME testpack-adder GITHUB_REPOSITORY cpm-cmake/testpack-adder VERSION 1.0.0 OPTIONS "ADDER_BUILD_TESTS OFF" ) PACK assert_success @prj.configure assert_success @prj.build exe_dir = File.join(@prj.bin_dir, 'bin') assert File.directory? exe_dir exes = Dir[exe_dir + '/**/*'].filter { # on multi-configuration generators (like Visual Studio) the executables will be in bin/ # also filter-out other articacts like .pdb or .dsym !File.directory?(_1) && File.stat(_1).executable? }.map { # remove .exe extension if any (there will be one on Windows) File.basename(_1, '.exe') }.sort # we should end up with two executables # * simple - the simple example from adder # * using-adder - for this project # ...and notably no test for adder, which must be disabled from the option override from above assert_equal ['simple', 'using-adder'], exes end end