diff options
| author | Markus Reiter | 2017-03-05 06:31:36 +0100 |
|---|---|---|
| committer | Markus Reiter | 2017-03-05 23:08:14 +0100 |
| commit | 9fc6c7b2be300ff35dc52d80f4dc38d36d52ddc2 (patch) | |
| tree | 43e99a683329471c1dc965dcc92daccb57df7e8d /Library/Homebrew/test/cask/cli/style_spec.rb | |
| parent | 67ec76d1492fbb03959a782a85c4fb985d6a5884 (diff) | |
| download | brew-9fc6c7b2be300ff35dc52d80f4dc38d36d52ddc2.tar.bz2 | |
Move Cask specs into `brew tests`.
Diffstat (limited to 'Library/Homebrew/test/cask/cli/style_spec.rb')
| -rw-r--r-- | Library/Homebrew/test/cask/cli/style_spec.rb | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/Library/Homebrew/test/cask/cli/style_spec.rb b/Library/Homebrew/test/cask/cli/style_spec.rb new file mode 100644 index 000000000..106bfbb44 --- /dev/null +++ b/Library/Homebrew/test/cask/cli/style_spec.rb @@ -0,0 +1,235 @@ +require "English" +require "open3" +require "rubygems" + +describe Hbc::CLI::Style do + let(:args) { [] } + let(:cli) { described_class.new(args) } + + around do |example| + shutup { example.run } + end + + describe ".run" do + subject { described_class.run(args) } + + before do + allow(described_class).to receive(:new).and_return(cli) + allow(cli).to receive(:run).and_return(retval) + end + + context "when rubocop succeeds" do + let(:retval) { true } + + it "exits successfully" do + subject + end + end + + context "when rubocop fails" do + let(:retval) { false } + + it "raises an exception" do + expect { subject }.to raise_error(Hbc::CaskError) + end + end + end + + describe "#run" do + subject { cli.run } + + before do + allow(cli).to receive_messages(install_rubocop: nil, + system: nil, + rubocop_args: nil, + cask_paths: nil) + allow($CHILD_STATUS).to receive(:success?).and_return(success) + end + + context "when rubocop succeeds" do + let(:success) { true } + it { is_expected.to be_truthy } + end + + context "when rubocop fails" do + let(:success) { false } + it { is_expected.to be_falsey } + end + end + + describe "#install_rubocop" do + subject { cli.install_rubocop } + + context "when installation succeeds" do + before do + allow(Homebrew).to receive(:install_gem_setup_path!) + end + + it "exits successfully" do + expect { subject }.not_to raise_error + end + end + + context "when installation fails" do + before do + allow(Homebrew).to receive(:install_gem_setup_path!).and_raise(SystemExit) + end + + it "raises an error" do + expect { subject }.to raise_error(Hbc::CaskError) + end + end + + context "version" do + it "matches `HOMEBREW_RUBOCOP_VERSION`" do + stdout, status = Open3.capture2("gem", "dependency", "rubocop-cask", "--version", HOMEBREW_RUBOCOP_CASK_VERSION, "--pipe", "--remote") + + expect(status).to be_a_success + + requirement = Gem::Requirement.new(stdout.scan(/rubocop --version '(.*)'/).flatten.first) + version = Gem::Version.new(HOMEBREW_RUBOCOP_VERSION) + + expect(requirement).not_to be_none + expect(requirement).to be_satisfied_by(version) + end + end + end + + describe "#cask_paths" do + subject { cli.cask_paths } + + before do + allow(cli).to receive(:cask_tokens).and_return(tokens) + end + + context "when no cask tokens are given" do + let(:tokens) { [] } + + before do + allow(Hbc).to receive(:all_tapped_cask_dirs).and_return(%w[Casks MoreCasks]) + end + + it { is_expected.to eq(%w[Casks MoreCasks]) } + end + + context "when at least one cask token is a path that exists" do + let(:tokens) { ["adium", "Casks/dropbox.rb"] } + before do + allow(File).to receive(:exist?).and_return(false, true) + end + + it "treats all tokens as paths" do + expect(subject).to eq(tokens) + end + end + + context "when no cask tokens are paths that exist" do + let(:tokens) { %w[adium dropbox] } + before do + allow(File).to receive(:exist?).and_return(false) + end + + it "tries to find paths for all tokens" do + expect(Hbc).to receive(:path).twice + subject + end + end + end + + describe "#cask_tokens" do + subject { cli.cask_tokens } + + context "when no args are given" do + let(:args) { [] } + it { is_expected.to be_empty } + end + + context "when only flags are given" do + let(:args) { ["--fix"] } + it { is_expected.to be_empty } + end + + context "when only empty args are given" do + let(:args) { ["", ""] } + it { is_expected.to be_empty } + end + + context "when a cask token is given" do + let(:args) { ["adium"] } + it { is_expected.to eq(["adium"]) } + end + + context "when multiple cask tokens are given" do + let(:args) { %w[adium dropbox] } + it { is_expected.to eq(%w[adium dropbox]) } + end + + context "when cask tokens are given with flags" do + let(:args) { ["adium", "dropbox", "--fix"] } + it { is_expected.to eq(%w[adium dropbox]) } + end + end + + describe "#rubocop_args" do + subject { cli.rubocop_args } + + before do + allow(cli).to receive(:fix?).and_return(fix) + end + + context "when fix? is true" do + let(:fix) { true } + it { is_expected.to include("--auto-correct") } + end + + context "when fix? is false" do + let(:fix) { false } + it { is_expected.not_to include("--auto-correct") } + end + end + + describe "#default_args" do + subject { cli.default_args } + + it { is_expected.to include("--require", "rubocop-cask", "--format", "simple", "--force-exclusion") } + end + + describe "#autocorrect_args" do + subject { cli.autocorrect_args } + let(:default_args) { ["--format", "simple"] } + + it "should add --auto-correct to default args" do + allow(cli).to receive(:default_args).and_return(default_args) + expect(subject).to include("--auto-correct", *default_args) + end + end + + describe "#fix?" do + subject { cli.fix? } + + context "when --fix is passed as an argument" do + let(:args) { ["adium", "--fix"] } + it { is_expected.to be_truthy } + end + + context "when --correct is passed as an argument" do + let(:args) { ["adium", "--correct"] } + it { is_expected.to be_truthy } + end + + context "when --auto-correct is passed as an argument" do + let(:args) { ["adium", "--auto-correct"] } + it { is_expected.to be_truthy } + end + + context "when --auto-correct is misspelled as --autocorrect" do + let(:args) { ["adium", "--autocorrect"] } + it { is_expected.to be_truthy } + end + + context "when no flag equivalent to --fix is passed as an argument" do + let(:args) { ["adium"] } + it { is_expected.to be_falsey } + end + end +end |
