# frozen_string_literal: true require "rubocops/formula_desc" describe RuboCop::Cop::FormulaAudit::Desc do subject(:cop) { described_class.new } context "When auditing formula desc" do it "When there is no desc" do expect_offense(<<~RUBY) class Foo < Formula ^^^^^^^^^^^^^^^^^^^ Formula should have a desc (Description). url 'https://brew.sh/foo-1.0.tgz' end RUBY end it "When desc is an empty string" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc '' ^^^^^^^ The desc (description) should not be an empty string. end RUBY end it "When desc is too long" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'Bar#{"bar" * 29}' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Description is too long. "name: desc" should be less than 80 characters. The current combined length is 95. end RUBY end it "When desc is a multiline string" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'Bar#{"bar" * 9}'\ '#{"foo" * 21}' ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Description is too long. "name: desc" should be less than 80 characters. The current combined length is 98. end RUBY end end context "When auditing formula desc" do it "When the description starts with a leading space" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc ' Description with a leading space' ^ Description shouldn\'t have leading spaces. end RUBY end it "When the description ends with a trailing space" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'Description with a trailing space ' ^ Description shouldn\'t have trailing spaces. end RUBY end it "When \"command-line\" is incorrectly spelled in the desc" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'command line' ^ Description should start with a capital letter. ^^^^^^^^^^^^ Description should use \"command-line\" instead of \"command line\". end RUBY end it "When an article is used in the desc" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'An aardvark' ^^ Description shouldn\'t start with an indefinite article, i.e. \"An\". end RUBY end it "When the desc starts with a lowercase letter" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'bar' ^ Description should start with a capital letter. end RUBY end it "When the desc starts with the formula name" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'Foo is a foobar' ^^^^ Description shouldn\'t start with the formula name. end RUBY end it "When the description ends with a full stop" do expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb") class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'Description with a full stop at the end.' ^ Description shouldn\'t end with a full stop. end RUBY end it "autocorrects all rules" do source = <<~RUBY class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc ' an bar: commandline foo ' end RUBY correct_source = <<~RUBY class Foo < Formula url 'https://brew.sh/foo-1.0.tgz' desc 'Bar: command-line' end RUBY corrected_source = autocorrect_source(source, "/homebrew-core/Formula/foo.rb") expect(corrected_source).to eq(correct_source) end end end