146 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			146 lines
		
	
	
		
			4.7 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| # frozen_string_literal: true
 | |
| 
 | |
| require "rubocops/formula_desc"
 | |
| 
 | |
| describe RuboCop::Cop::FormulaAudit::DescLength 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 "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 ''
 | |
|           ^^^^^^^ 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. Length is calculated as foo + desc. (currently 95)
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
| 
 | |
|     it "When desc is 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. Length is calculated as foo + desc. (currently 98)
 | |
|         end
 | |
|       RUBY
 | |
|     end
 | |
|   end
 | |
| end
 | |
| 
 | |
| describe RuboCop::Cop::FormulaAuditStrict::Desc do
 | |
|   subject(:cop) { described_class.new }
 | |
| 
 | |
|   context "When auditing formula desc" do
 | |
|     it "When wrong \"command-line\" usage in 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 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 an lowercase letter starts a desc" 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 formula name is in desc" 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 "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 a leading space
 | |
|         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 a trailing space
 | |
|         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 'an 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
 | 
