diff --git a/test/integration/lib.rb b/test/integration/lib.rb index 5d262b6..824b0eb 100644 --- a/test/integration/lib.rb +++ b/test/integration/lib.rb @@ -65,23 +65,23 @@ class Project CommandResult.new *Open3.capture3("cmake -S #{@src_dir} -B #{@build_dir} #{extra_args}") end - class CMakeCacheEntry - def initialize(val, type, advanced, desc) - @val = val - @type = type - @advanced = advanced - @desc = desc - end - attr :val, :type, :advanced, :desc - alias_method :advanced?, :advanced - def inspect - "(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')') - end - end class CMakeCache - def initialize(entries) - @entries = entries + class Entry + def initialize(val, type, advanced, desc) + @val = val + @type = type + @advanced = advanced + @desc = desc + end + attr :val, :type, :advanced, :desc + alias_method :advanced?, :advanced + def inspect + "(#{val.inspect} #{type}" + (advanced? ? ' ADVANCED)' : ')') + end end + + Package = Struct.new(:ver, :src_dir, :bin_dir) + def self.from_dir(dir) entries = {} cur_desc = '' @@ -96,26 +96,38 @@ class Project else m = /(.+?)(-ADVANCED)?:([A-Z]+)=(.*)/.match(line) raise "Error parsing '#{line}' in #{file}" if !m - entries[m[1]] = CMakeCacheEntry.new(m[4], m[3], !!m[2], cur_desc) + entries[m[1]] = Entry.new(m[4], m[3], !!m[2], cur_desc) cur_desc = '' end } CMakeCache.new entries end + def initialize(entries) + @entries = entries + + package_list = self['CPM_PACKAGES'] + @packages = if package_list + # collect package data + @packages = package_list.split(';').map { |name| + [name, Package.new( + self["CPM_PACKAGE_#{name}_VERSION"], + self["CPM_PACKAGE_#{name}_SOURCE_DIR"], + self["CPM_PACKAGE_#{name}_BINARY_DIR"] + )] + }.to_h + else + {} + end + end + + attr :entries, :packages + def [](key) e = @entries[key] return nil if !e e.val end - - def get_package_data(package) - [ - self["CPM_PACKAGE_#{package}_VERSION"], - self["CPM_PACKAGE_#{package}_SOURCE_DIR"], - self["CPM_PACKAGE_#{package}_BINARY_DIR"], - ] - end end def read_cache CMakeCache.from_dir @build_dir diff --git a/test/integration/test_simple.rb b/test/integration/test_simple.rb index c5e4810..55374ed 100644 --- a/test/integration/test_simple.rb +++ b/test/integration/test_simple.rb @@ -7,38 +7,34 @@ class Simple < IntegrationTest prj = make_project 'using-adder' prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder#cad1cd4b4cdf957c5b59e30bc9a1dd200dbfc716")' - cfg_result = prj.configure - - assert_success cfg_result + assert_success prj.configure cache = prj.read_cache + assert_equal 1, cache.packages.size - assert_equal P_ADDER, cache['CPM_PACKAGES'] + adder = cache.packages[P_ADDER] + assert_not_nil adder + assert_equal '0', adder.ver + assert File.directory? adder.src_dir + assert File.directory? adder.bin_dir - ver, src, bin = cache.get_package_data(P_ADDER) - - assert_equal ver, '0' - assert File.directory? src - assert File.directory? bin - - adder_ver_file = File.join(src, 'version') + adder_ver_file = File.join(adder.src_dir, 'version') assert File.file? adder_ver_file assert_equal 'initial', File.read(adder_ver_file).strip # reconfigure with new version prj.create_lists_with package: 'CPMAddPackage("gh:cpm-cmake/testpack-adder@1.0.0")' - cfg_result = prj.configure - - assert_success cfg_result + assert_success prj.configure cache = prj.read_cache + assert_equal 1, cache.packages.size - ver, src, bin = cache.get_package_data(P_ADDER) - - assert_equal '1.0.0', ver + adder = cache.packages[P_ADDER] + assert_not_nil adder + assert_equal '1.0.0', adder.ver # dir shouldn't have changed - assert_equal File.dirname(adder_ver_file), src + assert_equal File.dirname(adder_ver_file), adder.src_dir assert_equal '1.0.0', File.read(adder_ver_file).strip end diff --git a/test/style/CMakeLists.txt b/test/style/CMakeLists.txt index 72491e1..5dbf35c 100644 --- a/test/style/CMakeLists.txt +++ b/test/style/CMakeLists.txt @@ -8,5 +8,8 @@ CPMAddPackage( NAME Format.cmake VERSION 1.7.3 GITHUB_REPOSITORY TheLartians/Format.cmake + + # We exclude cmake files from integration tests as they contain invalid lines + # of code which are used by the integration test scripts OPTIONS "CMAKE_FORMAT_EXCLUDE integration/templates" )