aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test
diff options
context:
space:
mode:
authorJack Nagel2013-01-29 22:52:10 -0600
committerJack Nagel2013-01-31 15:39:26 -0600
commitf4b126cc144c2a10b5eaf3ded3c14c2f9b08dc0f (patch)
tree38ce0189d508217b86cba25afbb972ce1a999b36 /Library/Homebrew/test
parent9ba9e749b81b4275dc1e530422582b9f1ee73ee9 (diff)
downloadbrew-f4b126cc144c2a10b5eaf3ded3c14c2f9b08dc0f.tar.bz2
Create proxy classes for "partial" X11 dependencies
When a formula's dependency tree contains more than one X11 dependency, they are de-duplicated by comparing the min_version attribute. However, this can result in broken dependency trees if one of the X11Dependency objects was actually specified as e.g. `:libpng`. In practice, this only matters when one or more of the dependencies has additional metadata that makes it distinct from the rest, i.e. an :optional or :recommended tag. To combat this, make these special, "partial" X11 dependencies instances of different classes so that they are not de-duped. It will still be necessary, at the time when requirements are expanded by the installer, to de-duplicate any remaining X11 dependencies after applying the optional/recommended filters in order to avoid duplicated modifications to the environment (as ENV.x11 is not idempotent). c.f. Homebrew/homebrew#17369.
Diffstat (limited to 'Library/Homebrew/test')
-rw-r--r--Library/Homebrew/test/test_x11_deps.rb67
1 files changed, 67 insertions, 0 deletions
diff --git a/Library/Homebrew/test/test_x11_deps.rb b/Library/Homebrew/test/test_x11_deps.rb
new file mode 100644
index 000000000..c455d03d3
--- /dev/null
+++ b/Library/Homebrew/test/test_x11_deps.rb
@@ -0,0 +1,67 @@
+require 'testing_env'
+require 'requirements'
+require 'extend/set'
+
+class X11DependencyTests < Test::Unit::TestCase
+ def test_eql_instances_are_eql
+ x = X11Dependency.new
+ y = X11Dependency.new
+ assert x.eql?(y)
+ assert y.eql?(x)
+ assert x.hash == y.hash
+ end
+
+ def test_not_eql_when_hashes_differ
+ x = X11Dependency.new("foo")
+ y = X11Dependency.new
+ assert x.hash != y.hash
+ assert !x.eql?(y)
+ assert !y.eql?(x)
+ end
+
+ def test_proxy_for
+ x = X11Dependency::Proxy.for("libpng")
+ assert_instance_of X11Dependency::Proxy::Libpng, x
+ assert_kind_of X11Dependency, x
+ end
+
+ def test_proxy_eql_instances_are_eql
+ x = X11Dependency::Proxy.for("libpng")
+ y = X11Dependency::Proxy.for("libpng")
+ assert x.eql?(y)
+ assert y.eql?(x)
+ assert x.hash == y.hash
+ end
+
+ def test_proxy_not_eql_when_hashes_differ
+ x = X11Dependency::Proxy.for("libpng")
+ y = X11Dependency::Proxy.for("fontconfig")
+ assert x.hash != y.hash
+ assert !x.eql?(y)
+ assert !y.eql?(x)
+ end
+
+ def test_x_never_eql_to_proxy_x11_dep
+ x = X11Dependency.new("libpng")
+ p = X11Dependency::Proxy.for("libpng")
+ assert !x.eql?(p)
+ assert !p.eql?(x)
+ end
+end
+
+class X11DepCollectionTests < Test::Unit::TestCase
+ def setup
+ @set = ComparableSet.new
+ end
+
+ def test_x_can_coxist_with_proxy
+ @set << X11Dependency.new << X11Dependency::Proxy.for("libpng")
+ assert_equal 2, @set.count
+ end
+
+ def test_multiple_proxies_can_coexist
+ @set << X11Dependency::Proxy.for("libpng")
+ @set << X11Dependency::Proxy.for("fontconfig")
+ assert_equal 2, @set.count
+ end
+end