aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Homebrew/test
diff options
context:
space:
mode:
Diffstat (limited to 'Library/Homebrew/test')
-rw-r--r--Library/Homebrew/test/cask/cli/search_spec.rb31
-rw-r--r--Library/Homebrew/test/rubocops/urls_cop_spec.rb54
-rw-r--r--Library/Homebrew/test/spec_helper.rb2
-rw-r--r--Library/Homebrew/test/support/helper/output_as_tty.rb84
4 files changed, 162 insertions, 9 deletions
diff --git a/Library/Homebrew/test/cask/cli/search_spec.rb b/Library/Homebrew/test/cask/cli/search_spec.rb
index 00fcf7382..f43610767 100644
--- a/Library/Homebrew/test/cask/cli/search_spec.rb
+++ b/Library/Homebrew/test/cask/cli/search_spec.rb
@@ -1,60 +1,73 @@
describe Hbc::CLI::Search, :cask do
+ before(:each) do
+ allow(Tty).to receive(:width).and_return(0)
+ end
+
it "lists the available Casks that match the search term" do
expect {
Hbc::CLI::Search.run("local")
- }.to output(<<-EOS.undent).to_stdout
+ }.to output(<<-EOS.undent).to_stdout.as_tty
==> Partial Matches
local-caffeine
local-transmission
EOS
end
+ it "outputs a plain list when stdout is not a TTY" do
+ expect {
+ Hbc::CLI::Search.run("local")
+ }.to output(<<-EOS.undent).to_stdout
+ local-caffeine
+ local-transmission
+ EOS
+ end
+
it "shows that there are no Casks matching a search term that did not result in anything" do
expect {
Hbc::CLI::Search.run("foo-bar-baz")
- }.to output("No Cask found for \"foo-bar-baz\".\n").to_stdout
+ }.to output("No Cask found for \"foo-bar-baz\".\n").to_stdout.as_tty
end
it "lists all available Casks with no search term" do
expect {
Hbc::CLI::Search.run
- }.to output(/local-caffeine/).to_stdout
+ }.to output(/local-caffeine/).to_stdout.as_tty
end
it "ignores hyphens in search terms" do
expect {
Hbc::CLI::Search.run("lo-cal-caffeine")
- }.to output(/local-caffeine/).to_stdout
+ }.to output(/local-caffeine/).to_stdout.as_tty
end
it "ignores hyphens in Cask tokens" do
expect {
Hbc::CLI::Search.run("localcaffeine")
- }.to output(/local-caffeine/).to_stdout
+ }.to output(/local-caffeine/).to_stdout.as_tty
end
it "accepts multiple arguments" do
expect {
Hbc::CLI::Search.run("local caffeine")
- }.to output(/local-caffeine/).to_stdout
+ }.to output(/local-caffeine/).to_stdout.as_tty
end
it "accepts a regexp argument" do
expect {
Hbc::CLI::Search.run("/^local-c[a-z]ffeine$/")
- }.to output("==> Regexp Matches\nlocal-caffeine\n").to_stdout
+ }.to output("==> Regexp Matches\nlocal-caffeine\n").to_stdout.as_tty
end
it "Returns both exact and partial matches" do
expect {
Hbc::CLI::Search.run("test-opera")
- }.to output(/^==> Exact Match\ntest-opera\n==> Partial Matches\ntest-opera-mail/).to_stdout
+ }.to output(/^==> Exact Match\ntest-opera\n==> Partial Matches\ntest-opera-mail/).to_stdout.as_tty
end
it "does not search the Tap name" do
expect {
Hbc::CLI::Search.run("caskroom")
- }.to output(/^No Cask found for "caskroom"\.\n/).to_stdout
+ }.to output(/^No Cask found for "caskroom"\.\n/).to_stdout.as_tty
end
it "doesn't highlight packages that aren't installed" do
diff --git a/Library/Homebrew/test/rubocops/urls_cop_spec.rb b/Library/Homebrew/test/rubocops/urls_cop_spec.rb
new file mode 100644
index 000000000..2e56dbf03
--- /dev/null
+++ b/Library/Homebrew/test/rubocops/urls_cop_spec.rb
@@ -0,0 +1,54 @@
+require "rubocop"
+require "rubocop/rspec/support"
+require_relative "../../extend/string"
+require_relative "../../rubocops/urls_cop"
+
+describe RuboCop::Cop::FormulaAudit::Urls do
+ subject(:cop) { described_class.new }
+
+ context "When auditing urls" do
+ it "with offenses" do
+ formulas = [{
+ "url" => "https://ftpmirror.gnu.org/lightning/lightning-2.1.0.tar.gz",
+ "msg" => 'Please use "https://ftp.gnu.org/gnu/lightning/lightning-2.1.0.tar.gz" instead of https://ftpmirror.gnu.org/lightning/lightning-2.1.0.tar.gz.',
+ "col" => 2,
+ }, {
+ "url" => "https://fossies.org/linux/privat/monit-5.23.0.tar.gz",
+ "msg" => "Please don't use fossies.org in the url (using as a mirror is fine)",
+ "col" => 2,
+ }, {
+ "url" => "http://tools.ietf.org/tools/rfcmarkup/rfcmarkup-1.119.tgz",
+ "msg" => "Please use https:// for http://tools.ietf.org/tools/rfcmarkup/rfcmarkup-1.119.tgz",
+ "col" => 2,
+ }, {
+ "url" => "http://search.mcpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.003.tar.gz",
+ "msg" => "http://search.mcpan.org/CPAN/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.003.tar.gz should be `https://cpan.metacpan.org/authors/id/Z/ZE/ZEFRAM/Perl4-CoreLibs-0.003.tar.gz`",
+ "col" => 2,
+ }, {
+ "url" => "http://ftp.gnome.org/pub/GNOME/binaries/mac/banshee/banshee-2.macosx.intel.dmg",
+ "msg" => "http://ftp.gnome.org/pub/GNOME/binaries/mac/banshee/banshee-2.macosx.intel.dmg should be `https://download.gnome.org/binaries/mac/banshee/banshee-2.macosx.intel.dmg`",
+ "col" => 2,
+ }]
+
+ formulas.each do |formula|
+ source = <<-EOS.undent
+ class Foo < Formula
+ desc "foo"
+ url "#{formula["url"]}"
+ end
+ EOS
+ expected_offenses = [{ message: formula["msg"],
+ severity: :convention,
+ line: 3,
+ column: formula["col"],
+ source: source }]
+
+ inspect_source(cop, source)
+
+ expected_offenses.zip(cop.offenses.reverse).each do |expected, actual|
+ expect_offense(expected, actual)
+ end
+ end
+ end
+ end
+end
diff --git a/Library/Homebrew/test/spec_helper.rb b/Library/Homebrew/test/spec_helper.rb
index b1a028d9d..222f85fc4 100644
--- a/Library/Homebrew/test/spec_helper.rb
+++ b/Library/Homebrew/test/spec_helper.rb
@@ -23,6 +23,7 @@ require "test/support/helper/shutup"
require "test/support/helper/fixtures"
require "test/support/helper/formula"
require "test/support/helper/mktmpdir"
+require "test/support/helper/output_as_tty"
require "test/support/helper/rubocop"
require "test/support/helper/spec/shared_context/homebrew_cask" if OS.mac?
@@ -47,6 +48,7 @@ RSpec.configure do |config|
config.include(Test::Helper::Fixtures)
config.include(Test::Helper::Formula)
config.include(Test::Helper::MkTmpDir)
+ config.include(Test::Helper::OutputAsTTY)
config.include(Test::Helper::RuboCop)
config.before(:each, :needs_compat) do
diff --git a/Library/Homebrew/test/support/helper/output_as_tty.rb b/Library/Homebrew/test/support/helper/output_as_tty.rb
new file mode 100644
index 000000000..aa9da73cc
--- /dev/null
+++ b/Library/Homebrew/test/support/helper/output_as_tty.rb
@@ -0,0 +1,84 @@
+require "delegate"
+
+module Test
+ module Helper
+ module OutputAsTTY
+ # This is a custom wrapper for the `output` matcher,
+ # used for testing output to a TTY:
+ #
+ # expect {
+ # print "test" if $stdout.tty?
+ # }.to output("test").to_stdout.as_tty
+ #
+ # expect {
+ # # command
+ # }.to output(...).to_stderr.as_tty.with_color
+ #
+ class Output < SimpleDelegator
+ def matches?(block)
+ return super(block) unless @tty
+
+ colored_tty_block = lambda do
+ instance_eval("$#{@output}").extend(Module.new do
+ def tty?
+ true
+ end
+
+ alias_method :isatty, :tty?
+ end)
+ block.call
+ end
+
+ return super(colored_tty_block) if @colors
+
+ uncolored_tty_block = lambda do
+ instance_eval <<-EOS
+ begin
+ captured_stream = StringIO.new
+
+ original_stream = $#{@output}
+ $#{@output} = captured_stream
+
+ colored_tty_block.call
+ ensure
+ $#{@output} = original_stream
+ $#{@output}.print Tty.strip_ansi(captured_stream.string)
+ end
+ EOS
+ end
+
+ super(uncolored_tty_block)
+ end
+
+ def to_stdout
+ @output = :stdout
+ super
+ self
+ end
+
+ def to_stderr
+ @output = :stderr
+ super
+ self
+ end
+
+ def as_tty
+ @tty = true
+ return self if [:stdout, :stderr].include?(@output)
+ raise "`as_tty` can only be chained to `stdout` or `stderr`."
+ end
+
+ def with_color
+ @colors = true
+ return self if @tty
+ raise "`with_color` can only be chained to `as_tty`."
+ end
+ end
+
+ def output(*args)
+ core_matcher = super(*args)
+ Output.new(core_matcher)
+ end
+ end
+ end
+end