brew/Library/Homebrew/test/version/parser_spec.rb
2023-12-15 16:24:46 +00:00

79 lines
2.8 KiB
Ruby

# frozen_string_literal: true
require "version/parser"
describe Version::Parser do
specify "::new" do
expect { described_class.new }
.to raise_error("Version::Parser is declared as abstract; it cannot be instantiated")
end
describe Version::RegexParser do
specify "::new" do
expect { described_class.new(/[._-](\d+(?:\.\d+)+)/) }
.to raise_error("Version::RegexParser is declared as abstract; it cannot be instantiated")
end
specify "::process_spec" do
expect { described_class.process_spec(Pathname(TEST_TMPDIR)) }
.to raise_error("The method `process_spec` on #<Class:Version::RegexParser> is declared as `abstract`. " \
"It does not have an implementation.")
end
end
describe Version::UrlParser do
specify "::new" do
expect { described_class.new(/[._-](\d+(?:\.\d+)+)/) }.not_to raise_error
end
specify "::process_spec" do
expect(described_class.process_spec(Pathname("#{TEST_TMPDIR}/testdir-0.1.test")))
.to eq("#{TEST_TMPDIR}/testdir-0.1.test")
expect(described_class.process_spec(Pathname("https://sourceforge.net/foo_bar-1.21.tar.gz/download")))
.to eq("https://sourceforge.net/foo_bar-1.21.tar.gz/download")
expect(described_class.process_spec(Pathname("https://sf.net/foo_bar-1.21.tar.gz/download")))
.to eq("https://sf.net/foo_bar-1.21.tar.gz/download")
expect(described_class.process_spec(Pathname("https://brew.sh/testball-0.1")))
.to eq("https://brew.sh/testball-0.1")
expect(described_class.process_spec(Pathname("https://brew.sh/testball-0.1.tgz")))
.to eq("https://brew.sh/testball-0.1.tgz")
end
end
describe Version::StemParser do
before { Pathname("#{TEST_TMPDIR}/testdir-0.1.test").mkpath }
after { Pathname("#{TEST_TMPDIR}/testdir-0.1.test").unlink }
specify "::new" do
expect { described_class.new(/[._-](\d+(?:\.\d+)+)/) }.not_to raise_error
end
describe "::process_spec" do
it "works with directories" do
expect(described_class.process_spec(Pathname("#{TEST_TMPDIR}/testdir-0.1.test"))).to eq("testdir-0.1.test")
end
it "works with SourceForge URLs with /download suffix" do
expect(described_class.process_spec(Pathname("https://sourceforge.net/foo_bar-1.21.tar.gz/download")))
.to eq("foo_bar-1.21")
expect(described_class.process_spec(Pathname("https://sf.net/foo_bar-1.21.tar.gz/download")))
.to eq("foo_bar-1.21")
end
it "works with URLs without file extension" do
expect(described_class.process_spec(Pathname("https://brew.sh/testball-0.1"))).to eq("testball-0.1")
end
it "works with URLs with file extension" do
expect(described_class.process_spec(Pathname("https://brew.sh/testball-0.1.tgz"))).to eq("testball-0.1")
end
end
end
end