From a69997cab03988f381894b08d4b82d25014e8fed Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 16:15:04 +0000 Subject: tests: include homebrew version in receipt fixture --- Library/Homebrew/test/support/fixtures/receipt.json | 1 + 1 file changed, 1 insertion(+) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/support/fixtures/receipt.json b/Library/Homebrew/test/support/fixtures/receipt.json index b20626bbe..a57d6d80d 100644 --- a/Library/Homebrew/test/support/fixtures/receipt.json +++ b/Library/Homebrew/test/support/fixtures/receipt.json @@ -1,4 +1,5 @@ { + "homebrew_version": "1.1.6", "used_options": [ "--with-foo", "--without-bar" -- cgit v1.2.3 From bdbc19c614dd9f787c92ce3e0f62180d2238f177 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 16:16:28 +0000 Subject: tab: implement #reliable_runtime_dependencies? --- Library/Homebrew/test/tab_test.rb | 47 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/tab_test.rb b/Library/Homebrew/test/tab_test.rb index 5d83b5907..eecb11194 100644 --- a/Library/Homebrew/test/tab_test.rb +++ b/Library/Homebrew/test/tab_test.rb @@ -69,6 +69,53 @@ class TabTests < Homebrew::TestCase assert_predicate tab, :universal? end + def test_homebrew_tag + tab = Tab.new(homebrew_version: "1.2.3") + assert_equal "1.2.3", tab.homebrew_tag + + tab.homebrew_version = "1.2.4-567-g12789abdf" + assert_equal "1.2.4", tab.homebrew_tag + + tab.homebrew_version = "2.0.0-134-gabcdefabc-dirty" + assert_equal "2.0.0", tab.homebrew_tag + end + + def test_parsed_homebrew_version + tab = Tab.new + assert_same Version::NULL, tab.parsed_homebrew_version + + tab = Tab.new(homebrew_version: "1.2.3") + assert_equal "1.2.3", tab.parsed_homebrew_version + assert_kind_of Version, tab.parsed_homebrew_version + + tab = Tab.new(homebrew_version: "2.0.0-134-gabcdefabc-dirty") + assert_equal "2.0.0", tab.parsed_homebrew_version + assert_kind_of Version, tab.parsed_homebrew_version + end + + def test_reliable_runtime_dependencies? + tab = Tab.new + refute_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.6" + refute_predicate tab, :reliable_runtime_dependencies? + + tab.runtime_dependencies = [] + assert_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.5" + refute_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.7" + assert_predicate tab, :reliable_runtime_dependencies? + + tab.homebrew_version = "1.1.10" + assert_predicate tab, :reliable_runtime_dependencies? + + tab.runtime_dependencies = [{ "full_name" => "foo", "version" => "1.0" }] + assert_predicate tab, :reliable_runtime_dependencies? + end + def test_cxxstdlib assert_equal :clang, @tab.cxxstdlib.compiler assert_equal :libcxx, @tab.cxxstdlib.type -- cgit v1.2.3 From e5db7927c940e260fe10d4c88754b7b01384e427 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 16:16:53 +0000 Subject: keg: fall back for dependencies of buggy tabs Fixes #1554. --- Library/Homebrew/test/keg_test.rb | 14 +++++++++++++- Library/Homebrew/test/uninstall_test.rb | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/keg_test.rb b/Library/Homebrew/test/keg_test.rb index 4fe7c6a3c..034d10215 100644 --- a/Library/Homebrew/test/keg_test.rb +++ b/Library/Homebrew/test/keg_test.rb @@ -348,13 +348,18 @@ class InstalledDependantsTests < LinkTestCase tab.write end - def dependencies(deps) + def dependencies(deps, homebrew_version: "1.1.6") alter_tab do |tab| + tab.homebrew_version = homebrew_version tab.tabfile = @dependent.join("INSTALL_RECEIPT.json") tab.runtime_dependencies = deps end end + def unreliable_dependencies(deps) + dependencies(deps, homebrew_version: "1.1.5") + end + # Test with a keg whose formula isn't known. # This can happen if e.g. a formula is installed # from a file path or URL. @@ -406,4 +411,11 @@ class InstalledDependantsTests < LinkTestCase assert_equal [@dependent], @keg.installed_dependents assert_equal [[@keg], ["bar 1.0"]], Keg.find_some_installed_dependents([@keg]) end + + def test_fallback_for_old_versions + unreliable_dependencies [{ "full_name" => "baz", "version" => "1.0" }] + Formula["bar"].class.depends_on "foo" + assert_empty @keg.installed_dependents + assert_equal [[@keg], ["bar"]], Keg.find_some_installed_dependents([@keg]) + end end diff --git a/Library/Homebrew/test/uninstall_test.rb b/Library/Homebrew/test/uninstall_test.rb index 5c53988f2..e7849178b 100644 --- a/Library/Homebrew/test/uninstall_test.rb +++ b/Library/Homebrew/test/uninstall_test.rb @@ -12,6 +12,7 @@ class UninstallTests < Homebrew::TestCase [@dependency, @dependent].each { |f| f.installed_prefix.mkpath } tab = Tab.empty + tab.homebrew_version = "1.1.6" tab.tabfile = @dependent.installed_prefix/Tab::FILENAME tab.runtime_dependencies = [ { "full_name" => "dependency", "version" => "1" }, -- cgit v1.2.3 From ce454bd141ec4f97b2bfb9d71e0cea4389c78089 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 18:15:35 +0000 Subject: tab: parse full Homebrew version string It didn't occur to me that this would work, but it does! Magic. --- Library/Homebrew/test/tab_test.rb | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/tab_test.rb b/Library/Homebrew/test/tab_test.rb index eecb11194..bc0be8576 100644 --- a/Library/Homebrew/test/tab_test.rb +++ b/Library/Homebrew/test/tab_test.rb @@ -86,11 +86,18 @@ class TabTests < Homebrew::TestCase tab = Tab.new(homebrew_version: "1.2.3") assert_equal "1.2.3", tab.parsed_homebrew_version + assert tab.parsed_homebrew_version < "1.2.3-1-g12789abdf" assert_kind_of Version, tab.parsed_homebrew_version + tab.homebrew_version = "1.2.4-567-g12789abdf" + assert tab.parsed_homebrew_version > "1.2.4" + assert tab.parsed_homebrew_version > "1.2.4-566-g21789abdf" + assert tab.parsed_homebrew_version < "1.2.4-568-g01789abdf" + tab = Tab.new(homebrew_version: "2.0.0-134-gabcdefabc-dirty") - assert_equal "2.0.0", tab.parsed_homebrew_version - assert_kind_of Version, tab.parsed_homebrew_version + assert tab.parsed_homebrew_version > "2.0.0" + assert tab.parsed_homebrew_version > "2.0.0-133-g21789abdf" + assert tab.parsed_homebrew_version < "2.0.0-135-g01789abdf" end def test_reliable_runtime_dependencies? -- cgit v1.2.3 From c41d1d814868c9c7d58faf1bbcc88ed509d71229 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 18:16:49 +0000 Subject: tab: remove #homebrew_tag This method isn't used any more --- Library/Homebrew/test/tab_test.rb | 11 ----------- 1 file changed, 11 deletions(-) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/tab_test.rb b/Library/Homebrew/test/tab_test.rb index bc0be8576..8ba36393b 100644 --- a/Library/Homebrew/test/tab_test.rb +++ b/Library/Homebrew/test/tab_test.rb @@ -69,17 +69,6 @@ class TabTests < Homebrew::TestCase assert_predicate tab, :universal? end - def test_homebrew_tag - tab = Tab.new(homebrew_version: "1.2.3") - assert_equal "1.2.3", tab.homebrew_tag - - tab.homebrew_version = "1.2.4-567-g12789abdf" - assert_equal "1.2.4", tab.homebrew_tag - - tab.homebrew_version = "2.0.0-134-gabcdefabc-dirty" - assert_equal "2.0.0", tab.homebrew_tag - end - def test_parsed_homebrew_version tab = Tab.new assert_same Version::NULL, tab.parsed_homebrew_version -- cgit v1.2.3 From 4322c1c562d2c5695a43e96e88db44e57083cf50 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 18:19:26 +0000 Subject: tests: explain Homebrew version checking in tabs --- Library/Homebrew/test/keg_test.rb | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/keg_test.rb b/Library/Homebrew/test/keg_test.rb index 034d10215..16bfe461b 100644 --- a/Library/Homebrew/test/keg_test.rb +++ b/Library/Homebrew/test/keg_test.rb @@ -348,6 +348,8 @@ class InstalledDependantsTests < LinkTestCase tab.write end + # 1.1.6 is the earliest version of Homebrew that generates correct runtime + # dependency lists in tabs. def dependencies(deps, homebrew_version: "1.1.6") alter_tab do |tab| tab.homebrew_version = homebrew_version @@ -357,6 +359,8 @@ class InstalledDependantsTests < LinkTestCase end def unreliable_dependencies(deps) + # 1.1.5 is (hopefully!) the last version of Homebrew that generates + # incorrect runtime dependency lists in tabs. dependencies(deps, homebrew_version: "1.1.5") end -- cgit v1.2.3 From d998a3fcce579b087dee76c5aeb9956713e81b62 Mon Sep 17 00:00:00 2001 From: Alyssa Ross Date: Fri, 30 Dec 2016 20:34:14 +0000 Subject: tab: remove #reliable_runtime_dependencies? See https://github.com/Homebrew/brew/pull/1750#discussion_r94243825 for discussion. Removes Tab#reliable_runtime_dependencies? in favour of returning nil from Tab#runtime_dependencies if the list is unreliable. Because Homebrew 1.1.6 hasn't been tagged yet, tabs created in tests aren't created with a homebrew_version that marks the runtime_dependencies in the Tab as reliable, so there are some tests that fail. To work around this, I've had to add a line to some tests that explicitly overrides the homebrew_version in the Tab. This is really ugly though, so they should be removed as soon as possible after 1.1.6 is released. --- Library/Homebrew/test/tab_test.rb | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'Library/Homebrew/test') diff --git a/Library/Homebrew/test/tab_test.rb b/Library/Homebrew/test/tab_test.rb index 8ba36393b..526e1f79e 100644 --- a/Library/Homebrew/test/tab_test.rb +++ b/Library/Homebrew/test/tab_test.rb @@ -32,6 +32,11 @@ class TabTests < Homebrew::TestCase def test_defaults tab = Tab.empty + + # FIXME: remove this line after Homebrew 1.1.6 is released. + # See https://github.com/Homebrew/brew/pull/1750#discussion_r94254622 + tab.homebrew_version = "1.1.6" + assert_empty tab.unused_options assert_empty tab.used_options assert_nil tab.changed_files @@ -89,27 +94,27 @@ class TabTests < Homebrew::TestCase assert tab.parsed_homebrew_version < "2.0.0-135-g01789abdf" end - def test_reliable_runtime_dependencies? + def test_runtime_dependencies tab = Tab.new - refute_predicate tab, :reliable_runtime_dependencies? + assert_nil tab.runtime_dependencies tab.homebrew_version = "1.1.6" - refute_predicate tab, :reliable_runtime_dependencies? + assert_nil tab.runtime_dependencies tab.runtime_dependencies = [] - assert_predicate tab, :reliable_runtime_dependencies? + refute_nil tab.runtime_dependencies tab.homebrew_version = "1.1.5" - refute_predicate tab, :reliable_runtime_dependencies? + assert_nil tab.runtime_dependencies tab.homebrew_version = "1.1.7" - assert_predicate tab, :reliable_runtime_dependencies? + refute_nil tab.runtime_dependencies tab.homebrew_version = "1.1.10" - assert_predicate tab, :reliable_runtime_dependencies? + refute_nil tab.runtime_dependencies tab.runtime_dependencies = [{ "full_name" => "foo", "version" => "1.0" }] - assert_predicate tab, :reliable_runtime_dependencies? + refute_nil tab.runtime_dependencies end def test_cxxstdlib @@ -194,6 +199,10 @@ class TabTests < Homebrew::TestCase stdlib = :libcxx tab = Tab.create(f, compiler, stdlib) + # FIXME: remove this line after Homebrew 1.1.6 is released. + # See https://github.com/Homebrew/brew/pull/1750#discussion_r94254622 + tab.homebrew_version = "1.1.6" + runtime_dependencies = [ { "full_name" => "bar", "version" => "2.0" }, { "full_name" => "user/repo/from_tap", "version" => "1.0" }, -- cgit v1.2.3