tailor 0.1.5 → 1.0.0.alpha
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +9 -1
- data/.rspec +2 -1
- data/.tailor +6 -0
- data/Gemfile.lock +47 -78
- data/{ChangeLog.rdoc → History.rdoc} +0 -0
- data/README.rdoc +157 -24
- data/Rakefile +0 -9
- data/bin/tailor +16 -69
- data/features/configurable.feature +78 -0
- data/features/horizontal_spacing.feature +262 -0
- data/features/indentation.feature +17 -21
- data/features/indentation/bad_files_with_no_trailing_newline.feature +90 -0
- data/features/indentation/good_files_with_no_trailing_newline.feature +206 -0
- data/features/name_detection.feature +72 -0
- data/features/step_definitions/indentation_steps.rb +10 -133
- data/features/support/env.rb +7 -15
- data/features/support/file_cases/horizontal_spacing_cases.rb +265 -0
- data/features/support/file_cases/indentation_cases.rb +972 -0
- data/features/support/file_cases/naming_cases.rb +52 -0
- data/features/support/file_cases/vertical_spacing_cases.rb +70 -0
- data/features/support/hooks.rb +8 -0
- data/features/support/{1_file_with_bad_operator_spacing → legacy}/bad_op_spacing.rb +0 -0
- data/features/support/{1_file_with_bad_ternary_colon_spacing → legacy}/bad_ternary_colon_spacing.rb +0 -0
- data/features/support/{1_long_file_with_indentation/my_project.rb → legacy/long_file_with_indentation.rb} +1 -1
- data/features/support/world.rb +14 -0
- data/features/vertical_spacing.feature +114 -0
- data/lib/ext/string_ext.rb +5 -0
- data/lib/tailor.rb +6 -252
- data/lib/tailor/cli.rb +49 -0
- data/lib/tailor/cli/options.rb +251 -0
- data/lib/tailor/composite_observable.rb +56 -0
- data/lib/tailor/configuration.rb +263 -0
- data/lib/tailor/critic.rb +162 -0
- data/lib/tailor/formatters/text.rb +126 -0
- data/lib/tailor/lexed_line.rb +246 -0
- data/lib/tailor/lexer.rb +428 -0
- data/lib/tailor/lexer/token.rb +103 -0
- data/lib/tailor/lexer_constants.rb +75 -0
- data/lib/tailor/logger.rb +28 -0
- data/lib/tailor/problem.rb +100 -0
- data/lib/tailor/reporter.rb +48 -0
- data/lib/tailor/ruler.rb +39 -0
- data/lib/tailor/rulers.rb +7 -0
- data/lib/tailor/rulers/allow_camel_case_methods_ruler.rb +30 -0
- data/lib/tailor/rulers/allow_hard_tabs_ruler.rb +22 -0
- data/lib/tailor/rulers/allow_screaming_snake_case_classes_ruler.rb +32 -0
- data/lib/tailor/rulers/allow_trailing_line_spaces_ruler.rb +33 -0
- data/lib/tailor/rulers/indentation_spaces_ruler.rb +199 -0
- data/lib/tailor/rulers/indentation_spaces_ruler/indentation_manager.rb +362 -0
- data/lib/tailor/rulers/max_code_lines_in_class_ruler.rb +84 -0
- data/lib/tailor/rulers/max_code_lines_in_method_ruler.rb +84 -0
- data/lib/tailor/rulers/max_line_length_ruler.rb +31 -0
- data/lib/tailor/rulers/spaces_after_comma_ruler.rb +83 -0
- data/lib/tailor/rulers/spaces_after_lbrace_ruler.rb +114 -0
- data/lib/tailor/rulers/spaces_after_lbracket_ruler.rb +123 -0
- data/lib/tailor/rulers/spaces_after_lparen_ruler.rb +116 -0
- data/lib/tailor/rulers/spaces_before_comma_ruler.rb +67 -0
- data/lib/tailor/rulers/spaces_before_lbrace_ruler.rb +93 -0
- data/lib/tailor/rulers/spaces_before_rbrace_ruler.rb +98 -0
- data/lib/tailor/rulers/spaces_before_rbracket_ruler.rb +70 -0
- data/lib/tailor/rulers/spaces_before_rparen_ruler.rb +70 -0
- data/lib/tailor/rulers/spaces_in_empty_braces_ruler.rb +94 -0
- data/lib/tailor/rulers/trailing_newlines_ruler.rb +36 -0
- data/lib/tailor/runtime_error.rb +3 -0
- data/lib/tailor/tailorrc.erb +88 -0
- data/lib/tailor/version.rb +2 -2
- data/spec/spec_helper.rb +7 -5
- data/spec/tailor/cli_spec.rb +94 -0
- data/spec/tailor/configuration_spec.rb +147 -0
- data/spec/tailor/critic_spec.rb +63 -0
- data/spec/tailor/lexed_line_spec.rb +569 -0
- data/spec/tailor/lexer/token_spec.rb +46 -0
- data/spec/tailor/lexer_spec.rb +181 -0
- data/spec/tailor/options_spec.rb +6 -0
- data/spec/tailor/problem_spec.rb +74 -0
- data/spec/tailor/reporter_spec.rb +53 -0
- data/spec/tailor/ruler_spec.rb +56 -0
- data/spec/tailor/rulers/indentation_spaces_ruler/indentation_manager_spec.rb +454 -0
- data/spec/tailor/rulers/indentation_spaces_ruler_spec.rb +128 -0
- data/spec/tailor/rulers/spaces_after_comma_spec.rb +31 -0
- data/spec/tailor/rulers/spaces_after_lbrace_ruler_spec.rb +145 -0
- data/spec/tailor/rulers/spaces_before_lbrace_ruler_spec.rb +63 -0
- data/spec/tailor/rulers/spaces_before_rbrace_ruler_spec.rb +63 -0
- data/spec/tailor/rulers_spec.rb +9 -0
- data/spec/tailor/version_spec.rb +6 -0
- data/spec/tailor_spec.rb +9 -21
- data/tailor.gemspec +22 -35
- data/tasks/features.rake +7 -0
- data/tasks/roodi.rake +9 -0
- data/tasks/roodi_config.yaml +14 -0
- data/tasks/spec.rake +16 -0
- data/tasks/yard.rake +14 -0
- metadata +224 -77
- data/features/case_checking.feature +0 -38
- data/features/spacing.feature +0 -97
- data/features/spacing/commas.feature +0 -44
- data/features/step_definitions/case_checking_steps.rb +0 -42
- data/features/step_definitions/spacing_steps.rb +0 -156
- data/features/support/1_file_with_bad_comma_spacing/bad_comma_spacing.rb +0 -43
- data/features/support/1_file_with_bad_curly_brace_spacing/bad_curly_brace_spacing.rb +0 -60
- data/features/support/1_file_with_bad_parenthesis/bad_parenthesis.rb +0 -4
- data/features/support/1_file_with_bad_square_brackets/bad_square_brackets.rb +0 -62
- data/features/support/1_file_with_camel_case_class/camel_case_class.rb +0 -5
- data/features/support/1_file_with_camel_case_method/camel_case_method.rb +0 -3
- data/features/support/1_file_with_hard_tabs/hard_tab.rb +0 -3
- data/features/support/1_file_with_long_lines/long_lines.rb +0 -5
- data/features/support/1_file_with_snake_case_class/snake_case_class.rb +0 -5
- data/features/support/1_file_with_snake_case_method/snake_case_method.rb +0 -3
- data/features/support/1_file_with_trailing_whitespace/trailing_whitespace.rb +0 -5
- data/features/support/1_good_simple_file/simple_project.rb +0 -5
- data/features/support/common.rb +0 -102
- data/features/support/matchers.rb +0 -11
- data/lib/tailor/file_line.rb +0 -220
- data/lib/tailor/indentation.rb +0 -245
- data/lib/tailor/spacing.rb +0 -237
- data/spec/file_line_spec.rb +0 -70
- data/spec/indentation_spec.rb +0 -259
- data/spec/spacing/colon_spacing_spec.rb +0 -71
- data/spec/spacing/comma_spacing_spec.rb +0 -159
- data/spec/spacing/curly_brace_spacing_spec.rb +0 -257
- data/spec/spacing/parentheses_spacing_spec.rb +0 -28
- data/spec/spacing/square_bracket_spacing_spec.rb +0 -116
- data/spec/spacing_spec.rb +0 -167
- data/tasks/metrics.rake +0 -23
@@ -0,0 +1,36 @@
|
|
1
|
+
require_relative '../ruler'
|
2
|
+
|
3
|
+
|
4
|
+
class Tailor
|
5
|
+
module Rulers
|
6
|
+
class TrailingNewlinesRuler < Tailor::Ruler
|
7
|
+
|
8
|
+
# Checks to see if the number of newlines at the end of the file is not
|
9
|
+
# equal to the value at +@config+.
|
10
|
+
#
|
11
|
+
# @param [Fixnum] trailing_newline_count The number of newlines at the end
|
12
|
+
# of the file.
|
13
|
+
def measure(trailing_newline_count)
|
14
|
+
if trailing_newline_count != @config
|
15
|
+
lineno = "<EOF>"
|
16
|
+
column = "<EOF>"
|
17
|
+
@problems << Problem.new(:trailing_newlines, lineno, column,
|
18
|
+
{ actual_trailing_newlines: trailing_newline_count,
|
19
|
+
should_have: @config }
|
20
|
+
)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
# Checks to see if the file's final character is a \n. If it is, it just
|
25
|
+
# returns the text that was passed in. If it's not, it adds a \n, since
|
26
|
+
# the current indentation-checking algorithm only checks indent levels when
|
27
|
+
# it parses a newline character (without this, indentation problems on the
|
28
|
+
# final line won't ever get caught).
|
29
|
+
#
|
30
|
+
# @param [Fixnum] trailing_newline_count
|
31
|
+
def file_update(trailing_newline_count)
|
32
|
+
measure(trailing_newline_count)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,88 @@
|
|
1
|
+
#------------------------------------------------------------------------------
|
2
|
+
# Horizontal Whitespace
|
3
|
+
#------------------------------------------------------------------------------
|
4
|
+
# allow_hard_tabs True to let hard tabs be considered a single space.
|
5
|
+
# Default: false
|
6
|
+
#
|
7
|
+
# allow_trailing_line_spaces
|
8
|
+
# True to skip detecting extra spaces at the ends of
|
9
|
+
# lines.
|
10
|
+
# Default: false
|
11
|
+
#
|
12
|
+
# indentation_spaces The number of spaces to consider a proper indent.
|
13
|
+
# Default: 2
|
14
|
+
#
|
15
|
+
# max_line_length The maximum number of characters in a line before
|
16
|
+
# tailor complains.
|
17
|
+
# Default: 80
|
18
|
+
# spaces_after_comma Number of spaces to expect after a comma.
|
19
|
+
# Default: 1
|
20
|
+
#
|
21
|
+
# spaces_before_comma Number of spaces to expect before a comma.
|
22
|
+
# Default: 0
|
23
|
+
#
|
24
|
+
# spaces_after_lbrace The number of spaces to expect after an lbrace ('{').
|
25
|
+
# Default: 1
|
26
|
+
#
|
27
|
+
# spaces_before_lbrace The number of spaces to expect before an lbrace ('{').
|
28
|
+
# Default: 1
|
29
|
+
#
|
30
|
+
# spaces_before_rbrace The number of spaces to expect before an rbrace ('}').
|
31
|
+
# Default: 1
|
32
|
+
#
|
33
|
+
# spaces_in_empty_braces The number of spaces to expect between braces when
|
34
|
+
# there's nothing in the braces (i.e. {}).
|
35
|
+
# Default: 0
|
36
|
+
#
|
37
|
+
# spaces_after_lbracket The number of spaces to expect after an
|
38
|
+
# lbracket ('[').
|
39
|
+
# Default: 0
|
40
|
+
#
|
41
|
+
# spaces_before_rbracket The number of spaces to expect before an
|
42
|
+
# rbracket (']').
|
43
|
+
# Default: 0
|
44
|
+
#
|
45
|
+
# spaces_after_lparen The number of spaces to expect after an
|
46
|
+
# lparen ('(').
|
47
|
+
# Default: 0
|
48
|
+
#
|
49
|
+
# spaces_before_rparen The number of spaces to expect before an
|
50
|
+
# rbracket (')').
|
51
|
+
# Default: 0
|
52
|
+
#
|
53
|
+
#------------------------------------------------------------------------------
|
54
|
+
# Naming
|
55
|
+
#------------------------------------------------------------------------------
|
56
|
+
# allow_camel_case_methods
|
57
|
+
# Setting to true skips detection of camel-case method
|
58
|
+
# names (i.e. def myMethod).
|
59
|
+
# Default: false
|
60
|
+
#
|
61
|
+
# allow_screaming_snake_case_classes
|
62
|
+
# Setting to true skips detection of screaming
|
63
|
+
# snake-case class names (i.e. My_Class).
|
64
|
+
# Default: false
|
65
|
+
#
|
66
|
+
#------------------------------------------------------------------------------
|
67
|
+
# Vertical Whitespace
|
68
|
+
#------------------------------------------------------------------------------
|
69
|
+
# max_code_lines_in_class The number of lines of code in a class to allow before
|
70
|
+
# tailor will warn you.
|
71
|
+
# Default: 300
|
72
|
+
#
|
73
|
+
# max_code_lines_in_method
|
74
|
+
# The number of lines of code in a method to allow
|
75
|
+
# before tailor will warn you.
|
76
|
+
# Default: 30
|
77
|
+
#
|
78
|
+
# trailing_newlines The number of newlines that should be at the end of
|
79
|
+
# the file.
|
80
|
+
# Default: 1
|
81
|
+
#
|
82
|
+
Tailor.config do |config|
|
83
|
+
config.formatters <%= formatters %>
|
84
|
+
config.file_set '<%= file_list %>' do
|
85
|
+
<% style.each do |rule, value| %><%= rule %> <%= value %>
|
86
|
+
<% end %>
|
87
|
+
end
|
88
|
+
end
|
data/lib/tailor/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = '0.
|
1
|
+
class Tailor
|
2
|
+
VERSION = '1.0.0.alpha'
|
3
3
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
|
-
|
2
|
-
require '
|
3
|
-
require 'rspec'
|
1
|
+
require 'fakefs/spec_helpers'
|
2
|
+
require 'simplecov'
|
4
3
|
|
5
|
-
|
6
|
-
|
4
|
+
SimpleCov.start
|
5
|
+
|
6
|
+
RSpec.configure do |conf|
|
7
|
+
conf.include FakeFS::SpecHelpers
|
7
8
|
end
|
9
|
+
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'tailor/cli'
|
3
|
+
|
4
|
+
|
5
|
+
describe Tailor::CLI do
|
6
|
+
let(:args) { [] }
|
7
|
+
let(:options) { double "Options", show_config: false }
|
8
|
+
|
9
|
+
let(:config) do
|
10
|
+
double "Tailor::Configuration",
|
11
|
+
file_sets: nil, formatters: nil
|
12
|
+
end
|
13
|
+
|
14
|
+
before do
|
15
|
+
Tailor::Configuration.stub(:new).and_return config
|
16
|
+
Tailor::Critic.stub(:new)
|
17
|
+
Tailor::Reporter.stub(:new)
|
18
|
+
end
|
19
|
+
|
20
|
+
after do
|
21
|
+
Tailor::Configuration.unstub(:new)
|
22
|
+
end
|
23
|
+
|
24
|
+
subject { Tailor::CLI.new(args) }
|
25
|
+
|
26
|
+
describe "::run" do
|
27
|
+
it "creates an instance of Tailor::CLI and calls that object's #execute!" do
|
28
|
+
cli = double "Tailor::CLI"
|
29
|
+
cli.should_receive(:execute!)
|
30
|
+
Tailor::CLI.should_receive(:new).and_return cli
|
31
|
+
Tailor::CLI.run([])
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
describe "#initialize" do
|
36
|
+
let(:args) { ['last'] }
|
37
|
+
|
38
|
+
it "uses Options to parse the args" do
|
39
|
+
Tailor::Configuration.stub(:new).and_return config
|
40
|
+
Tailor::Critic.stub(:new)
|
41
|
+
Tailor::Reporter.stub(:new)
|
42
|
+
Tailor::CLI::Options.should_receive(:parse!).with(args).and_return options
|
43
|
+
|
44
|
+
Tailor::CLI.new(args)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "creates a new Configuration from the file/dir and options" do
|
48
|
+
Tailor::CLI::Options.stub(:parse!).and_return(options)
|
49
|
+
Tailor::Configuration.should_receive(:new).
|
50
|
+
with(args, options).and_return config
|
51
|
+
Tailor::Critic.stub(:new)
|
52
|
+
|
53
|
+
Tailor::CLI.new(args)
|
54
|
+
end
|
55
|
+
|
56
|
+
context "options.show_config is true" do
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
context "options.show_config is false" do
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "#execute!" do
|
67
|
+
let(:reporter) { double "Tailor::Reporter" }
|
68
|
+
let(:critic) { double "Tailor::Critic", problem_count: 0 }
|
69
|
+
|
70
|
+
before do
|
71
|
+
Tailor::Critic.stub(:new).and_return(critic)
|
72
|
+
Tailor::Reporter.stub(:new).and_return(reporter)
|
73
|
+
subject.instance_variable_set(:@critic, critic)
|
74
|
+
subject.instance_variable_set(:@reporter, reporter)
|
75
|
+
end
|
76
|
+
|
77
|
+
after do
|
78
|
+
Tailor::Critic.unstub(:new)
|
79
|
+
Tailor::Reporter.unstub(:new)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "calls @critic.critique and yields file problems and the label" do
|
83
|
+
problems_for_file = {}
|
84
|
+
label = :test
|
85
|
+
critic.stub(:problem_count).and_return 1
|
86
|
+
critic.stub(:problems)
|
87
|
+
critic.stub(:critique).and_yield(problems_for_file, label)
|
88
|
+
reporter.stub(:summary_report)
|
89
|
+
reporter.should_receive(:file_report).with(problems_for_file, label)
|
90
|
+
|
91
|
+
subject.execute!
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,147 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'tailor/configuration'
|
3
|
+
|
4
|
+
describe Tailor::Configuration do
|
5
|
+
before { Tailor::Logger.stub(:log) }
|
6
|
+
|
7
|
+
subject do
|
8
|
+
Tailor::Configuration.new('.')
|
9
|
+
end
|
10
|
+
|
11
|
+
describe "#formatters" do
|
12
|
+
context "param is nil" do
|
13
|
+
it "returns the pre-exisiting @formatters" do
|
14
|
+
subject.instance_variable_set(:@formatters, [:blah])
|
15
|
+
subject.formatters.should == [:blah]
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
context "param is some value" do
|
20
|
+
it "sets @formatters to that value" do
|
21
|
+
subject.formatters "blah"
|
22
|
+
subject.instance_variable_get(:@formatters).should == ["blah"]
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
describe "#file_set" do
|
28
|
+
before do
|
29
|
+
subject.instance_variable_set(:@file_sets, {})
|
30
|
+
end
|
31
|
+
|
32
|
+
it "adds the set of stuff to @file_sets" do
|
33
|
+
subject.file_set(:bobo) do
|
34
|
+
trailing_newlines 2
|
35
|
+
end
|
36
|
+
|
37
|
+
subject.instance_variable_get(:@file_sets).should == {
|
38
|
+
bobo: {
|
39
|
+
file_list: [],
|
40
|
+
style: {
|
41
|
+
:allow_camel_case_methods=>false,
|
42
|
+
:allow_hard_tabs=>false,
|
43
|
+
:allow_screaming_snake_case_classes=>false,
|
44
|
+
:allow_trailing_line_spaces=>false,
|
45
|
+
:indentation_spaces=>2,
|
46
|
+
:max_code_lines_in_class=>300,
|
47
|
+
:max_code_lines_in_method=>30,
|
48
|
+
:max_line_length=>80,
|
49
|
+
:spaces_after_comma=>1,
|
50
|
+
:spaces_before_comma=>0,
|
51
|
+
:spaces_before_lbrace=>1,
|
52
|
+
:spaces_after_lbrace=>1,
|
53
|
+
:spaces_before_rbrace=>1,
|
54
|
+
:spaces_in_empty_braces=>0,
|
55
|
+
:spaces_after_lbracket=>0,
|
56
|
+
:spaces_before_rbracket=>0,
|
57
|
+
:spaces_after_lparen=>0,
|
58
|
+
:spaces_before_rparen=>0,
|
59
|
+
:trailing_newlines=>2
|
60
|
+
}
|
61
|
+
}
|
62
|
+
}
|
63
|
+
end
|
64
|
+
|
65
|
+
context "first param is nil" do
|
66
|
+
it "uses :default as the label" do
|
67
|
+
subject.file_set
|
68
|
+
subject.instance_variable_get(:@file_sets).should include(:default)
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
|
73
|
+
describe "#confg_file" do
|
74
|
+
context "@config_file is already set" do
|
75
|
+
it "returns @config_file" do
|
76
|
+
subject.instance_variable_set(:@config_file, 'pants')
|
77
|
+
subject.config_file
|
78
|
+
subject.instance_variable_get(:@config_file).should == 'pants'
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
context "@config_file is nil" do
|
83
|
+
it "returns DEFAULT_RC_FILE" do
|
84
|
+
subject.config_file
|
85
|
+
subject.instance_variable_get(:@config_file).should ==
|
86
|
+
Tailor::Configuration::DEFAULT_RC_FILE
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#file_list" do
|
92
|
+
before do
|
93
|
+
FileUtils.mkdir_p 'one/two'
|
94
|
+
File.new('one/two/three.rb', 'w') { |f| f.write "stuff" }
|
95
|
+
end
|
96
|
+
|
97
|
+
context "glob is an Array" do
|
98
|
+
context "the Array has files" do
|
99
|
+
it "returns all files in the glob" do
|
100
|
+
results = subject.file_list(['one/two/three.rb'])
|
101
|
+
results.last.should match /one\/two\/three.rb/
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
context "the Array has a directory" do
|
106
|
+
context "the directory has files" do
|
107
|
+
it "returns all files in the directory" do
|
108
|
+
results = subject.file_list(['.'])
|
109
|
+
results.last.should match /one\/two\/three.rb/
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context "the directory is empty" do
|
114
|
+
before do
|
115
|
+
FileUtils.mkdir 'empty'
|
116
|
+
FileUtils.rm_rf 'one'
|
117
|
+
end
|
118
|
+
|
119
|
+
it "returns an empty Array" do
|
120
|
+
results = subject.file_list(['.'])
|
121
|
+
results.should == []
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
context "glob is a glob" do
|
128
|
+
it "returns all files in the glob" do
|
129
|
+
results = subject.file_list('one/**/*.rb')
|
130
|
+
results.last.should match /one\/two\/three.rb/
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
context "glob is a directory" do
|
135
|
+
it "returns all files in the glob" do
|
136
|
+
results = subject.file_list('one')
|
137
|
+
results.last.should match /one\/two\/three.rb/
|
138
|
+
end
|
139
|
+
end
|
140
|
+
|
141
|
+
context "glob is a file" do
|
142
|
+
it "returns all files in the glob" do
|
143
|
+
subject.file_list('one/two/three.rb').last.should match /one\/two\/three.rb/
|
144
|
+
end
|
145
|
+
end
|
146
|
+
end
|
147
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
require_relative '../spec_helper'
|
2
|
+
require 'tailor/critic'
|
3
|
+
|
4
|
+
describe Tailor::Critic do
|
5
|
+
let(:configuration) { } # empty on purpose
|
6
|
+
before { subject.stub(:log) }
|
7
|
+
subject { Tailor::Critic.new(configuration) }
|
8
|
+
|
9
|
+
describe "#check_file" do
|
10
|
+
let(:lexer) { double "Lexer" }
|
11
|
+
let(:ruler) { double "Ruler" }
|
12
|
+
let(:file_name) { "this_file.rb" }
|
13
|
+
|
14
|
+
before do
|
15
|
+
subject.stub(:init_rulers)
|
16
|
+
end
|
17
|
+
|
18
|
+
it "lexes the file" do
|
19
|
+
lexer.should_receive(:lex)
|
20
|
+
lexer.stub(:check_added_newline)
|
21
|
+
Tailor::Lexer.should_receive(:new).with(file_name).and_return lexer
|
22
|
+
subject.stub_chain(:problems, :[]=)
|
23
|
+
subject.stub_chain(:problems, :[])
|
24
|
+
|
25
|
+
subject.check_file(file_name, 1)
|
26
|
+
end
|
27
|
+
|
28
|
+
it "adds problems for the file to the main list of problems" do
|
29
|
+
lexer.stub(:lex)
|
30
|
+
lexer.stub(:check_added_newline)
|
31
|
+
Tailor::Lexer.stub(:new).and_return lexer
|
32
|
+
subject.problems.should_receive(:[]=).with(file_name, [])
|
33
|
+
|
34
|
+
subject.check_file(file_name, 1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe "#problems" do
|
39
|
+
specify { subject.problems.should be_a Hash }
|
40
|
+
specify { subject.problems.should be_empty }
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "#problem_count" do
|
44
|
+
context "#problems is empty" do
|
45
|
+
it "returns 0" do
|
46
|
+
subject.instance_variable_set(:@problems, {})
|
47
|
+
subject.problem_count.should == 0
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
context "#problems contains valid values" do
|
52
|
+
it "adds the number of each problem together" do
|
53
|
+
probs = {
|
54
|
+
one: { type: :indentation, line: 1, message: "" },
|
55
|
+
two: { type: :indentation, line: 2, message: "" },
|
56
|
+
thre: { type: :indentation, line: 27, message: "" }
|
57
|
+
}
|
58
|
+
subject.instance_variable_set(:@problems, probs)
|
59
|
+
subject.problem_count.should == 3
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|