aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/test')
-rw-r--r--Library/Homebrew/test/cmd/commands_spec.rb85
-rw-r--r--Library/Homebrew/test/cmd/uninstall_spec.rb64
-rw-r--r--Library/Homebrew/test/commands_test.rb77
-rw-r--r--Library/Homebrew/test/dependencies_spec.rb86
-rw-r--r--Library/Homebrew/test/dependencies_test.rb117
-rw-r--r--Library/Homebrew/test/formula_installer_spec.rb137
-rw-r--r--Library/Homebrew/test/formula_installer_test.rb131
-rw-r--r--Library/Homebrew/test/formula_spec_selection_spec.rb100
-rw-r--r--Library/Homebrew/test/formula_spec_selection_test.rb99
-rw-r--r--Library/Homebrew/test/requirements_spec.rb26
-rw-r--r--Library/Homebrew/test/support/helper/test_case.rb2
-rw-r--r--Library/Homebrew/test/support/helper/version_assertions.rb23
-rw-r--r--Library/Homebrew/test/uninstall_test.rb62
-rw-r--r--Library/Homebrew/test/version_spec.rb602
-rw-r--r--Library/Homebrew/test/versions_test.rb528
15 files changed, 1100 insertions, 1039 deletions
diff --git a/Library/Homebrew/test/cmd/commands_spec.rb b/Library/Homebrew/test/cmd/commands_spec.rb
index f42072956..32d07a0bc 100644
--- a/Library/Homebrew/test/cmd/commands_spec.rb
+++ b/Library/Homebrew/test/cmd/commands_spec.rb
@@ -1,3 +1,7 @@
+require "cmd/command"
+require "cmd/commands"
+require "fileutils"
+
describe "brew commands", :integration_test do
it "prints a list of all available commands" do
expect { brew "commands" }
@@ -5,3 +9,84 @@ describe "brew commands", :integration_test do
.and be_a_success
end
end
+
+RSpec.shared_context "custom internal commands" do
+ let(:cmds) do
+ [
+ # internal commands
+ HOMEBREW_LIBRARY_PATH/"cmd/rbcmd.rb",
+ HOMEBREW_LIBRARY_PATH/"cmd/shcmd.sh",
+
+ # internal developer-commands
+ HOMEBREW_LIBRARY_PATH/"dev-cmd/rbdevcmd.rb",
+ HOMEBREW_LIBRARY_PATH/"dev-cmd/shdevcmd.sh",
+ ]
+ end
+
+ around(:each) do |example|
+ begin
+ cmds.each do |f|
+ FileUtils.touch f
+ end
+
+ example.run
+ ensure
+ FileUtils.rm_f cmds
+ end
+ end
+end
+
+describe Homebrew do
+ include_context "custom internal commands"
+
+ specify "::internal_commands" do
+ cmds = described_class.internal_commands
+ expect(cmds).to include("rbcmd"), "Ruby commands files should be recognized"
+ expect(cmds).to include("shcmd"), "Shell commands files should be recognized"
+ expect(cmds).not_to include("rbdevcmd"), "Dev commands shouldn't be included"
+ end
+
+ specify "::internal_developer_commands" do
+ cmds = described_class.internal_developer_commands
+ expect(cmds).to include("rbdevcmd"), "Ruby commands files should be recognized"
+ expect(cmds).to include("shdevcmd"), "Shell commands files should be recognized"
+ expect(cmds).not_to include("rbcmd"), "Non-dev commands shouldn't be included"
+ end
+
+ specify "::external_commands" do
+ Dir.mktmpdir do |dir|
+ %w[brew-t1 brew-t2.rb brew-t3.py].each do |file|
+ path = "#{dir}/#{file}"
+ FileUtils.touch path
+ FileUtils.chmod 0755, path
+ end
+
+ FileUtils.touch "#{dir}/brew-t4"
+
+ ENV["PATH"] += "#{File::PATH_SEPARATOR}#{dir}"
+ cmds = described_class.external_commands
+
+ expect(cmds).to include("t1"), "Executable files should be included"
+ expect(cmds).to include("t2"), "Executable Ruby files should be included"
+ expect(cmds).not_to include("t3"), "Executable files with a non Ruby extension shoudn't be included"
+ expect(cmds).not_to include("t4"), "Non-executable files shouldn't be included"
+ end
+ end
+end
+
+describe Commands do
+ include_context "custom internal commands"
+
+ describe "::path" do
+ specify "returns the path for an internal command" do
+ expect(described_class.path("rbcmd")).to eq(HOMEBREW_LIBRARY_PATH/"cmd/rbcmd.rb")
+ expect(described_class.path("shcmd")).to eq(HOMEBREW_LIBRARY_PATH/"cmd/shcmd.sh")
+ expect(described_class.path("idontexist1234")).to be nil
+ end
+
+ specify "returns the path for an internal developer-command" do
+ expect(described_class.path("rbdevcmd")).to eq(HOMEBREW_LIBRARY_PATH/"dev-cmd/rbdevcmd.rb")
+ expect(described_class.path("shdevcmd")).to eq(HOMEBREW_LIBRARY_PATH/"dev-cmd/shdevcmd.sh")
+ end
+ end
+end
diff --git a/Library/Homebrew/test/cmd/uninstall_spec.rb b/Library/Homebrew/test/cmd/uninstall_spec.rb
index 65f69e802..b9a0d8d40 100644
--- a/Library/Homebrew/test/cmd/uninstall_spec.rb
+++ b/Library/Homebrew/test/cmd/uninstall_spec.rb
@@ -1,3 +1,5 @@
+require "cmd/uninstall"
+
describe "brew uninstall", :integration_test do
it "uninstalls a given Formula" do
shutup do
@@ -10,3 +12,65 @@ describe "brew uninstall", :integration_test do
.and be_a_success
end
end
+
+describe Homebrew do
+ let(:dependency) { formula("dependency") { url "f-1" } }
+ let(:dependent) do
+ formula("dependent") do
+ url "f-1"
+ depends_on "dependency"
+ end
+ end
+
+ let(:opts) { { dependency.rack => [Keg.new(dependency.installed_prefix)] } }
+
+ before(:each) do
+ [dependency, dependent].each do |f|
+ f.installed_prefix.mkpath
+ Keg.new(f.installed_prefix).optlink
+ end
+
+ tab = Tab.empty
+ tab.homebrew_version = "1.1.6"
+ tab.tabfile = dependent.installed_prefix/Tab::FILENAME
+ tab.runtime_dependencies = [
+ { "full_name" => "dependency", "version" => "1" },
+ ]
+ tab.write
+
+ stub_formula_loader dependency
+ stub_formula_loader dependent
+ end
+
+ describe "::handle_unsatisfied_dependents" do
+ specify "when developer" do
+ expect {
+ described_class.handle_unsatisfied_dependents(opts)
+ }.to output(/Warning/).to_stderr
+
+ expect(described_class).not_to have_failed
+ end
+
+ specify "when not developer" do
+ run_as_not_developer do
+ expect {
+ described_class.handle_unsatisfied_dependents(opts)
+ }.to output(/Error/).to_stderr
+
+ expect(described_class).to have_failed
+ end
+ end
+
+ specify "when not developer and --ignore-dependencies is specified" do
+ ARGV << "--ignore-dependencies"
+
+ run_as_not_developer do
+ expect {
+ described_class.handle_unsatisfied_dependents(opts)
+ }.not_to output.to_stderr
+
+ expect(described_class).not_to have_failed
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/test/commands_test.rb b/Library/Homebrew/test/commands_test.rb
deleted file mode 100644
index da88ee2d5..000000000
--- a/Library/Homebrew/test/commands_test.rb
+++ /dev/null
@@ -1,77 +0,0 @@
-require "testing_env"
-require "cmd/command"
-require "cmd/commands"
-require "fileutils"
-require "testing_env"
-
-class CommandsTests < Homebrew::TestCase
- def setup
- super
- @cmds = [
- # internal commands
- HOMEBREW_LIBRARY_PATH/"cmd/rbcmd.rb",
- HOMEBREW_LIBRARY_PATH/"cmd/shcmd.sh",
-
- # internal development commands
- HOMEBREW_LIBRARY_PATH/"dev-cmd/rbdevcmd.rb",
- HOMEBREW_LIBRARY_PATH/"dev-cmd/shdevcmd.sh",
- ]
-
- @cmds.each { |f| FileUtils.touch f }
- end
-
- def teardown
- @cmds.each(&:unlink)
- super
- end
-
- def test_internal_commands
- cmds = Homebrew.internal_commands
- assert cmds.include?("rbcmd"), "Ruby commands files should be recognized"
- assert cmds.include?("shcmd"), "Shell commands files should be recognized"
- refute cmds.include?("rbdevcmd"), "Dev commands shouldn't be included"
- end
-
- def test_internal_developer_commands
- cmds = Homebrew.internal_developer_commands
- assert cmds.include?("rbdevcmd"), "Ruby commands files should be recognized"
- assert cmds.include?("shdevcmd"), "Shell commands files should be recognized"
- refute cmds.include?("rbcmd"), "Non-dev commands shouldn't be included"
- end
-
- def test_external_commands
- mktmpdir do |dir|
- %w[brew-t1 brew-t2.rb brew-t3.py].each do |file|
- path = "#{dir}/#{file}"
- FileUtils.touch path
- FileUtils.chmod 0755, path
- end
-
- FileUtils.touch "#{dir}/brew-t4"
-
- ENV["PATH"] += "#{File::PATH_SEPARATOR}#{dir}"
- cmds = Homebrew.external_commands
-
- assert cmds.include?("t1"), "Executable files should be included"
- assert cmds.include?("t2"), "Executable Ruby files should be included"
- refute cmds.include?("t3"),
- "Executable files with a non Ruby extension shoudn't be included"
- refute cmds.include?("t4"), "Non-executable files shouldn't be included"
- end
- end
-
- def test_internal_command_path
- assert_equal HOMEBREW_LIBRARY_PATH/"cmd/rbcmd.rb",
- Commands.path("rbcmd")
- assert_equal HOMEBREW_LIBRARY_PATH/"cmd/shcmd.sh",
- Commands.path("shcmd")
- assert_nil Commands.path("idontexist1234")
- end
-
- def test_internal_dev_command_path
- assert_equal HOMEBREW_LIBRARY_PATH/"dev-cmd/rbdevcmd.rb",
- Commands.path("rbdevcmd")
- assert_equal HOMEBREW_LIBRARY_PATH/"dev-cmd/shdevcmd.sh",
- Commands.path("shdevcmd")
- end
-end
diff --git a/Library/Homebrew/test/dependencies_spec.rb b/Library/Homebrew/test/dependencies_spec.rb
new file mode 100644
index 000000000..84ea53181
--- /dev/null
+++ b/Library/Homebrew/test/dependencies_spec.rb
@@ -0,0 +1,86 @@
+require "dependencies"
+require "dependency"
+
+describe Dependencies do
+ describe "#<<" do
+ it "returns itself" do
+ expect(subject << Dependency.new("foo")).to eq(subject)
+ end
+
+ it "preserves order" do
+ hash = { 0 => "foo", 1 => "bar", 2 => "baz" }
+
+ subject << Dependency.new(hash[0])
+ subject << Dependency.new(hash[1])
+ subject << Dependency.new(hash[2])
+
+ subject.each_with_index do |dep, i|
+ expect(dep.name).to eq(hash[i])
+ end
+ end
+ end
+
+ specify "#*" do
+ subject << Dependency.new("foo")
+ subject << Dependency.new("bar")
+ expect(subject * ", ").to eq("foo, bar")
+ end
+
+ specify "#to_a" do
+ dep = Dependency.new("foo")
+ subject << dep
+ expect(subject.to_a).to eq([dep])
+ end
+
+ specify "#to_ary" do
+ dep = Dependency.new("foo")
+ subject << dep
+ expect(subject.to_ary).to eq([dep])
+ end
+
+ specify "type helpers" do
+ foo = Dependency.new("foo")
+ bar = Dependency.new("bar", [:optional])
+ baz = Dependency.new("baz", [:build])
+ qux = Dependency.new("qux", [:recommended])
+ quux = Dependency.new("quux")
+ subject << foo << bar << baz << qux << quux
+ expect(subject.required).to eq([foo, quux])
+ expect(subject.optional).to eq([bar])
+ expect(subject.build).to eq([baz])
+ expect(subject.recommended).to eq([qux])
+ expect(subject.default.sort_by(&:name)).to eq([foo, baz, quux, qux].sort_by(&:name))
+ end
+
+ specify "equality" do
+ a = Dependencies.new
+ b = Dependencies.new
+
+ dep = Dependency.new("foo")
+
+ a << dep
+ b << dep
+
+ expect(a).to eq(b)
+ expect(a).to eql(b)
+
+ b << Dependency.new("bar", [:optional])
+
+ expect(a).not_to eq(b)
+ expect(a).not_to eql(b)
+ end
+
+ specify "#empty?" do
+ expect(subject).to be_empty
+
+ subject << Dependency.new("foo")
+ expect(subject).not_to be_empty
+ end
+
+ specify "#inspect" do
+ expect(subject.inspect).to eq("#<Dependencies: []>")
+
+ subject << Dependency.new("foo")
+ expect(subject.inspect).to eq("#<Dependencies: [#<Dependency: \"foo\" []>]>")
+ end
+end
diff --git a/Library/Homebrew/test/dependencies_test.rb b/Library/Homebrew/test/dependencies_test.rb
deleted file mode 100644
index c5444fcbc..000000000
--- a/Library/Homebrew/test/dependencies_test.rb
+++ /dev/null
@@ -1,117 +0,0 @@
-require "testing_env"
-require "dependencies"
-require "dependency"
-require "requirements"
-
-class DependenciesTests < Homebrew::TestCase
- def setup
- super
- @deps = Dependencies.new
- end
-
- def test_shovel_returns_self
- assert_same @deps, @deps << Dependency.new("foo")
- end
-
- def test_preserves_order
- hash = { 0 => "foo", 1 => "bar", 2 => "baz" }
- @deps << Dependency.new(hash[0])
- @deps << Dependency.new(hash[1])
- @deps << Dependency.new(hash[2])
- @deps.each_with_index do |dep, idx|
- assert_equal hash[idx], dep.name
- end
- end
-
- def test_repetition
- @deps << Dependency.new("foo")
- @deps << Dependency.new("bar")
- assert_equal "foo, bar", @deps*", "
- end
-
- def test_to_a
- dep = Dependency.new("foo")
- @deps << dep
- assert_equal [dep], @deps.to_a
- end
-
- def test_to_ary
- dep = Dependency.new("foo")
- @deps << dep
- assert_equal [dep], @deps.to_ary
- end
-
- def test_type_helpers
- foo = Dependency.new("foo")
- bar = Dependency.new("bar", [:optional])
- baz = Dependency.new("baz", [:build])
- qux = Dependency.new("qux", [:recommended])
- quux = Dependency.new("quux")
- @deps << foo << bar << baz << qux << quux
- assert_equal [foo, quux], @deps.required
- assert_equal [bar], @deps.optional
- assert_equal [baz], @deps.build
- assert_equal [qux], @deps.recommended
- assert_equal [foo, baz, quux, qux].sort_by(&:name), @deps.default.sort_by(&:name)
- end
-
- def test_equality
- a = Dependencies.new
- b = Dependencies.new
-
- dep = Dependency.new("foo")
-
- a << dep
- b << dep
-
- assert_equal a, b
- assert_eql a, b
-
- b << Dependency.new("bar", [:optional])
-
- refute_equal a, b
- refute_eql a, b
- end
-
- def test_empty
- a = Dependencies.new
- assert a.empty?
- a << Dependency.new("foo")
- refute a.empty?
- end
-
- def test_inspect
- a = Dependencies.new
- assert_equal "#<Dependencies: []>", a.inspect
- a << Dependency.new("foo")
- assert_equal "#<Dependencies: [#<Dependency: \"foo\" []>]>", a.inspect
- end
-end
-
-class RequirementsTests < Homebrew::TestCase
- def setup
- super
- @reqs = Requirements.new
- end
-
- def test_shovel_returns_self
- assert_same @reqs, @reqs << Object.new
- end
-
- def test_merging_multiple_dependencies
- @reqs << X11Requirement.new << X11Requirement.new
- assert_equal 1, @reqs.count
- @reqs << Requirement.new
- assert_equal 2, @reqs.count
- end
-
- def test_comparison_prefers_larger
- @reqs << X11Requirement.new << X11Requirement.new("x11", %w[2.6])
- assert_equal [X11Requirement.new("x11", %w[2.6])], @reqs.to_a
- end
-
- def test_comparison_does_not_merge_smaller
- @reqs << X11Requirement.new("x11", %w[2.6]) << X11Requirement.new
- assert_equal [X11Requirement.new("x11", %w[2.6])], @reqs.to_a
- end
-end
diff --git a/Library/Homebrew/test/formula_installer_spec.rb b/Library/Homebrew/test/formula_installer_spec.rb
new file mode 100644
index 000000000..600b4560f
--- /dev/null
+++ b/Library/Homebrew/test/formula_installer_spec.rb
@@ -0,0 +1,137 @@
+require "formula"
+require "formula_installer"
+require "keg"
+require "tab"
+require "test/support/fixtures/testball"
+require "test/support/fixtures/testball_bottle"
+
+RSpec::Matchers.define_negated_matcher :need_bottle, :be_bottle_unneeded
+RSpec::Matchers.alias_matcher :have_disabled_bottle, :be_bottle_disabled
+
+describe FormulaInstaller do
+ matcher :be_poured_from_bottle do
+ match(&:poured_from_bottle)
+ end
+
+ def temporary_install(formula)
+ expect(formula).not_to be_installed
+
+ installer = described_class.new(formula)
+
+ shutup do
+ installer.install
+ end
+
+ keg = Keg.new(formula.prefix)
+
+ expect(formula).to be_installed
+
+ begin
+ Tab.clear_cache
+ expect(Tab.for_keg(keg)).not_to be_poured_from_bottle
+
+ yield formula
+ ensure
+ Tab.clear_cache
+ keg.unlink
+ keg.uninstall
+ formula.clear_cache
+ # there will be log files when sandbox is enable.
+ formula.logs.rmtree if formula.logs.directory?
+ end
+
+ expect(keg).not_to exist
+ expect(formula).not_to be_installed
+ end
+
+ specify "basic installation" do
+ ARGV << "--with-invalid_flag" # added to ensure it doesn't fail install
+
+ temporary_install(Testball.new) do |f|
+ # Test that things made it into the Keg
+ expect(f.prefix/"readme").to exist
+
+ expect(f.bin).to be_a_directory
+ expect(f.bin.children.count).to eq(3)
+
+ expect(f.libexec).to be_a_directory
+ expect(f.libexec.children.count).to eq(1)
+
+ expect(f.prefix/"main.c").not_to exist
+ expect(f.prefix/"license").not_to exist
+
+ # Test that things make it into the Cellar
+ keg = Keg.new f.prefix
+ keg.link
+
+ bin = HOMEBREW_PREFIX/"bin"
+ expect(bin).to be_a_directory
+ expect(bin.children.count).to eq(3)
+ expect(f.prefix/".brew/testball.rb").to be_readable
+ end
+ end
+
+ specify "Formula installation with unneeded bottle" do
+ allow(DevelopmentTools).to receive(:installed?).and_return(false)
+
+ formula = Testball.new
+ allow(formula).to receive(:bottle_unneeded?).and_return(true)
+ allow(formula).to receive(:bottle_disabled?).and_return(true)
+
+ expect(formula).not_to be_bottled
+ expect(formula).not_to need_bottle
+ expect(formula).to have_disabled_bottle
+
+ temporary_install(formula) do |f|
+ expect(f).to be_installed
+ end
+ end
+
+ specify "Formula is not poured from bottle when compiler specified" do
+ expect(ARGV.cc).to be nil
+
+ cc_arg = "--cc=clang"
+ ARGV << cc_arg
+
+ temporary_install(TestballBottle.new) do |f|
+ tab = Tab.for_formula(f)
+ expect(tab.compiler).to eq("clang")
+ end
+ end
+
+ specify "check installation sanity pinned dependency" do
+ dep_name = "dependency"
+ dep_path = CoreTap.new.formula_dir/"#{dep_name}.rb"
+ dep_path.write <<-EOS.undent
+ class #{Formulary.class_s(dep_name)} < Formula
+ url "foo"
+ version "0.2"
+ end
+ EOS
+
+ Formulary::FORMULAE.delete(dep_path)
+ dependency = Formulary.factory(dep_name)
+
+ dependent = formula do
+ url "foo"
+ version "0.5"
+ depends_on dependency.name.to_s
+ end
+
+ (dependency.prefix("0.1")/"bin"/"a").mkpath
+ HOMEBREW_PINNED_KEGS.mkpath
+ FileUtils.ln_s dependency.prefix("0.1"), HOMEBREW_PINNED_KEGS/dep_name
+
+ dependency_keg = Keg.new(dependency.prefix("0.1"))
+ dependency_keg.link
+
+ expect(dependency_keg).to be_linked
+ expect(dependency).to be_pinned
+
+ fi = FormulaInstaller.new(dependent)
+
+ expect {
+ fi.check_install_sanity
+ }.to raise_error(CannotInstallFormulaError)
+ end
+end
diff --git a/Library/Homebrew/test/formula_installer_test.rb b/Library/Homebrew/test/formula_installer_test.rb
deleted file mode 100644
index c99b2de74..000000000
--- a/Library/Homebrew/test/formula_installer_test.rb
+++ /dev/null
@@ -1,131 +0,0 @@
-require "testing_env"
-require "formula"
-require "formula_installer"
-require "keg"
-require "tab"
-require "test/support/fixtures/testball"
-require "test/support/fixtures/testball_bottle"
-
-class InstallTests < Homebrew::TestCase
- def temporary_install(formula)
- refute_predicate formula, :installed?
-
- installer = FormulaInstaller.new(formula)
-
- shutup { installer.install }
-
- keg = Keg.new(formula.prefix)
-
- assert_predicate formula, :installed?
-
- begin
- Tab.clear_cache
- refute_predicate Tab.for_keg(keg), :poured_from_bottle
-
- yield formula
- ensure
- Tab.clear_cache
- keg.unlink
- keg.uninstall
- formula.clear_cache
- # there will be log files when sandbox is enable.
- formula.logs.rmtree if formula.logs.directory?
- end
-
- refute_predicate keg, :exist?
- refute_predicate formula, :installed?
- end
-
- def test_a_basic_install
- ARGV << "--with-invalid_flag" # added to ensure it doesn't fail install
- temporary_install(Testball.new) do |f|
- # Test that things made it into the Keg
- assert_predicate f.prefix+"readme", :exist?
-
- assert_predicate f.bin, :directory?
- assert_equal 3, f.bin.children.length
-
- assert_predicate f.libexec, :directory?
- assert_equal 1, f.libexec.children.length
-
- refute_predicate f.prefix+"main.c", :exist?
-
- refute_predicate f.prefix+"license", :exist?
-
- # Test that things make it into the Cellar
- keg = Keg.new f.prefix
- keg.link
-
- bin = HOMEBREW_PREFIX+"bin"
- assert_predicate bin, :directory?
- assert_equal 3, bin.children.length
- assert_predicate f.prefix/".brew/testball.rb", :readable?
- end
- end
-
- def test_bottle_unneeded_formula_install
- DevelopmentTools.stubs(:installed?).returns(false)
-
- formula = Testball.new
- formula.stubs(:bottle_unneeded?).returns(true)
- formula.stubs(:bottle_disabled?).returns(true)
-
- refute_predicate formula, :bottled?
- assert_predicate formula, :bottle_unneeded?
- assert_predicate formula, :bottle_disabled?
-
- temporary_install(formula) do |f|
- assert_predicate f, :installed?
- end
- end
-
- def test_not_poured_from_bottle_when_compiler_specified
- assert_nil ARGV.cc
-
- cc_arg = "--cc=clang"
- ARGV << cc_arg
-
- temporary_install(TestballBottle.new) do |f|
- tab = Tab.for_formula(f)
- assert_equal "clang", tab.compiler
- end
- end
-end
-
-class FormulaInstallerTests < Homebrew::TestCase
- def test_check_install_sanity_pinned_dep
- dep_name = "dependency"
- dep_path = CoreTap.new.formula_dir/"#{dep_name}.rb"
- dep_path.write <<-EOS.undent
- class #{Formulary.class_s(dep_name)} < Formula
- url "foo"
- version "0.2"
- end
- EOS
-
- Formulary::FORMULAE.delete(dep_path)
- dependency = Formulary.factory(dep_name)
-
- dependent = formula do
- url "foo"
- version "0.5"
- depends_on dependency.name.to_s
- end
-
- dependency.prefix("0.1").join("bin/a").mkpath
- HOMEBREW_PINNED_KEGS.mkpath
- FileUtils.ln_s dependency.prefix("0.1"), HOMEBREW_PINNED_KEGS/dep_name
-
- dependency_keg = Keg.new(dependency.prefix("0.1"))
- dependency_keg.link
-
- assert_predicate dependency_keg, :linked?
- assert_predicate dependency, :pinned?
-
- fi = FormulaInstaller.new(dependent)
- assert_raises(CannotInstallFormulaError) { fi.check_install_sanity }
- ensure
- dependency_keg.unlink
- Formulary::FORMULAE.delete(dep_path)
- end
-end
diff --git a/Library/Homebrew/test/formula_spec_selection_spec.rb b/Library/Homebrew/test/formula_spec_selection_spec.rb
new file mode 100644
index 000000000..20231ffda
--- /dev/null
+++ b/Library/Homebrew/test/formula_spec_selection_spec.rb
@@ -0,0 +1,100 @@
+require "formula"
+
+describe Formula do
+ describe "::new" do
+ it "selects stable by default" do
+ f = formula do
+ url "foo-1.0"
+ devel { url "foo-1.1a" }
+ head "foo"
+ end
+
+ expect(f).to be_stable
+ end
+
+ it "selects stable when exclusive" do
+ f = formula { url "foo-1.0" }
+ expect(f).to be_stable
+ end
+
+ it "selects devel before HEAD" do
+ f = formula do
+ devel { url "foo-1.1a" }
+ head "foo"
+ end
+
+ expect(f).to be_devel
+ end
+
+ it "selects devel when exclusive" do
+ f = formula { devel { url "foo-1.1a" } }
+ expect(f).to be_devel
+ end
+
+ it "selects HEAD when exclusive" do
+ f = formula { head "foo" }
+ expect(f).to be_head
+ end
+
+ it "does not select an incomplete spec" do
+ f = formula do
+ sha256 TEST_SHA256
+ version "1.0"
+ head "foo"
+ end
+
+ expect(f).to be_head
+ end
+
+ it "does not set an incomplete stable spec" do
+ f = formula do
+ sha256 TEST_SHA256
+ devel { url "foo-1.1a" }
+ head "foo"
+ end
+
+ expect(f.stable).to be nil
+ expect(f).to be_devel
+ end
+
+ it "selects HEAD when requested" do
+ f = formula("test", spec: :head) do
+ url "foo-1.0"
+ devel { url "foo-1.1a" }
+ head "foo"
+ end
+
+ expect(f).to be_head
+ end
+
+ it "selects devel when requested" do
+ f = formula("test", spec: :devel) do
+ url "foo-1.0"
+ devel { url "foo-1.1a" }
+ head "foo"
+ end
+
+ expect(f).to be_devel
+ end
+
+ it "does not set an incomplete devel spec" do
+ f = formula do
+ url "foo-1.0"
+ devel { version "1.1a" }
+ head "foo"
+ end
+
+ expect(f.devel).to be nil
+ expect(f).to be_stable
+ end
+
+ it "does not raise an error for a missing spec" do
+ f = formula("test", spec: :devel) do
+ url "foo-1.0"
+ head "foo"
+ end
+
+ expect(f).to be_stable
+ end
+ end
+end
diff --git a/Library/Homebrew/test/formula_spec_selection_test.rb b/Library/Homebrew/test/formula_spec_selection_test.rb
deleted file mode 100644
index 7148df173..000000000
--- a/Library/Homebrew/test/formula_spec_selection_test.rb
+++ /dev/null
@@ -1,99 +0,0 @@
-require "testing_env"
-require "formula"
-
-class FormulaSpecSelectionTests < Homebrew::TestCase
- def test_selects_stable_by_default
- f = formula do
- url "foo-1.0"
- devel { url "foo-1.1a" }
- head "foo"
- end
-
- assert_predicate f, :stable?
- end
-
- def test_selects_stable_when_exclusive
- f = formula { url "foo-1.0" }
- assert_predicate f, :stable?
- end
-
- def test_selects_devel_before_head
- f = formula do
- devel { url "foo-1.1a" }
- head "foo"
- end
-
- assert_predicate f, :devel?
- end
-
- def test_selects_devel_when_exclusive
- f = formula { devel { url "foo-1.1a" } }
- assert_predicate f, :devel?
- end
-
- def test_selects_head_when_exclusive
- f = formula { head "foo" }
- assert_predicate f, :head?
- end
-
- def test_incomplete_spec_not_selected
- f = formula do
- sha256 TEST_SHA256
- version "1.0"
- head "foo"
- end
-
- assert_predicate f, :head?
- end
-
- def test_incomplete_stable_not_set
- f = formula do
- sha256 TEST_SHA256
- devel { url "foo-1.1a" }
- head "foo"
- end
-
- assert_nil f.stable
- assert_predicate f, :devel?
- end
-
- def test_selects_head_when_requested
- f = formula("test", Pathname.new(__FILE__).expand_path, :head) do
- url "foo-1.0"
- devel { url "foo-1.1a" }
- head "foo"
- end
-
- assert_predicate f, :head?
- end
-
- def test_selects_devel_when_requested
- f = formula("test", Pathname.new(__FILE__).expand_path, :devel) do
- url "foo-1.0"
- devel { url "foo-1.1a" }
- head "foo"
- end
-
- assert_predicate f, :devel?
- end
-
- def test_incomplete_devel_not_set
- f = formula do
- url "foo-1.0"
- devel { version "1.1a" }
- head "foo"
- end
-
- assert_nil f.devel
- assert_predicate f, :stable?
- end
-
- def test_does_not_raise_for_missing_spec
- f = formula("test", Pathname.new(__FILE__).expand_path, :devel) do
- url "foo-1.0"
- head "foo"
- end
-
- assert_predicate f, :stable?
- end
-end
diff --git a/Library/Homebrew/test/requirements_spec.rb b/Library/Homebrew/test/requirements_spec.rb
new file mode 100644
index 000000000..3111a7c9c
--- /dev/null
+++ b/Library/Homebrew/test/requirements_spec.rb
@@ -0,0 +1,26 @@
+require "requirements"
+
+describe Requirements do
+ describe "#<<" do
+ it "returns itself" do
+ expect(subject << Object.new).to be(subject)
+ end
+
+ it "merges duplicate requirements" do
+ subject << X11Requirement.new << X11Requirement.new
+ expect(subject.count).to eq(1)
+ subject << Requirement.new
+ expect(subject.count).to eq(2)
+ end
+
+ it "prefers the larger requirement when merging duplicates" do
+ subject << X11Requirement.new << X11Requirement.new("x11", %w[2.6])
+ expect(subject.to_a).to eq([X11Requirement.new("x11", %w[2.6])])
+ end
+
+ it "does not use the smaller requirement when merging duplicates" do
+ subject << X11Requirement.new("x11", %w[2.6]) << X11Requirement.new
+ expect(subject.to_a).to eq([X11Requirement.new("x11", %w[2.6])])
+ end
+ end
+end
diff --git a/Library/Homebrew/test/support/helper/test_case.rb b/Library/Homebrew/test/support/helper/test_case.rb
index 568beb947..5e72bb048 100644
--- a/Library/Homebrew/test/support/helper/test_case.rb
+++ b/Library/Homebrew/test/support/helper/test_case.rb
@@ -6,11 +6,9 @@ module Homebrew
require "test/support/helper/fs_leak_logger"
require "test/support/helper/lifecycle_enforcer"
require "test/support/helper/shutup"
- require "test/support/helper/version_assertions"
include Test::Helper::FSLeakLogger
include Test::Helper::LifecycleEnforcer
include Test::Helper::Shutup
- include Test::Helper::VersionAssertions
TEST_DIRECTORIES = [
CoreTap.instance.path/"Formula",
diff --git a/Library/Homebrew/test/support/helper/version_assertions.rb b/Library/Homebrew/test/support/helper/version_assertions.rb
deleted file mode 100644
index dc240d643..000000000
--- a/Library/Homebrew/test/support/helper/version_assertions.rb
+++ /dev/null
@@ -1,23 +0,0 @@
-require "rubygems"
-
-module Test
- module Helper
- module VersionAssertions
- def version(v)
- Version.create(v)
- end
-
- def assert_version_equal(expected, actual)
- assert_equal Version.create(expected), actual
- end
-
- def assert_version_detected(expected, url, specs = {})
- assert_equal expected, Version.detect(url, specs).to_s
- end
-
- def assert_version_nil(url)
- assert Version.parse(url).null?
- end
- end
- end
-end
diff --git a/Library/Homebrew/test/uninstall_test.rb b/Library/Homebrew/test/uninstall_test.rb
deleted file mode 100644
index a9230ffac..000000000
--- a/Library/Homebrew/test/uninstall_test.rb
+++ /dev/null
@@ -1,62 +0,0 @@
-require "testing_env"
-require "cmd/uninstall"
-
-class UninstallTests < Homebrew::TestCase
- def setup
- super
-
- @dependency = formula("dependency") { url "f-1" }
- @dependent = formula("dependent") do
- url "f-1"
- depends_on "dependency"
- end
-
- [@dependency, @dependent].each do |f|
- f.installed_prefix.mkpath
- Keg.new(f.installed_prefix).optlink
- end
-
- tab = Tab.empty
- tab.homebrew_version = "1.1.6"
- tab.tabfile = @dependent.installed_prefix/Tab::FILENAME
- tab.runtime_dependencies = [
- { "full_name" => "dependency", "version" => "1" },
- ]
- tab.write
-
- stub_formula_loader @dependency
- stub_formula_loader @dependent
- end
-
- def teardown
- Homebrew.failed = false
- super
- end
-
- def handle_unsatisfied_dependents
- capture_stderr do
- opts = { @dependency.rack => [Keg.new(@dependency.installed_prefix)] }
- Homebrew.handle_unsatisfied_dependents(opts)
- end
- end
-
- def test_check_for_testball_f2s_when_developer
- assert_match "Warning", handle_unsatisfied_dependents
- refute_predicate Homebrew, :failed?
- end
-
- def test_check_for_dependents_when_not_developer
- run_as_not_developer do
- assert_match "Error", handle_unsatisfied_dependents
- assert_predicate Homebrew, :failed?
- end
- end
-
- def test_check_for_dependents_when_ignore_dependencies
- ARGV << "--ignore-dependencies"
- run_as_not_developer do
- assert_empty handle_unsatisfied_dependents
- refute_predicate Homebrew, :failed?
- end
- end
-end
diff --git a/Library/Homebrew/test/version_spec.rb b/Library/Homebrew/test/version_spec.rb
new file mode 100644
index 000000000..d3d63a25c
--- /dev/null
+++ b/Library/Homebrew/test/version_spec.rb
@@ -0,0 +1,602 @@
+require "version"
+
+describe Version::Token do
+ specify "#inspect" do
+ expect(Version::Token.new("foo").inspect).to eq('#<Version::Token "foo">')
+ end
+
+ specify "#to_s" do
+ expect(Version::Token.new("foo").to_s).to eq("foo")
+ end
+end
+
+describe Version::NULL do
+ it "is always smaller" do
+ expect(Version::NULL).to be < Version.create("1")
+ end
+
+ it "is never greater" do
+ expect(Version::NULL).not_to be > Version.create("0")
+ end
+
+ it "isn't equal to itself" do
+ expect(Version::NULL).not_to eql(Version::NULL)
+ end
+
+ it "creates an empty string" do
+ expect(Version::NULL.to_s).to eq("")
+ end
+
+ it "produces NaN as a Float" do
+ # Float::NAN is not equal to itself so compare object IDs
+ expect(Version::NULL.to_f.object_id).to eql(Float::NAN.object_id)
+ end
+end
+
+describe Version::NullToken do
+ specify "#inspect" do
+ expect(subject.inspect).to eq("#<Version::NullToken>")
+ end
+
+ it "is equal to itself" do
+ expect(subject).to be == described_class.new
+ end
+end
+
+describe Version do
+ specify "comparison" do
+ expect(Version.create("0.1")).to be == Version.create("0.1.0")
+ expect(Version.create("0.1")).to be < Version.create("0.2")
+ expect(Version.create("1.2.3")).to be > Version.create("1.2.2")
+ expect(Version.create("1.2.4")).to be < Version.create("1.2.4.1")
+
+ expect(Version.create("1.2.3")).to be > Version.create("1.2.3alpha4")
+ expect(Version.create("1.2.3")).to be > Version.create("1.2.3beta2")
+ expect(Version.create("1.2.3")).to be > Version.create("1.2.3rc3")
+ expect(Version.create("1.2.3")).to be < Version.create("1.2.3-p34")
+ end
+
+ specify "HEAD" do
+ expect(Version.create("HEAD")).to be > Version.create("1.2.3")
+ expect(Version.create("HEAD-abcdef")).to be > Version.create("1.2.3")
+ expect(Version.create("1.2.3")).to be < Version.create("HEAD")
+ expect(Version.create("1.2.3")).to be < Version.create("HEAD-fedcba")
+ expect(Version.create("HEAD-abcdef")).to be == Version.create("HEAD-fedcba")
+ expect(Version.create("HEAD")).to be == Version.create("HEAD-fedcba")
+ end
+
+ specify "comparing alpha versions" do
+ expect(Version.create("1.2.3alpha")).to be < Version.create("1.2.3")
+ expect(Version.create("1.2.3")).to be < Version.create("1.2.3a")
+ expect(Version.create("1.2.3alpha4")).to be == Version.create("1.2.3a4")
+ expect(Version.create("1.2.3alpha4")).to be == Version.create("1.2.3A4")
+ expect(Version.create("1.2.3alpha4")).to be > Version.create("1.2.3alpha3")
+ expect(Version.create("1.2.3alpha4")).to be < Version.create("1.2.3alpha5")
+ expect(Version.create("1.2.3alpha4")).to be < Version.create("1.2.3alpha10")
+
+ expect(Version.create("1.2.3alpha4")).to be < Version.create("1.2.3beta2")
+ expect(Version.create("1.2.3alpha4")).to be < Version.create("1.2.3rc3")
+ expect(Version.create("1.2.3alpha4")).to be < Version.create("1.2.3")
+ expect(Version.create("1.2.3alpha4")).to be < Version.create("1.2.3-p34")
+ end
+
+ specify "comparing beta versions" do
+ expect(Version.create("1.2.3beta2")).to be == Version.create("1.2.3b2")
+ expect(Version.create("1.2.3beta2")).to be == Version.create("1.2.3B2")
+ expect(Version.create("1.2.3beta2")).to be > Version.create("1.2.3beta1")
+ expect(Version.create("1.2.3beta2")).to be < Version.create("1.2.3beta3")
+ expect(Version.create("1.2.3beta2")).to be < Version.create("1.2.3beta10")
+
+ expect(Version.create("1.2.3beta2")).to be > Version.create("1.2.3alpha4")
+ expect(Version.create("1.2.3beta2")).to be < Version.create("1.2.3rc3")
+ expect(Version.create("1.2.3beta2")).to be < Version.create("1.2.3")
+ expect(Version.create("1.2.3beta2")).to be < Version.create("1.2.3-p34")
+ end
+
+ specify "comparing RC versions" do
+ expect(Version.create("1.2.3rc3")).to be == Version.create("1.2.3RC3")
+ expect(Version.create("1.2.3rc3")).to be > Version.create("1.2.3rc2")
+ expect(Version.create("1.2.3rc3")).to be < Version.create("1.2.3rc4")
+ expect(Version.create("1.2.3rc3")).to be < Version.create("1.2.3rc10")
+
+ expect(Version.create("1.2.3rc3")).to be > Version.create("1.2.3alpha4")
+ expect(Version.create("1.2.3rc3")).to be > Version.create("1.2.3beta2")
+ expect(Version.create("1.2.3rc3")).to be < Version.create("1.2.3")
+ expect(Version.create("1.2.3rc3")).to be < Version.create("1.2.3-p34")
+ end
+
+ specify "comparing patch-level versions" do
+ expect(Version.create("1.2.3-p34")).to be == Version.create("1.2.3-P34")
+ expect(Version.create("1.2.3-p34")).to be > Version.create("1.2.3-p33")
+ expect(Version.create("1.2.3-p34")).to be < Version.create("1.2.3-p35")
+ expect(Version.create("1.2.3-p34")).to be > Version.create("1.2.3-p9")
+
+ expect(Version.create("1.2.3-p34")).to be > Version.create("1.2.3alpha4")
+ expect(Version.create("1.2.3-p34")).to be > Version.create("1.2.3beta2")
+ expect(Version.create("1.2.3-p34")).to be > Version.create("1.2.3rc3")
+ expect(Version.create("1.2.3-p34")).to be > Version.create("1.2.3")
+ end
+
+ specify "comparing unevenly-padded versions" do
+ expect(Version.create("2.1.0-p194")).to be < Version.create("2.1-p195")
+ expect(Version.create("2.1-p195")).to be > Version.create("2.1.0-p194")
+ expect(Version.create("2.1-p194")).to be < Version.create("2.1.0-p195")
+ expect(Version.create("2.1.0-p195")).to be > Version.create("2.1-p194")
+ expect(Version.create("2-p194")).to be < Version.create("2.1-p195")
+ end
+
+ it "can be compared against nil" do
+ expect(Version.create("2.1.0-p194")).to be > nil
+ end
+
+ it "can be compared against strings" do
+ expect(Version.create("2.1.0-p194")).to be == "2.1.0-p194"
+ expect(Version.create("1")).to be == 1
+ end
+
+ specify "comparison returns nil for non-version" do
+ v = Version.create("1.0")
+ expect(v <=> Object.new).to be nil
+ expect { v > Object.new }.to raise_error(ArgumentError)
+ end
+
+ specify "erlang versions" do
+ versions = %w[R16B R15B03-1 R15B03 R15B02 R15B01 R14B04 R14B03
+ R14B02 R14B01 R14B R13B04 R13B03 R13B02-1].reverse
+ expect(versions.sort_by { |v| Version.create(v) }).to eq(versions)
+ end
+
+ specify "hash equality" do
+ v1 = Version.create("0.1.0")
+ v2 = Version.create("0.1.0")
+ v3 = Version.create("0.1.1")
+
+ expect(v1).to eql(v2)
+ expect(v1).not_to eql(v3)
+ expect(v1.hash).to eq(v2.hash)
+ expect(v1.hash).not_to eq(v3.hash)
+
+ h = { v1 => :foo }
+ expect(h[v2]).to eq(:foo)
+ end
+
+ describe "::create" do
+ it "accepts objects responding to #to_str" do
+ value = double(to_str: "0.1")
+ expect(Version.create(value).to_s).to eq("0.1")
+ end
+
+ it "raises a TypeError for non-string objects" do
+ expect { Version.create(1.1) }.to raise_error(TypeError)
+ expect { Version.create(1) }.to raise_error(TypeError)
+ expect { Version.create(:symbol) }.to raise_error(TypeError)
+ end
+
+ it "parses a version from a string" do
+ v = Version.create("1.20")
+ expect(v).not_to be_head
+ expect(v.to_str).to eq("1.20")
+ end
+
+ specify "HEAD with commit" do
+ v = Version.create("HEAD-abcdef")
+ expect(v.commit).to eq("abcdef")
+ expect(v.to_str).to eq("HEAD-abcdef")
+ end
+
+ specify "HEAD without commit" do
+ v = Version.create("HEAD")
+ expect(v.commit).to be nil
+ expect(v.to_str).to eq("HEAD")
+ end
+ end
+
+ specify "#detected_from_url?" do
+ expect(Version.create("1.0")).not_to be_detected_from_url
+ expect(Version::FromURL.new("1.0")).to be_detected_from_url
+ end
+
+ specify "#head?" do
+ v1 = Version.create("HEAD-abcdef")
+ v2 = Version.create("HEAD")
+
+ expect(v1).to be_head
+ expect(v2).to be_head
+ end
+
+ specify "#update_commit" do
+ v1 = Version.create("HEAD-abcdef")
+ v2 = Version.create("HEAD")
+
+ v1.update_commit("ffffff")
+ expect(v1.commit).to eq("ffffff")
+ expect(v1.to_str).to eq("HEAD-ffffff")
+
+ v2.update_commit("ffffff")
+ expect(v2.commit).to eq("ffffff")
+ expect(v2.to_str).to eq("HEAD-ffffff")
+ end
+
+ describe "::parse" do
+ it "returns a NULL version when the URL cannot be parsed" do
+ expect(Version.parse("http://example.com/blah.tar")).to be_null
+ expect(Version.parse("foo")).to be_null
+ end
+ end
+
+ describe "::detect" do
+ matcher :be_detected_from do |url, specs = {}|
+ match do |version|
+ Version.detect(url, specs) == version
+ end
+ end
+
+ specify "version all dots" do
+ expect(Version.create("1.14"))
+ .to be_detected_from("http://example.com/foo.bar.la.1.14.zip")
+ end
+
+ specify "version underscore separator" do
+ expect(Version.create("1.1"))
+ .to be_detected_from("http://example.com/grc_1.1.tar.gz")
+ end
+
+ specify "boost version style" do
+ expect(Version.create("1.39.0"))
+ .to be_detected_from("http://example.com/boost_1_39_0.tar.bz2")
+ end
+
+ specify "erlang version style" do
+ expect(Version.create("R13B"))
+ .to be_detected_from("http://erlang.org/download/otp_src_R13B.tar.gz")
+ end
+
+ specify "another erlang version style" do
+ expect(Version.create("R15B01"))
+ .to be_detected_from("https://github.com/erlang/otp/tarball/OTP_R15B01")
+ end
+
+ specify "yet another erlang version style" do
+ expect(Version.create("R15B03-1"))
+ .to be_detected_from("https://github.com/erlang/otp/tarball/OTP_R15B03-1")
+ end
+
+ specify "p7zip version style" do
+ expect(Version.create("9.04"))
+ .to be_detected_from("http://kent.dl.sourceforge.net/sourceforge/p7zip/p7zip_9.04_src_all.tar.bz2")
+ end
+
+ specify "new github style" do
+ expect(Version.create("1.1.4"))
+ .to be_detected_from("https://github.com/sam-github/libnet/tarball/libnet-1.1.4")
+ end
+
+ specify "codeload style" do
+ expect(Version.create("0.7.1"))
+ .to be_detected_from("https://codeload.github.com/gsamokovarov/jump/tar.gz/v0.7.1")
+ end
+
+ specify "elasticsearch alpha style" do
+ expect(Version.create("5.0.0-alpha5"))
+ .to be_detected_from("https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/5.0.0-alpha5/elasticsearch-5.0.0-alpha5.tar.gz")
+ end
+
+ specify "gloox beta style" do
+ expect(Version.create("1.0-beta7"))
+ .to be_detected_from("http://camaya.net/download/gloox-1.0-beta7.tar.bz2")
+ end
+
+ specify "sphinx beta style" do
+ expect(Version.create("1.10-beta"))
+ .to be_detected_from("http://sphinxsearch.com/downloads/sphinx-1.10-beta.tar.gz")
+ end
+
+ specify "astyle version style" do
+ expect(Version.create("1.23"))
+ .to be_detected_from("http://kent.dl.sourceforge.net/sourceforge/astyle/astyle_1.23_macosx.tar.gz")
+ end
+
+ specify "version dos2unix" do
+ expect(Version.create("3.1"))
+ .to be_detected_from("http://www.sfr-fresh.com/linux/misc/dos2unix-3.1.tar.gz")
+ end
+
+ specify "version internal dash" do
+ expect(Version.create("1.1-2"))
+ .to be_detected_from("http://example.com/foo-arse-1.1-2.tar.gz")
+ end
+
+ specify "version single digit" do
+ expect(Version.create("45"))
+ .to be_detected_from("http://example.com/foo_bar.45.tar.gz")
+ end
+
+ specify "noseparator single digit" do
+ expect(Version.create("45"))
+ .to be_detected_from("http://example.com/foo_bar45.tar.gz")
+ end
+
+ specify "version developer that hates us format" do
+ expect(Version.create("1.2.3"))
+ .to be_detected_from("http://example.com/foo-bar-la.1.2.3.tar.gz")
+ end
+
+ specify "version regular" do
+ expect(Version.create("1.21"))
+ .to be_detected_from("http://example.com/foo_bar-1.21.tar.gz")
+ end
+
+ specify "version sourceforge download" do
+ expect(Version.create("1.21"))
+ .to be_detected_from("http://sourceforge.net/foo_bar-1.21.tar.gz/download")
+ expect(Version.create("1.21"))
+ .to be_detected_from("http://sf.net/foo_bar-1.21.tar.gz/download")
+ end
+
+ specify "version github" do
+ expect(Version.create("1.0.5"))
+ .to be_detected_from("http://github.com/lloyd/yajl/tarball/1.0.5")
+ end
+
+ specify "version github with high patch number" do
+ expect(Version.create("1.2.34"))
+ .to be_detected_from("http://github.com/lloyd/yajl/tarball/v1.2.34")
+ end
+
+ specify "yet another version" do
+ expect(Version.create("0.15.1b"))
+ .to be_detected_from("http://example.com/mad-0.15.1b.tar.gz")
+ end
+
+ specify "lame version style" do
+ expect(Version.create("398-2"))
+ .to be_detected_from("http://kent.dl.sourceforge.net/sourceforge/lame/lame-398-2.tar.gz")
+ end
+
+ specify "ruby version style" do
+ expect(Version.create("1.9.1-p243"))
+ .to be_detected_from("ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz")
+ end
+
+ specify "omega version style" do
+ expect(Version.create("0.80.2"))
+ .to be_detected_from("http://www.alcyone.com/binaries/omega/omega-0.80.2-src.tar.gz")
+ end
+
+ specify "rc style" do
+ expect(Version.create("1.2.2rc1"))
+ .to be_detected_from("http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.2rc1.tar.bz2")
+ end
+
+ specify "dash rc style" do
+ expect(Version.create("1.8.0-rc1"))
+ .to be_detected_from("http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz")
+ end
+
+ specify "angband version style" do
+ expect(Version.create("3.0.9b"))
+ .to be_detected_from("http://rephial.org/downloads/3.0/angband-3.0.9b-src.tar.gz")
+ end
+
+ specify "stable suffix" do
+ expect(Version.create("1.4.14b"))
+ .to be_detected_from("http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz")
+ end
+
+ specify "debian style 1" do
+ expect(Version.create("3.03"))
+ .to be_detected_from("http://ftp.de.debian.org/debian/pool/main/s/sl/sl_3.03.orig.tar.gz")
+ end
+
+ specify "debian style 2" do
+ expect(Version.create("1.01b"))
+ .to be_detected_from("http://ftp.de.debian.org/debian/pool/main/m/mmv/mmv_1.01b.orig.tar.gz")
+ end
+
+ specify "bottle style" do
+ expect(Version.create("4.8.0"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/qt-4.8.0.lion.bottle.tar.gz")
+ end
+
+ specify "versioned bottle style" do
+ expect(Version.create("4.8.1"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/qt-4.8.1.lion.bottle.1.tar.gz")
+ end
+
+ specify "erlang bottle style" do
+ expect(Version.create("R15B"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/erlang-R15B.lion.bottle.tar.gz")
+ end
+
+ specify "another erlang bottle style" do
+ expect(Version.create("R15B01"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/erlang-R15B01.mountain_lion.bottle.tar.gz")
+ end
+
+ specify "yet another erlang bottle style" do
+ expect(Version.create("R15B03-1"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/erlang-R15B03-1.mountainlion.bottle.tar.gz")
+ end
+
+ specify "imagemagick style" do
+ expect(Version.create("6.7.5-7"))
+ .to be_detected_from("http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.7.5-7.tar.bz2")
+ end
+
+ specify "imagemagick bottle style" do
+ expect(Version.create("6.7.5-7"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/imagemagick-6.7.5-7.lion.bottle.tar.gz")
+ end
+
+ specify "imagemagick versioned bottle style" do
+ expect(Version.create("6.7.5-7"))
+ .to be_detected_from("https://homebrew.bintray.com/bottles/imagemagick-6.7.5-7.lion.bottle.1.tar.gz")
+ end
+
+ specify "dash version style" do
+ expect(Version.create("3.4"))
+ .to be_detected_from("http://www.antlr.org/download/antlr-3.4-complete.jar")
+ end
+
+ specify "jenkins version style" do
+ expect(Version.create("1.486"))
+ .to be_detected_from("http://mirrors.jenkins-ci.org/war/1.486/jenkins.war")
+ expect(Version.create("0.10.11"))
+ .to be_detected_from("https://github.com/hechoendrupal/DrupalConsole/releases/download/0.10.11/drupal.phar")
+ end
+
+ specify "apache version style" do
+ expect(Version.create("1.2.0-rc2"))
+ .to be_detected_from("http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz")
+ end
+
+ specify "jpeg version style" do
+ expect(Version.create("8d"))
+ .to be_detected_from("http://www.ijg.org/files/jpegsrc.v8d.tar.gz")
+ end
+
+ specify "ghc version style" do
+ expect(Version.create("7.0.4"))
+ .to be_detected_from("http://www.haskell.org/ghc/dist/7.0.4/ghc-7.0.4-x86_64-apple-darwin.tar.bz2")
+ expect(Version.create("7.0.4"))
+ .to be_detected_from("http://www.haskell.org/ghc/dist/7.0.4/ghc-7.0.4-i386-apple-darwin.tar.bz2")
+ end
+
+ specify "pypy version style" do
+ expect(Version.create("1.4.1"))
+ .to be_detected_from("http://pypy.org/download/pypy-1.4.1-osx.tar.bz2")
+ end
+
+ specify "openssl version style" do
+ expect(Version.create("0.9.8s"))
+ .to be_detected_from("http://www.openssl.org/source/openssl-0.9.8s.tar.gz")
+ end
+
+ specify "xaw3d version style" do
+ expect(Version.create("1.5E"))
+ .to be_detected_from("ftp://ftp.visi.com/users/hawkeyd/X/Xaw3d-1.5E.tar.gz")
+ end
+
+ specify "assimp version style" do
+ expect(Version.create("2.0.863"))
+ .to be_detected_from("http://downloads.sourceforge.net/project/assimp/assimp-2.0/assimp--2.0.863-sdk.zip")
+ end
+
+ specify "cmucl version style" do
+ expect(Version.create("20c"))
+ .to be_detected_from("http://common-lisp.net/project/cmucl/downloads/release/20c/cmucl-20c-x86-darwin.tar.bz2")
+ end
+
+ specify "fann version style" do
+ expect(Version.create("2.1.0beta"))
+ .to be_detected_from("http://downloads.sourceforge.net/project/fann/fann/2.1.0beta/fann-2.1.0beta.zip")
+ end
+
+ specify "grads version style" do
+ expect(Version.create("2.0.1"))
+ .to be_detected_from("ftp://iges.org/grads/2.0/grads-2.0.1-bin-darwin9.8-intel.tar.gz")
+ end
+
+ specify "haxe version style" do
+ expect(Version.create("2.08"))
+ .to be_detected_from("http://haxe.org/file/haxe-2.08-osx.tar.gz")
+ end
+
+ specify "imap version style" do
+ expect(Version.create("2007f"))
+ .to be_detected_from("ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz")
+ end
+
+ specify "suite3270 version style" do
+ expect(Version.create("3.3.12ga7"))
+ .to be_detected_from("http://downloads.sourceforge.net/project/x3270/x3270/3.3.12ga7/suite3270-3.3.12ga7-src.tgz")
+ end
+
+ specify "wwwoffle version style" do
+ expect(Version.create("2.9h"))
+ .to be_detected_from("http://www.gedanken.demon.co.uk/download-wwwoffle/wwwoffle-2.9h.tgz")
+ end
+
+ specify "synergy version style" do
+ expect(Version.create("1.3.6p2"))
+ .to be_detected_from("http://synergy.googlecode.com/files/synergy-1.3.6p2-MacOSX-Universal.zip")
+ end
+
+ specify "fontforge version style" do
+ expect(Version.create("20120731"))
+ .to be_detected_from("http://downloads.sourceforge.net/project/fontforge/fontforge-source/fontforge_full-20120731-b.tar.bz2")
+ end
+
+ specify "ezlupdate version style" do
+ expect(Version.create("2011.10"))
+ .to be_detected_from("https://github.com/downloads/ezsystems/ezpublish-legacy/ezpublish_community_project-2011.10-with_ezc.tar.bz2")
+ end
+
+ specify "aespipe version style" do
+ expect(Version.create("2.4c"))
+ .to be_detected_from("http://loop-aes.sourceforge.net/aespipe/aespipe-v2.4c.tar.bz2")
+ end
+
+ specify "win version style" do
+ expect(Version.create("0.9.17"))
+ .to be_detected_from("http://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-0.9.17-w32.zip")
+ expect(Version.create("1.29"))
+ .to be_detected_from("http://ftpmirror.gnu.org/libidn/libidn-1.29-win64.zip")
+ end
+
+ specify "with arch" do
+ expect(Version.create("4.0.18-1"))
+ .to be_detected_from("http://ftpmirror.gnu.org/mtools/mtools-4.0.18-1.i686.rpm")
+ expect(Version.create("5.5.7-5"))
+ .to be_detected_from("http://ftpmirror.gnu.org/autogen/autogen-5.5.7-5.i386.rpm")
+ expect(Version.create("2.8"))
+ .to be_detected_from("http://ftpmirror.gnu.org/libtasn1/libtasn1-2.8-x86.zip")
+ expect(Version.create("2.8"))
+ .to be_detected_from("http://ftpmirror.gnu.org/libtasn1/libtasn1-2.8-x64.zip")
+ expect(Version.create("4.0.18"))
+ .to be_detected_from("http://ftpmirror.gnu.org/mtools/mtools_4.0.18_i386.deb")
+ end
+
+ specify "opam version" do
+ expect(Version.create("2.18.3"))
+ .to be_detected_from("https://opam.ocaml.org/archives/lablgtk.2.18.3+opam.tar.gz")
+ expect(Version.create("1.9"))
+ .to be_detected_from("https://opam.ocaml.org/archives/sha.1.9+opam.tar.gz")
+ expect(Version.create("0.99.2"))
+ .to be_detected_from("https://opam.ocaml.org/archives/ppx_tools.0.99.2+opam.tar.gz")
+ expect(Version.create("1.0.2"))
+ .to be_detected_from("https://opam.ocaml.org/archives/easy-format.1.0.2+opam.tar.gz")
+ end
+
+ specify "no extension version" do
+ expect(Version.create("1.8.12"))
+ .to be_detected_from("https://waf.io/waf-1.8.12")
+ expect(Version.create("0.7.1"))
+ .to be_detected_from("https://codeload.github.com/gsamokovarov/jump/tar.gz/v0.7.1")
+ expect(Version.create("0.9.1234"))
+ .to be_detected_from("https://my.datomic.com/downloads/free/0.9.1234")
+ expect(Version.create("0.9"))
+ .to be_detected_from("https://my.datomic.com/downloads/free/0.9.1t34")
+ expect(Version.create("1.2.3"))
+ .to be_detected_from("https://my.datomic.com/downloads/free/1.2.3")
+ end
+
+ specify "dash separated version" do
+ expect(Version.create("6-20151227"))
+ .to be_detected_from("ftp://gcc.gnu.org/pub/gcc/snapshots/6-20151227/gcc-6-20151227.tar.bz2")
+ end
+
+ specify "from URL" do
+ expect(Version.create("1.2.3"))
+ .to be_detected_from("http://github.com/foo/bar.git", tag: "v1.2.3")
+ end
+ end
+end
+
+describe Pathname do
+ specify "#version" do
+ d = HOMEBREW_CELLAR/"foo-0.1.9"
+ d.mkpath
+ expect(d.version).to eq(Version.create("0.1.9"))
+ end
+end
diff --git a/Library/Homebrew/test/versions_test.rb b/Library/Homebrew/test/versions_test.rb
deleted file mode 100644
index b6814b1d1..000000000
--- a/Library/Homebrew/test/versions_test.rb
+++ /dev/null
@@ -1,528 +0,0 @@
-require "testing_env"
-require "version"
-
-class VersionTests < Homebrew::TestCase
- def test_accepts_objects_responding_to_to_str
- value = stub(to_str: "0.1")
- assert_equal "0.1", Version.create(value).to_s
- end
-
- def test_raises_for_non_string_objects
- assert_raises(TypeError) { Version.create(1.1) }
- assert_raises(TypeError) { Version.create(1) }
- assert_raises(TypeError) { Version.create(:symbol) }
- end
-
- def test_detected_from_url?
- refute Version.create("1.0").detected_from_url?
- assert Version::FromURL.new("1.0").detected_from_url?
- end
-end
-
-class VersionTokenTests < Homebrew::TestCase
- def test_inspect
- assert_equal '#<Version::Token "foo">',
- Version::Token.new("foo").inspect
- end
-
- def test_to_s
- assert_equal "foo", Version::Token.new("foo").to_s
- end
-end
-
-class NullVersionTests < Homebrew::TestCase
- def test_null_version_is_always_smaller
- assert_operator Version::NULL, :<, version("1")
- end
-
- def test_null_version_is_never_greater
- refute_operator Version::NULL, :>, version("0")
- end
-
- def test_null_version_is_not_equal_to_itself
- refute_eql Version::NULL, Version::NULL
- end
-
- def test_null_version_creates_an_empty_string
- assert_eql "", Version::NULL.to_s
- end
-
- def test_null_version_produces_nan_as_a_float
- # Float::NAN is not equal to itself so compare object IDs
- assert_eql Float::NAN.object_id, Version::NULL.to_f.object_id
- end
-end
-
-class VersionNullTokenTests < Homebrew::TestCase
- def test_inspect
- assert_equal "#<Version::NullToken>", Version::NullToken.new.inspect
- end
-
- def test_comparing_null
- assert_operator Version::NullToken.new, :==, Version::NullToken.new
- end
-end
-
-class VersionComparisonTests < Homebrew::TestCase
- def test_comparing_regular_versions
- assert_operator version("0.1"), :==, version("0.1.0")
- assert_operator version("0.1"), :<, version("0.2")
- assert_operator version("1.2.3"), :>, version("1.2.2")
- assert_operator version("1.2.4"), :<, version("1.2.4.1")
-
- assert_operator version("1.2.3"), :>, version("1.2.3alpha4")
- assert_operator version("1.2.3"), :>, version("1.2.3beta2")
- assert_operator version("1.2.3"), :>, version("1.2.3rc3")
- assert_operator version("1.2.3"), :<, version("1.2.3-p34")
- end
-
- def test_head
- assert_operator version("HEAD"), :>, version("1.2.3")
- assert_operator version("HEAD-abcdef"), :>, version("1.2.3")
- assert_operator version("1.2.3"), :<, version("HEAD")
- assert_operator version("1.2.3"), :<, version("HEAD-fedcba")
- assert_operator version("HEAD-abcdef"), :==, version("HEAD-fedcba")
- assert_operator version("HEAD"), :==, version("HEAD-fedcba")
- end
-
- def test_comparing_alpha_versions
- assert_operator version("1.2.3alpha"), :<, version("1.2.3")
- assert_operator version("1.2.3"), :<, version("1.2.3a")
- assert_operator version("1.2.3alpha4"), :==, version("1.2.3a4")
- assert_operator version("1.2.3alpha4"), :==, version("1.2.3A4")
- assert_operator version("1.2.3alpha4"), :>, version("1.2.3alpha3")
- assert_operator version("1.2.3alpha4"), :<, version("1.2.3alpha5")
- assert_operator version("1.2.3alpha4"), :<, version("1.2.3alpha10")
-
- assert_operator version("1.2.3alpha4"), :<, version("1.2.3beta2")
- assert_operator version("1.2.3alpha4"), :<, version("1.2.3rc3")
- assert_operator version("1.2.3alpha4"), :<, version("1.2.3")
- assert_operator version("1.2.3alpha4"), :<, version("1.2.3-p34")
- end
-
- def test_comparing_beta_versions
- assert_operator version("1.2.3beta2"), :==, version("1.2.3b2")
- assert_operator version("1.2.3beta2"), :==, version("1.2.3B2")
- assert_operator version("1.2.3beta2"), :>, version("1.2.3beta1")
- assert_operator version("1.2.3beta2"), :<, version("1.2.3beta3")
- assert_operator version("1.2.3beta2"), :<, version("1.2.3beta10")
-
- assert_operator version("1.2.3beta2"), :>, version("1.2.3alpha4")
- assert_operator version("1.2.3beta2"), :<, version("1.2.3rc3")
- assert_operator version("1.2.3beta2"), :<, version("1.2.3")
- assert_operator version("1.2.3beta2"), :<, version("1.2.3-p34")
- end
-
- def test_comparing_rc_versions
- assert_operator version("1.2.3rc3"), :==, version("1.2.3RC3")
- assert_operator version("1.2.3rc3"), :>, version("1.2.3rc2")
- assert_operator version("1.2.3rc3"), :<, version("1.2.3rc4")
- assert_operator version("1.2.3rc3"), :<, version("1.2.3rc10")
-
- assert_operator version("1.2.3rc3"), :>, version("1.2.3alpha4")
- assert_operator version("1.2.3rc3"), :>, version("1.2.3beta2")
- assert_operator version("1.2.3rc3"), :<, version("1.2.3")
- assert_operator version("1.2.3rc3"), :<, version("1.2.3-p34")
- end
-
- def test_comparing_patchlevel_versions
- assert_operator version("1.2.3-p34"), :==, version("1.2.3-P34")
- assert_operator version("1.2.3-p34"), :>, version("1.2.3-p33")
- assert_operator version("1.2.3-p34"), :<, version("1.2.3-p35")
- assert_operator version("1.2.3-p34"), :>, version("1.2.3-p9")
-
- assert_operator version("1.2.3-p34"), :>, version("1.2.3alpha4")
- assert_operator version("1.2.3-p34"), :>, version("1.2.3beta2")
- assert_operator version("1.2.3-p34"), :>, version("1.2.3rc3")
- assert_operator version("1.2.3-p34"), :>, version("1.2.3")
- end
-
- def test_comparing_unevenly_padded_versions
- assert_operator version("2.1.0-p194"), :<, version("2.1-p195")
- assert_operator version("2.1-p195"), :>, version("2.1.0-p194")
- assert_operator version("2.1-p194"), :<, version("2.1.0-p195")
- assert_operator version("2.1.0-p195"), :>, version("2.1-p194")
- assert_operator version("2-p194"), :<, version("2.1-p195")
- end
-
- def test_comparing_against_nil
- assert_operator version("2.1.0-p194"), :>, nil
- end
-
- def test_comparing_against_strings
- assert_operator version("2.1.0-p194"), :==, "2.1.0-p194"
- assert_operator version("1"), :==, 1
- end
-
- def test_comparison_returns_nil_for_non_version
- v = version("1.0")
- assert_nil v <=> Object.new
- assert_raises(ArgumentError) { v > Object.new }
- end
-
- def test_erlang_version
- versions = %w[R16B R15B03-1 R15B03 R15B02 R15B01 R14B04 R14B03
- R14B02 R14B01 R14B R13B04 R13B03 R13B02-1].reverse
- assert_equal versions, versions.sort_by { |v| version(v) }
- end
-
- def test_hash_equality
- v1 = version("0.1.0")
- v2 = version("0.1.0")
- v3 = version("0.1.1")
-
- assert_eql v1, v2
- refute_eql v1, v3
- assert_equal v1.hash, v2.hash
-
- h = { v1 => :foo }
- assert_equal :foo, h[v2]
- end
-end
-
-class VersionParsingTests < Homebrew::TestCase
- def test_pathname_version
- d = HOMEBREW_CELLAR/"foo-0.1.9"
- d.mkpath
- assert_equal version("0.1.9"), d.version
- end
-
- def test_no_version
- assert_version_nil "http://example.com/blah.tar"
- assert_version_nil "foo"
- end
-
- def test_create
- v = Version.create("1.20")
- refute_predicate v, :head?
- assert_equal "1.20", v.to_str
- end
-
- def test_version_all_dots
- assert_version_detected "1.14", "http://example.com/foo.bar.la.1.14.zip"
- end
-
- def test_version_underscore_separator
- assert_version_detected "1.1", "http://example.com/grc_1.1.tar.gz"
- end
-
- def test_boost_version_style
- assert_version_detected "1.39.0", "http://example.com/boost_1_39_0.tar.bz2"
- end
-
- def test_erlang_version_style
- assert_version_detected "R13B", "http://erlang.org/download/otp_src_R13B.tar.gz"
- end
-
- def test_another_erlang_version_style
- assert_version_detected "R15B01", "https://github.com/erlang/otp/tarball/OTP_R15B01"
- end
-
- def test_yet_another_erlang_version_style
- assert_version_detected "R15B03-1", "https://github.com/erlang/otp/tarball/OTP_R15B03-1"
- end
-
- def test_p7zip_version_style
- assert_version_detected "9.04",
- "http://kent.dl.sourceforge.net/sourceforge/p7zip/p7zip_9.04_src_all.tar.bz2"
- end
-
- def test_new_github_style
- assert_version_detected "1.1.4", "https://github.com/sam-github/libnet/tarball/libnet-1.1.4"
- end
-
- def test_codeload_style
- assert_version_detected "0.7.1", "https://codeload.github.com/gsamokovarov/jump/tar.gz/v0.7.1"
- end
-
- def test_elasticsearch_alpha_style
- assert_version_detected "5.0.0-alpha5", "https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/tar/elasticsearch/5.0.0-alpha5/elasticsearch-5.0.0-alpha5.tar.gz"
- end
-
- def test_gloox_beta_style
- assert_version_detected "1.0-beta7", "http://camaya.net/download/gloox-1.0-beta7.tar.bz2"
- end
-
- def test_sphinx_beta_style
- assert_version_detected "1.10-beta", "http://sphinxsearch.com/downloads/sphinx-1.10-beta.tar.gz"
- end
-
- def test_astyle_verson_style
- assert_version_detected "1.23", "http://kent.dl.sourceforge.net/sourceforge/astyle/astyle_1.23_macosx.tar.gz"
- end
-
- def test_version_dos2unix
- assert_version_detected "3.1", "http://www.sfr-fresh.com/linux/misc/dos2unix-3.1.tar.gz"
- end
-
- def test_version_internal_dash
- assert_version_detected "1.1-2", "http://example.com/foo-arse-1.1-2.tar.gz"
- end
-
- def test_version_single_digit
- assert_version_detected "45", "http://example.com/foo_bar.45.tar.gz"
- end
-
- def test_noseparator_single_digit
- assert_version_detected "45", "http://example.com/foo_bar45.tar.gz"
- end
-
- def test_version_developer_that_hates_us_format
- assert_version_detected "1.2.3", "http://example.com/foo-bar-la.1.2.3.tar.gz"
- end
-
- def test_version_regular
- assert_version_detected "1.21", "http://example.com/foo_bar-1.21.tar.gz"
- end
-
- def test_version_sourceforge_download
- assert_version_detected "1.21", "http://sourceforge.net/foo_bar-1.21.tar.gz/download"
- assert_version_detected "1.21", "http://sf.net/foo_bar-1.21.tar.gz/download"
- end
-
- def test_version_github
- assert_version_detected "1.0.5", "http://github.com/lloyd/yajl/tarball/1.0.5"
- end
-
- def test_version_github_with_high_patch_number
- assert_version_detected "1.2.34", "http://github.com/lloyd/yajl/tarball/v1.2.34"
- end
-
- def test_yet_another_version
- assert_version_detected "0.15.1b", "http://example.com/mad-0.15.1b.tar.gz"
- end
-
- def test_lame_version_style
- assert_version_detected "398-2", "http://kent.dl.sourceforge.net/sourceforge/lame/lame-398-2.tar.gz"
- end
-
- def test_ruby_version_style
- assert_version_detected "1.9.1-p243", "ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.1-p243.tar.gz"
- end
-
- def test_omega_version_style
- assert_version_detected "0.80.2", "http://www.alcyone.com/binaries/omega/omega-0.80.2-src.tar.gz"
- end
-
- def test_rc_style
- assert_version_detected "1.2.2rc1", "http://downloads.xiph.org/releases/vorbis/libvorbis-1.2.2rc1.tar.bz2"
- end
-
- def test_dash_rc_style
- assert_version_detected "1.8.0-rc1", "http://ftp.mozilla.org/pub/mozilla.org/js/js-1.8.0-rc1.tar.gz"
- end
-
- def test_angband_version_style
- assert_version_detected "3.0.9b", "http://rephial.org/downloads/3.0/angband-3.0.9b-src.tar.gz"
- end
-
- def test_stable_suffix
- assert_version_detected "1.4.14b", "http://www.monkey.org/~provos/libevent-1.4.14b-stable.tar.gz"
- end
-
- def test_debian_style_1
- assert_version_detected "3.03", "http://ftp.de.debian.org/debian/pool/main/s/sl/sl_3.03.orig.tar.gz"
- end
-
- def test_debian_style_2
- assert_version_detected "1.01b", "http://ftp.de.debian.org/debian/pool/main/m/mmv/mmv_1.01b.orig.tar.gz"
- end
-
- def test_bottle_style
- assert_version_detected "4.8.0", "https://homebrew.bintray.com/bottles/qt-4.8.0.lion.bottle.tar.gz"
- end
-
- def test_versioned_bottle_style
- assert_version_detected "4.8.1", "https://homebrew.bintray.com/bottles/qt-4.8.1.lion.bottle.1.tar.gz"
- end
-
- def test_erlang_bottle_style
- assert_version_detected "R15B", "https://homebrew.bintray.com/bottles/erlang-R15B.lion.bottle.tar.gz"
- end
-
- def test_another_erlang_bottle_style
- assert_version_detected "R15B01", "https://homebrew.bintray.com/bottles/erlang-R15B01.mountain_lion.bottle.tar.gz"
- end
-
- def test_yet_another_erlang_bottle_style
- assert_version_detected "R15B03-1", "https://homebrew.bintray.com/bottles/erlang-R15B03-1.mountainlion.bottle.tar.gz"
- end
-
- def test_imagemagick_style
- assert_version_detected "6.7.5-7", "http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.7.5-7.tar.bz2"
- end
-
- def test_imagemagick_bottle_style
- assert_version_detected "6.7.5-7", "https://homebrew.bintray.com/bottles/imagemagick-6.7.5-7.lion.bottle.tar.gz"
- end
-
- def test_imagemagick_versioned_bottle_style
- assert_version_detected "6.7.5-7", "https://homebrew.bintray.com/bottles/imagemagick-6.7.5-7.lion.bottle.1.tar.gz"
- end
-
- def test_dash_version_dash_style
- assert_version_detected "3.4", "http://www.antlr.org/download/antlr-3.4-complete.jar"
- end
-
- def test_jenkins_version_style
- assert_version_detected "1.486", "http://mirrors.jenkins-ci.org/war/1.486/jenkins.war"
- assert_version_detected "0.10.11", "https://github.com/hechoendrupal/DrupalConsole/releases/download/0.10.11/drupal.phar"
- end
-
- def test_apache_version_style
- assert_version_detected "1.2.0-rc2", "http://www.apache.org/dyn/closer.cgi?path=/cassandra/1.2.0/apache-cassandra-1.2.0-rc2-bin.tar.gz"
- end
-
- def test_jpeg_style
- assert_version_detected "8d", "http://www.ijg.org/files/jpegsrc.v8d.tar.gz"
- end
-
- def test_version_ghc_style
- assert_version_detected "7.0.4", "http://www.haskell.org/ghc/dist/7.0.4/ghc-7.0.4-x86_64-apple-darwin.tar.bz2"
- assert_version_detected "7.0.4", "http://www.haskell.org/ghc/dist/7.0.4/ghc-7.0.4-i386-apple-darwin.tar.bz2"
- end
-
- def test_pypy_version
- assert_version_detected "1.4.1", "http://pypy.org/download/pypy-1.4.1-osx.tar.bz2"
- end
-
- def test_openssl_version
- assert_version_detected "0.9.8s", "http://www.openssl.org/source/openssl-0.9.8s.tar.gz"
- end
-
- def test_xaw3d_version
- assert_version_detected "1.5E", "ftp://ftp.visi.com/users/hawkeyd/X/Xaw3d-1.5E.tar.gz"
- end
-
- def test_assimp_version
- assert_version_detected "2.0.863", "http://downloads.sourceforge.net/project/assimp/assimp-2.0/assimp--2.0.863-sdk.zip"
- end
-
- def test_cmucl_version
- assert_version_detected "20c", "http://common-lisp.net/project/cmucl/downloads/release/20c/cmucl-20c-x86-darwin.tar.bz2"
- end
-
- def test_fann_version
- assert_version_detected "2.1.0beta", "http://downloads.sourceforge.net/project/fann/fann/2.1.0beta/fann-2.1.0beta.zip"
- end
-
- def test_grads_version
- assert_version_detected "2.0.1", "ftp://iges.org/grads/2.0/grads-2.0.1-bin-darwin9.8-intel.tar.gz"
- end
-
- def test_haxe_version
- assert_version_detected "2.08", "http://haxe.org/file/haxe-2.08-osx.tar.gz"
- end
-
- def test_imap_version
- assert_version_detected "2007f", "ftp://ftp.cac.washington.edu/imap/imap-2007f.tar.gz"
- end
-
- def test_suite3270_version
- assert_version_detected "3.3.12ga7", "http://downloads.sourceforge.net/project/x3270/x3270/3.3.12ga7/suite3270-3.3.12ga7-src.tgz"
- end
-
- def test_wwwoffle_version
- assert_version_detected "2.9h", "http://www.gedanken.demon.co.uk/download-wwwoffle/wwwoffle-2.9h.tgz"
- end
-
- def test_synergy_version
- assert_version_detected "1.3.6p2", "http://synergy.googlecode.com/files/synergy-1.3.6p2-MacOSX-Universal.zip"
- end
-
- def test_fontforge_version
- assert_version_detected "20120731", "http://downloads.sourceforge.net/project/fontforge/fontforge-source/fontforge_full-20120731-b.tar.bz2"
- end
-
- def test_ezlupdate_version
- assert_version_detected "2011.10", "https://github.com/downloads/ezsystems/ezpublish-legacy/ezpublish_community_project-2011.10-with_ezc.tar.bz2"
- end
-
- def test_aespipe_version_style
- assert_version_detected "2.4c",
- "http://loop-aes.sourceforge.net/aespipe/aespipe-v2.4c.tar.bz2"
- end
-
- def test_win_style
- assert_version_detected "0.9.17",
- "http://ftpmirror.gnu.org/libmicrohttpd/libmicrohttpd-0.9.17-w32.zip"
- assert_version_detected "1.29",
- "http://ftpmirror.gnu.org/libidn/libidn-1.29-win64.zip"
- end
-
- def test_with_arch
- assert_version_detected "4.0.18-1",
- "http://ftpmirror.gnu.org/mtools/mtools-4.0.18-1.i686.rpm"
- assert_version_detected "5.5.7-5",
- "http://ftpmirror.gnu.org/autogen/autogen-5.5.7-5.i386.rpm"
- assert_version_detected "2.8",
- "http://ftpmirror.gnu.org/libtasn1/libtasn1-2.8-x86.zip"
- assert_version_detected "2.8",
- "http://ftpmirror.gnu.org/libtasn1/libtasn1-2.8-x64.zip"
- assert_version_detected "4.0.18",
- "http://ftpmirror.gnu.org/mtools/mtools_4.0.18_i386.deb"
- end
-
- def test_opam_version
- assert_version_detected "2.18.3",
- "https://opam.ocaml.org/archives/lablgtk.2.18.3+opam.tar.gz"
- assert_version_detected "1.9",
- "https://opam.ocaml.org/archives/sha.1.9+opam.tar.gz"
- assert_version_detected "0.99.2",
- "https://opam.ocaml.org/archives/ppx_tools.0.99.2+opam.tar.gz"
- assert_version_detected "1.0.2",
- "https://opam.ocaml.org/archives/easy-format.1.0.2+opam.tar.gz"
- end
-
- def test_no_extension_version
- assert_version_detected "1.8.12", "https://waf.io/waf-1.8.12"
- assert_version_detected "0.7.1", "https://codeload.github.com/gsamokovarov/jump/tar.gz/v0.7.1"
- assert_version_detected "0.9.1234", "https://my.datomic.com/downloads/free/0.9.1234"
- assert_version_detected "0.9", "https://my.datomic.com/downloads/free/0.9.1t34"
- assert_version_detected "1.2.3", "https://my.datomic.com/downloads/free/1.2.3"
- end
-
- def test_dash_separated_version
- assert_version_detected "6-20151227", "ftp://gcc.gnu.org/pub/gcc/snapshots/6-20151227/gcc-6-20151227.tar.bz2"
- end
-
- def test_from_url
- assert_version_detected "1.2.3",
- "http://github.com/foo/bar.git", tag: "v1.2.3"
- end
-end
-
-class HeadVersionTests < Homebrew::TestCase
- def test_create_head
- v1 = Version.create("HEAD-abcdef")
- v2 = Version.create("HEAD")
-
- assert_predicate v1, :head?
- assert_predicate v2, :head?
- end
-
- def test_commit_assigned
- v = Version.create("HEAD-abcdef")
- assert_equal "abcdef", v.commit
- assert_equal "HEAD-abcdef", v.to_str
- end
-
- def test_no_commit
- v = Version.create("HEAD")
- assert_nil v.commit
- assert_equal "HEAD", v.to_str
- end
-
- def test_update_commit
- v1 = Version.create("HEAD-abcdef")
- v2 = Version.create("HEAD")
-
- v1.update_commit("ffffff")
- assert_equal "ffffff", v1.commit
- assert_equal "HEAD-ffffff", v1.to_str
-
- v2.update_commit("ffffff")
- assert_equal "ffffff", v2.commit
- assert_equal "HEAD-ffffff", v2.to_str
- end
-end