183 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			6.6 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require "rubocops/desc"
 | |
| 
 | |
| RSpec.describe RuboCop::Cop::FormulaAudit::Desc do
 | |
|   subject(:cop) { described_class.new }
 | |
| 
 | |
|   context "when auditing formula `desc` methods" do
 | |
|     it "reports an offense when there is no `desc`" do
 | |
|       expect_offense(<<~RUBY)
 | |
|         class Foo < Formula
 | |
|         ^^^^^^^^^^^^^^^^^^^ FormulaAudit/Desc: Formula should have a desc (Description).
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense 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 ''
 | |
|           ^^^^^^^ FormulaAudit/Desc: The desc (description) should not be an empty string.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense 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}'
 | |
|           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Desc: Description is too long. It should be less than 80 characters. The current length is 90.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense 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}'
 | |
|           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ FormulaAudit/Desc: Description is too long. It should be less than 80 characters. The current length is 93.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   context "when auditing formula description texts" do
 | |
|     it "reports an offense 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'
 | |
|                 ^ FormulaAudit/Desc: Description shouldn't have leading spaces.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense 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 '
 | |
|                                                  ^ FormulaAudit/Desc: Description shouldn't have trailing spaces.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense when \"command-line\" is incorrectly spelled in the description" do
 | |
|       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'command line'
 | |
|                 ^ FormulaAudit/Desc: Description should start with a capital letter.
 | |
|                 ^^^^^^^^^^^^ FormulaAudit/Desc: Description should use "command-line" instead of "command line".
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense when an article is used in the description" do
 | |
|       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'An aardvark'
 | |
|                 ^^ FormulaAudit/Desc: Description shouldn't start with an article.
 | |
|         end
 | |
|       RUBY
 | |
| 
 | |
|       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'The aardvark'
 | |
|                 ^^^ FormulaAudit/Desc: Description shouldn't start with an article.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense when the description 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'
 | |
|                 ^ FormulaAudit/Desc: Description should start with a capital letter.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports an offense when the description 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'
 | |
|                 ^^^ FormulaAudit/Desc: Description shouldn't start with the formula name.
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "report and corrects an offense 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.'
 | |
|                                                        ^ FormulaAudit/Desc: Description shouldn't end with a full stop.
 | |
|         end
 | |
|       RUBY
 | |
| 
 | |
|       expect_correction(<<~RUBY)
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'Description with a full stop at the end'
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports and corrects an offense when the description contains Unicode So characters" do
 | |
|       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'Description with a 🍺 symbol'
 | |
|                                    ^ FormulaAudit/Desc: Description shouldn't contain Unicode emojis or symbols.
 | |
|         end
 | |
|       RUBY
 | |
| 
 | |
|       expect_correction(<<~RUBY)
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'Description with a symbol'
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "does not report an offense when the description ends with 'etc.'" do
 | |
|       expect_no_offenses(<<~RUBY, "/homebrew-core/Formula/foo.rb")
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'Description of a thing and some more things and some more etc.'
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "reports and corrects all rules for description text" do
 | |
|       expect_offense(<<~RUBY, "/homebrew-core/Formula/foo.rb")
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc ' an bar: commandline foo '
 | |
|                                         ^ FormulaAudit/Desc: Description shouldn't have trailing spaces.
 | |
|                          ^^^^^^^^^^^ FormulaAudit/Desc: Description should use "command-line" instead of "commandline".
 | |
|                 ^ FormulaAudit/Desc: Description shouldn't have leading spaces.
 | |
|         end
 | |
|       RUBY
 | |
| 
 | |
|       expect_correction(<<~RUBY)
 | |
|         class Foo < Formula
 | |
|           url 'https://brew.sh/foo-1.0.tgz'
 | |
|           desc 'Bar: command-line'
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
|   end
 | |
| end
 | 
