diff --git a/test/integration/lib.rb b/test/integration/lib.rb index 2fad5f6..9363bd7 100644 --- a/test/integration/lib.rb +++ b/test/integration/lib.rb @@ -140,6 +140,8 @@ class Project end class IntegrationTest < Test::Unit::TestCase + self.test_order = :defined # run tests in order of defintion (as opposed to alphabetical) + def setup # Clear existing cpm-related env vars TestLib.clear_env diff --git a/test/integration/test_a_lib.rb b/test/integration/test_a_lib.rb new file mode 100644 index 0000000..9fd8a3c --- /dev/null +++ b/test/integration/test_a_lib.rb @@ -0,0 +1,20 @@ +require_relative './lib' + +# Tests and experiments with the integration test framework itself + +class ALib < IntegrationTest + def test_zza + f = -> { + assert_equal 2, 2 + } + f.() + end + + def test_b + test_foo('xxx') + end + + def test_foo(xxx) + assert_equal 'xxx', xxx + end +end diff --git a/test/integration/test_simple.rb b/test/integration/test_simple.rb index cc203cc..c6bb3f4 100644 --- a/test/integration/test_simple.rb +++ b/test/integration/test_simple.rb @@ -4,86 +4,86 @@ class Simple < IntegrationTest ADDER_PACKAGE_NAME = 'testpack-adder' def test_update_single_package - @prj = make_project 'using-adder' + prj = make_project 'using-adder' + adder_cache0 = nil + adder_ver_file = nil - create_with_commit_sha - update_to_version_1 - update_with_option_off_and_build - end + create_with_commit_sha = -> { + prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")' + assert_success prj.configure - 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 - 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_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 - @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'] - # 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 + } + update_to_version_1 = -> { + prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")' + assert_success prj.configure - # store for future comparisons - @adder_cache0 = adder_cache - end + cache = prj.read_cache + assert_equal 1, cache.packages.size - def update_to_version_1 - @prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")' - assert_success @prj.configure + adder_cache = cache.packages[ADDER_PACKAGE_NAME] + assert_not_nil adder_cache + assert_equal '1.0.0', adder_cache.ver - cache = @prj.read_cache - assert_equal 1, cache.packages.size + # 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 - adder_cache = cache.packages[ADDER_PACKAGE_NAME] - assert_not_nil adder_cache - assert_equal '1.0.0', adder_cache.ver + assert_equal '1.0.0', File.read(adder_ver_file).strip + } + 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 - # 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 + exe_dir = File.join(prj.bin_dir, 'bin') + assert File.directory? exe_dir - assert_equal '1.0.0', File.read(@adder_ver_file).strip - end + 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 - 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 + # 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 + } - 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 + create_with_commit_sha.() + update_to_version_1.() + update_with_option_off_and_build.() end end diff --git a/test/integration/test_source_cache.rb b/test/integration/test_source_cache.rb index a6da52a..2db9dd0 100644 --- a/test/integration/test_source_cache.rb +++ b/test/integration/test_source_cache.rb @@ -10,34 +10,14 @@ class SourceCache < IntegrationTest end def test_add_remove_dependency - @prj = make_project 'using-fibadder' + prj = make_project 'using-fibadder' - create_with_fibadder - end + ################################### + # create + prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-fibadder@1.0.0")' + assert_success prj.configure - def test_second_project - # @prj = make_project 'using-fibadder' - - # create_with_newer_fibadder - end - - def dir_subdirs(dir) - Dir["#{dir}/*/"] - end - - def check_package_cache(name, ver, dir_sha1) - package = @cache.packages[name] - assert_not_nil package, name - assert_equal ver, package.ver - assert package.src_dir.start_with?(@cache_dir), "#{package.src_dir} must be in #{@cache_dir}" - assert_equal dir_sha1, File.basename(package.src_dir) - end - - def create_with_fibadder - @prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-fibadder@1.0.0")' - assert_success @prj.configure - - @cache = @prj.read_cache + @cache = prj.read_cache # fibadder - adder # \ fibonacci - Format @@ -47,21 +27,55 @@ class SourceCache < IntegrationTest check_package_cache 'testpack-adder', '1.0.0', '1a4c153849d8e0cf9a3a245e5f6ab6e4722d8995' check_package_cache 'testpack-fibonacci', '2.0', '332c789cb09b8c2f92342dfb874c82bec643daf6' check_package_cache 'Format.cmake', '1.0', 'c5897bd28c5032d45f7f669c8fb470790d2ae156' + + ################################### + # add one package with a newer version + prj.create_lists_with packages: [ + 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.1")', + 'CPMAddPackage("gh:cpm-cmake/testpack-fibadder@1.0.0")', + ] + assert_success prj.configure + + @cache = prj.read_cache + assert_equal 4, @cache.packages.size + + check_package_cache 'testpack-fibadder', '1.0.0', '6a17d24c95c44a169ff8ba173f52876a2ba3d137' + check_package_cache 'testpack-adder', '1.0.1', '84eb33c1b8db880083cefc2adf4dc3f04778cd44' + check_package_cache 'testpack-fibonacci', '2.0', '332c789cb09b8c2f92342dfb874c82bec643daf6' + check_package_cache 'Format.cmake', '1.0', 'c5897bd28c5032d45f7f669c8fb470790d2ae156' end - def create_with_newer_fibadder - @prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-fibadder@1.1.0")' - assert_success @prj.configure + def test_second_project + prj = make_project 'using-fibadder' + prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-fibadder@1.1.0")' + assert_success prj.configure - @cache = @prj.read_cache + @cache = prj.read_cache # fibadder - adder # \ fibonacci - Format assert_equal 4, @cache.packages.size - check_package_cache 'testpack-fibadder', '1.1.0', '6a17d24c95c44a169ff8ba173f52876a2ba3d137' - check_package_cache 'testpack-adder', '1.0.1', '1a4c153849d8e0cf9a3a245e5f6ab6e4722d8995' + check_package_cache 'testpack-fibadder', '1.1.0', '603d79d88d7230cc749460a0f476df862aa70ead' + check_package_cache 'testpack-adder', '1.0.1', '84eb33c1b8db880083cefc2adf4dc3f04778cd44' check_package_cache 'testpack-fibonacci', '2.0', '332c789cb09b8c2f92342dfb874c82bec643daf6' check_package_cache 'Format.cmake', '1.0', 'c5897bd28c5032d45f7f669c8fb470790d2ae156' end + + def test_cache_dir_contents + num_subdirs = -> (name) { Dir["#{File.join(@cache_dir, name.downcase)}/*/"].size } + assert_equal 2, num_subdirs.('testpack-fibadder') + assert_equal 2, num_subdirs.('testpack-adder') + assert_equal 1, num_subdirs.('testpack-fibonacci') + assert_equal 1, num_subdirs.('Format.cmake') + end + + def check_package_cache(name, ver, dir_sha1) + package = @cache.packages[name] + assert_not_nil package, name + assert_equal ver, package.ver + expected_parent_dir = File.join(@cache_dir, name.downcase) + assert package.src_dir.start_with?(expected_parent_dir), "#{package.src_dir} must be in #{expected_parent_dir}" + assert_equal dir_sha1, File.basename(package.src_dir) + end end