tailor 1.4.0 → 1.4.1
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.
- checksums.yaml +4 -4
- data/.travis.yml +2 -3
- data/Gemfile.lock +39 -31
- data/History.md +220 -207
- data/README.md +58 -45
- data/features/step_definitions/indentation_steps.rb +1 -1
- data/lib/tailor/reporter.rb +19 -7
- data/lib/tailor/rulers/spaces_before_lbrace_ruler.rb +0 -1
- data/lib/tailor/rulers/spaces_before_rbrace_ruler.rb +0 -1
- data/lib/tailor/rulers/spaces_in_empty_braces_ruler.rb +0 -1
- data/lib/tailor/version.rb +1 -1
- data/spec/functional/conditional_parentheses_spec.rb +1 -1
- data/spec/functional/conditional_spacing_spec.rb +1 -1
- data/spec/functional/configuration_spec.rb +61 -52
- data/spec/functional/horizontal_spacing/braces_spec.rb +134 -134
- data/spec/functional/horizontal_spacing/brackets_spec.rb +34 -36
- data/spec/functional/horizontal_spacing/comma_spacing_spec.rb +25 -27
- data/spec/functional/horizontal_spacing/hard_tabs_spec.rb +42 -42
- data/spec/functional/horizontal_spacing/long_lines_spec.rb +15 -17
- data/spec/functional/horizontal_spacing/long_methods_spec.rb +4 -4
- data/spec/functional/horizontal_spacing/parens_spec.rb +45 -45
- data/spec/functional/horizontal_spacing/trailing_whitespace_spec.rb +7 -8
- data/spec/functional/horizontal_spacing_spec.rb +10 -11
- data/spec/functional/indentation_spacing/argument_alignment_spec.rb +33 -62
- data/spec/functional/indentation_spacing/bad_indentation_spec.rb +176 -179
- data/spec/functional/indentation_spacing_spec.rb +13 -14
- data/spec/functional/naming/camel_case_methods_spec.rb +4 -6
- data/spec/functional/naming/screaming_snake_case_classes_spec.rb +28 -31
- data/spec/functional/naming_spec.rb +3 -3
- data/spec/functional/rake_task_spec.rb +9 -28
- data/spec/functional/string_interpolation_spec.rb +1 -1
- data/spec/functional/string_quoting_spec.rb +1 -1
- data/spec/functional/vertical_spacing/class_length_spec.rb +4 -6
- data/spec/functional/vertical_spacing/method_length_spec.rb +15 -17
- data/spec/functional/vertical_spacing_spec.rb +3 -3
- data/spec/spec_helper.rb +2 -0
- data/spec/support/argument_alignment_cases.rb +32 -32
- data/spec/support/conditional_parentheses_cases.rb +26 -26
- data/spec/support/good_indentation_cases.rb +205 -205
- data/spec/support/horizontal_spacing_cases.rb +53 -54
- data/spec/support/line_indentation_cases.rb +20 -20
- data/spec/support/naming_cases.rb +12 -12
- data/spec/support/string_interpolation_cases.rb +17 -17
- data/spec/support/string_quoting_cases.rb +12 -12
- data/spec/support/vertical_spacing_cases.rb +8 -8
- data/spec/unit/tailor/cli/options_spec.rb +20 -14
- data/spec/unit/tailor/cli_spec.rb +29 -43
- data/spec/unit/tailor/composite_observable_spec.rb +1 -1
- data/spec/unit/tailor/configuration/file_set_spec.rb +10 -11
- data/spec/unit/tailor/configuration/style_spec.rb +41 -42
- data/spec/unit/tailor/configuration_spec.rb +14 -12
- data/spec/unit/tailor/formatter_spec.rb +3 -3
- data/spec/unit/tailor/formatters/yaml_spec.rb +12 -13
- data/spec/unit/tailor/lexed_line_spec.rb +67 -69
- data/spec/unit/tailor/lexer/token_spec.rb +7 -7
- data/spec/unit/tailor/lexer_spec.rb +24 -24
- data/spec/unit/tailor/problem_spec.rb +12 -12
- data/spec/unit/tailor/reporter_spec.rb +8 -9
- data/spec/unit/tailor/ruler_spec.rb +10 -10
- data/spec/unit/tailor/rulers/indentation_spaces_ruler/indentation_manager_spec.rb +90 -86
- data/spec/unit/tailor/rulers/indentation_spaces_ruler_spec.rb +13 -13
- data/spec/unit/tailor/rulers/spaces_after_comma_ruler_spec.rb +4 -4
- data/spec/unit/tailor/rulers/spaces_after_lbrace_ruler_spec.rb +19 -19
- data/spec/unit/tailor/rulers/spaces_before_lbrace_ruler_spec.rb +6 -6
- data/spec/unit/tailor/rulers/spaces_before_rbrace_ruler_spec.rb +6 -6
- data/spec/unit/tailor/rulers_spec.rb +1 -1
- data/spec/unit/tailor/version_spec.rb +1 -2
- data/spec/unit/tailor_spec.rb +2 -2
- data/tailor.gemspec +3 -3
- metadata +20 -6
@@ -3,7 +3,7 @@ require 'tailor/lexer/token'
|
|
3
3
|
|
4
4
|
describe Tailor::Lexer::Token do
|
5
5
|
before do
|
6
|
-
Tailor::Logger.
|
6
|
+
allow(Tailor::Logger).to receive(:log)
|
7
7
|
end
|
8
8
|
|
9
9
|
describe '#modifier_keyword?' do
|
@@ -14,24 +14,24 @@ describe Tailor::Lexer::Token do
|
|
14
14
|
|
15
15
|
context 'the current line has a keyword that is also a modifier' do
|
16
16
|
context 'the keyword is acting as a modifier' do
|
17
|
-
let!(:full_line_of_text) { %
|
17
|
+
let!(:full_line_of_text) { %(puts "hi" if true == true) }
|
18
18
|
|
19
19
|
it 'returns true' do
|
20
|
-
subject.modifier_keyword
|
20
|
+
expect(subject.modifier_keyword?).to eq true
|
21
21
|
end
|
22
22
|
end
|
23
23
|
|
24
24
|
context 'they keyword is NOT acting as a modifier' do
|
25
|
-
let!(:full_line_of_text) { %
|
25
|
+
let!(:full_line_of_text) { %(if true == true; puts "hi"; end) }
|
26
26
|
|
27
27
|
it 'returns false' do
|
28
|
-
subject.modifier_keyword
|
28
|
+
expect(subject.modifier_keyword?).to eq false
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
33
|
context 'the current line does not have a keyword' do
|
34
|
-
let!(:full_line_of_text) { %
|
34
|
+
let!(:full_line_of_text) { %(puts true) }
|
35
35
|
|
36
36
|
subject do
|
37
37
|
options = { full_line_of_text: full_line_of_text }
|
@@ -39,7 +39,7 @@ describe Tailor::Lexer::Token do
|
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'returns false' do
|
42
|
-
subject.modifier_keyword
|
42
|
+
expect(subject.modifier_keyword?).to eq false
|
43
43
|
end
|
44
44
|
end
|
45
45
|
end
|
@@ -9,13 +9,13 @@ describe Tailor::Lexer do
|
|
9
9
|
subject do
|
10
10
|
r = Tailor::Lexer.new(file_text)
|
11
11
|
r.instance_variable_set(:@buf, [])
|
12
|
-
r.
|
12
|
+
allow(r).to receive(:log)
|
13
13
|
|
14
14
|
r
|
15
15
|
end
|
16
16
|
|
17
17
|
before do
|
18
|
-
Tailor::Lexer.
|
18
|
+
allow_any_instance_of(Tailor::Lexer).to receive(:ensure_trailing_newline).
|
19
19
|
and_return(file_text)
|
20
20
|
end
|
21
21
|
|
@@ -29,8 +29,8 @@ describe Tailor::Lexer do
|
|
29
29
|
|
30
30
|
it 'opens and reads the file by the name passed in' do
|
31
31
|
file = double 'File'
|
32
|
-
file.
|
33
|
-
File.
|
32
|
+
expect(file).to receive(:read).and_return file_text
|
33
|
+
expect(File).to receive(:open).with('test', 'r').and_return file
|
34
34
|
Tailor::Lexer.new(file_name)
|
35
35
|
end
|
36
36
|
end
|
@@ -39,7 +39,7 @@ describe Tailor::Lexer do
|
|
39
39
|
let(:text) { 'some text' }
|
40
40
|
|
41
41
|
it 'does not try to open a file' do
|
42
|
-
File.
|
42
|
+
expect(File).to_not receive(:open)
|
43
43
|
Tailor::Lexer.new(text)
|
44
44
|
end
|
45
45
|
end
|
@@ -48,7 +48,7 @@ describe Tailor::Lexer do
|
|
48
48
|
describe '#on_sp' do
|
49
49
|
context 'token is a backslash then newline' do
|
50
50
|
it 'calls #notify_ignored_nl_observers' do
|
51
|
-
subject.
|
51
|
+
expect(subject).to receive(:notify_ignored_nl_observers)
|
52
52
|
subject.on_sp("\\\n")
|
53
53
|
end
|
54
54
|
end
|
@@ -57,43 +57,43 @@ describe Tailor::Lexer do
|
|
57
57
|
describe '#current_line_of_text' do
|
58
58
|
before do
|
59
59
|
subject.instance_variable_set(:@file_text, file_text)
|
60
|
-
subject.
|
60
|
+
allow(subject).to receive(:lineno).and_return 1
|
61
61
|
end
|
62
62
|
|
63
|
-
context
|
63
|
+
context '@file_text is 1 line with 0 \ns' do
|
64
64
|
let(:file_text) { "puts 'code'" }
|
65
65
|
|
66
66
|
it 'returns the line' do
|
67
|
-
subject.current_line_of_text.
|
67
|
+
expect(subject.current_line_of_text).to eq file_text
|
68
68
|
end
|
69
69
|
end
|
70
70
|
|
71
|
-
context
|
71
|
+
context '@file_text is 1 empty line with 0 \ns' do
|
72
72
|
let(:file_text) { '' }
|
73
73
|
|
74
74
|
it 'returns the an empty string' do
|
75
|
-
subject.current_line_of_text.
|
75
|
+
expect(subject.current_line_of_text).to eq file_text
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
-
context
|
79
|
+
context '@file_text is 1 empty line with 1 \n' do
|
80
80
|
let(:file_text) { "\n" }
|
81
81
|
|
82
82
|
it 'returns an empty string' do
|
83
|
-
subject.current_line_of_text.
|
83
|
+
expect(subject.current_line_of_text).to eq ''
|
84
84
|
end
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
88
88
|
describe '#count_trailing_newlines' do
|
89
|
-
context
|
89
|
+
context 'text contains 0 trailing \n' do
|
90
90
|
let(:text) { 'text' }
|
91
|
-
specify { subject.count_trailing_newlines(text).
|
91
|
+
specify { expect(subject.count_trailing_newlines(text)).to be_zero }
|
92
92
|
end
|
93
93
|
|
94
|
-
context
|
94
|
+
context 'text contains 1 trailing \n' do
|
95
95
|
let(:text) { "text\n" }
|
96
|
-
specify { subject.count_trailing_newlines(text).
|
96
|
+
specify { expect(subject.count_trailing_newlines(text)).to eq 1 }
|
97
97
|
end
|
98
98
|
end
|
99
99
|
|
@@ -106,11 +106,11 @@ describe Tailor::Lexer do
|
|
106
106
|
let!(:text) { "text\n" }
|
107
107
|
|
108
108
|
before do
|
109
|
-
subject.
|
109
|
+
allow(subject).to receive(:count_trailing_newlines).and_return 1
|
110
110
|
end
|
111
111
|
|
112
112
|
it 'does not alter the text' do
|
113
|
-
subject.ensure_trailing_newline(text).
|
113
|
+
expect(subject.ensure_trailing_newline(text)).to eq text
|
114
114
|
end
|
115
115
|
end
|
116
116
|
|
@@ -118,15 +118,15 @@ describe Tailor::Lexer do
|
|
118
118
|
let!(:text) { 'text' }
|
119
119
|
|
120
120
|
it 'adds a newline at the end' do
|
121
|
-
subject.ensure_trailing_newline(text).
|
121
|
+
expect(subject.ensure_trailing_newline(text)).to eq(text + "\n")
|
122
122
|
end
|
123
123
|
end
|
124
124
|
end
|
125
125
|
|
126
126
|
describe '#sub_line_ending_backslashes' do
|
127
127
|
let!(:text) do
|
128
|
-
%
|
129
|
-
'something'
|
128
|
+
%(command \\
|
129
|
+
'something')
|
130
130
|
end
|
131
131
|
|
132
132
|
before do
|
@@ -136,8 +136,8 @@ describe Tailor::Lexer do
|
|
136
136
|
end
|
137
137
|
|
138
138
|
it 'replaces all line-ending backslashes with a comment' do
|
139
|
-
subject.sub_publicly(text).
|
140
|
-
'something'
|
139
|
+
expect(subject.sub_publicly(text)).to eq %(command # TAILOR REMOVED BACKSLASH
|
140
|
+
'something')
|
141
141
|
end
|
142
142
|
end
|
143
143
|
end
|
@@ -3,7 +3,7 @@ require 'tailor/problem'
|
|
3
3
|
|
4
4
|
describe Tailor::Problem do
|
5
5
|
before do
|
6
|
-
Tailor::Problem.
|
6
|
+
allow_any_instance_of(Tailor::Problem).to receive(:log)
|
7
7
|
end
|
8
8
|
|
9
9
|
let(:lineno) { 10 }
|
@@ -11,32 +11,32 @@ describe Tailor::Problem do
|
|
11
11
|
|
12
12
|
describe '#set_values' do
|
13
13
|
before do
|
14
|
-
Tailor::Problem.
|
14
|
+
allow_any_instance_of(Tailor::Problem).to receive(:message)
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'sets self[:type] to the type param' do
|
18
|
-
Tailor::Problem.new(:test, lineno, column, '', :b).
|
19
|
-
|
18
|
+
expect(Tailor::Problem.new(:test, lineno, column, '', :b)).
|
19
|
+
to include(type: :test)
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'sets self[:line] to the lineno param' do
|
23
|
-
Tailor::Problem.new(:test, lineno, column, '', :c).
|
24
|
-
|
23
|
+
expect(Tailor::Problem.new(:test, lineno, column, '', :c)).
|
24
|
+
to include(line: lineno)
|
25
25
|
end
|
26
26
|
|
27
27
|
it 'sets self[:column] to the column param' do
|
28
|
-
Tailor::Problem.new(:test, lineno, column, '', :d).
|
29
|
-
|
28
|
+
expect(Tailor::Problem.new(:test, lineno, column, '', :d)).
|
29
|
+
to include(column: column)
|
30
30
|
end
|
31
31
|
|
32
32
|
it 'sets self[:message] to the message param' do
|
33
|
-
Tailor::Problem.new(:test, lineno, column, 'test', :d).
|
34
|
-
|
33
|
+
expect(Tailor::Problem.new(:test, lineno, column, 'test', :d)).
|
34
|
+
to include(message: 'test')
|
35
35
|
end
|
36
36
|
|
37
37
|
it 'sets self[:level] to the level param' do
|
38
|
-
Tailor::Problem.new(:test, lineno, column, 'test', :d).
|
39
|
-
|
38
|
+
expect(Tailor::Problem.new(:test, lineno, column, 'test', :d)).
|
39
|
+
to include(level: :d)
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -8,7 +8,7 @@ describe Tailor::Reporter do
|
|
8
8
|
|
9
9
|
it 'creates a new Formatter object of the type passed in' do
|
10
10
|
reporter = Tailor::Reporter.new(formats)
|
11
|
-
reporter.formatters.first.
|
11
|
+
expect(reporter.formatters.first).to be_a Tailor::Formatters::Text
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -26,7 +26,7 @@ describe Tailor::Reporter do
|
|
26
26
|
|
27
27
|
it 'calls #file_report on each @formatters' do
|
28
28
|
label = :some_label
|
29
|
-
formatter.
|
29
|
+
expect(formatter).to receive(:file_report).with(file_problems, label)
|
30
30
|
|
31
31
|
subject.file_report(file_problems, label)
|
32
32
|
end
|
@@ -45,8 +45,8 @@ describe Tailor::Reporter do
|
|
45
45
|
|
46
46
|
context 'without output file' do
|
47
47
|
it 'calls #file_report on each @formatters' do
|
48
|
-
formatter.
|
49
|
-
File.
|
48
|
+
expect(formatter).to receive(:summary_report).with(all_problems)
|
49
|
+
expect(File).to_not receive(:open)
|
50
50
|
|
51
51
|
subject.summary_report(all_problems)
|
52
52
|
end
|
@@ -55,18 +55,17 @@ describe Tailor::Reporter do
|
|
55
55
|
context 'with output file' do
|
56
56
|
let(:output_file) { 'output.whatever' }
|
57
57
|
before do
|
58
|
-
formatter.
|
58
|
+
expect(formatter).to receive(:respond_to?).with(:accepts_output_file).
|
59
59
|
and_return(true)
|
60
|
-
formatter.
|
60
|
+
expect(formatter).to receive(:accepts_output_file).and_return(true)
|
61
61
|
end
|
62
62
|
|
63
63
|
it 'calls #summary_report on each @formatters' do
|
64
|
-
formatter.
|
65
|
-
File.
|
64
|
+
expect(formatter).to receive(:summary_report).with(all_problems)
|
65
|
+
expect(File).to receive(:open).with(output_file, 'w')
|
66
66
|
|
67
67
|
subject.summary_report(all_problems, output_file: output_file)
|
68
68
|
end
|
69
69
|
end
|
70
|
-
|
71
70
|
end
|
72
71
|
end
|
@@ -2,54 +2,54 @@ require 'spec_helper'
|
|
2
2
|
require 'tailor/ruler'
|
3
3
|
|
4
4
|
describe Tailor::Ruler do
|
5
|
-
before { Tailor::Logger.
|
5
|
+
before { allow(Tailor::Logger).to receive(:log) }
|
6
6
|
|
7
7
|
describe '#add_child_ruler' do
|
8
8
|
it 'adds new rulers to @child_rulers' do
|
9
9
|
ruler = double 'Ruler'
|
10
10
|
subject.add_child_ruler(ruler)
|
11
|
-
subject.instance_variable_get(:@child_rulers).first.
|
11
|
+
expect(subject.instance_variable_get(:@child_rulers).first).to eq ruler
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
15
|
describe '#problems' do
|
16
16
|
context 'no child_rulers' do
|
17
17
|
context '@problems is empty' do
|
18
|
-
specify { subject.problems.
|
18
|
+
specify { expect(subject.problems).to be_empty }
|
19
19
|
end
|
20
20
|
|
21
21
|
context '@problems.size is 1' do
|
22
22
|
before do
|
23
23
|
problem = double 'Problem'
|
24
|
-
problem.
|
24
|
+
expect(problem).to receive(:[]).with :line
|
25
25
|
subject.instance_variable_set(:@problems, [problem])
|
26
26
|
end
|
27
27
|
|
28
|
-
specify { subject.problems.size.
|
28
|
+
specify { expect(subject.problems.size).to eq 1 }
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
32
|
context 'child_rulers have problems' do
|
33
33
|
before do
|
34
34
|
problem = double 'Problem'
|
35
|
-
problem.
|
35
|
+
expect(problem).to receive(:[]).with :line
|
36
36
|
child_ruler = double 'Ruler'
|
37
|
-
child_ruler.
|
37
|
+
allow(child_ruler).to receive(:problems).and_return([problem])
|
38
38
|
subject.instance_variable_set(:@child_rulers, [child_ruler])
|
39
39
|
end
|
40
40
|
|
41
41
|
context '@problems is empty' do
|
42
|
-
specify { subject.problems.size.
|
42
|
+
specify { expect(subject.problems.size).to eq 1 }
|
43
43
|
end
|
44
44
|
|
45
45
|
context '@problems.size is 1' do
|
46
46
|
before do
|
47
47
|
problem = double 'Problem'
|
48
|
-
problem.
|
48
|
+
expect(problem).to receive(:[]).with :line
|
49
49
|
subject.instance_variable_set(:@problems, [problem])
|
50
50
|
end
|
51
51
|
|
52
|
-
specify { subject.problems.size.
|
52
|
+
specify { expect(subject.problems.size).to eq 2 }
|
53
53
|
end
|
54
54
|
end
|
55
55
|
end
|
@@ -2,13 +2,12 @@ require 'ripper'
|
|
2
2
|
require 'spec_helper'
|
3
3
|
require 'tailor/rulers/indentation_spaces_ruler/indentation_manager'
|
4
4
|
|
5
|
-
|
6
5
|
describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
7
6
|
let!(:spaces) { 5 }
|
8
7
|
let!(:lexed_line) { double 'LexedLine' }
|
9
8
|
|
10
9
|
before do
|
11
|
-
Tailor::Logger.
|
10
|
+
allow(Tailor::Logger).to receive(:log)
|
12
11
|
subject.instance_variable_set(:@spaces, spaces)
|
13
12
|
end
|
14
13
|
|
@@ -18,8 +17,8 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
18
17
|
|
19
18
|
describe '#should_be_at' do
|
20
19
|
it 'returns @proper[:this_line]' do
|
21
|
-
subject.instance_variable_set(:@proper,
|
22
|
-
subject.should_be_at.
|
20
|
+
subject.instance_variable_set(:@proper, this_line: 321)
|
21
|
+
expect(subject.should_be_at).to eq 321
|
23
22
|
end
|
24
23
|
end
|
25
24
|
|
@@ -27,66 +26,61 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
27
26
|
let!(:spaces) { 27 }
|
28
27
|
|
29
28
|
context '#started? is true' do
|
30
|
-
before { subject.
|
29
|
+
before { allow(subject).to receive(:started?).and_return true }
|
31
30
|
|
32
31
|
context '@proper[:this_line] gets decremented < 0' do
|
33
32
|
it 'sets @proper[:this_line] to 0' do
|
34
|
-
subject.instance_variable_set(:@proper,
|
35
|
-
this_line: 0, next_line: 0
|
36
|
-
})
|
33
|
+
subject.instance_variable_set(:@proper, this_line: 0, next_line: 0)
|
37
34
|
|
38
35
|
subject.decrease_this_line
|
39
36
|
proper_indentation = subject.instance_variable_get(:@proper)
|
40
|
-
proper_indentation[:this_line].
|
37
|
+
expect(proper_indentation[:this_line]).to be_zero
|
41
38
|
end
|
42
39
|
end
|
43
40
|
|
44
41
|
context '@proper[:this_line] NOT decremented < 0' do
|
45
42
|
it 'decrements @proper[:this_line] by @spaces' do
|
46
|
-
subject.instance_variable_set(:@proper,
|
47
|
-
this_line: 28, next_line: 28
|
48
|
-
})
|
43
|
+
subject.instance_variable_set(:@proper, this_line: 28, next_line: 28)
|
49
44
|
subject.decrease_this_line
|
50
45
|
|
51
46
|
proper_indentation = subject.instance_variable_get(:@proper)
|
52
|
-
proper_indentation[:this_line].
|
47
|
+
expect(proper_indentation[:this_line]).to eq 1
|
53
48
|
end
|
54
49
|
end
|
55
50
|
end
|
56
51
|
|
57
52
|
context '#started? is false' do
|
58
|
-
before { subject.
|
53
|
+
before { allow(subject).to receive(:started?).and_return false }
|
59
54
|
|
60
55
|
it 'does not decrement @proper[:this_line]' do
|
61
|
-
subject.instance_variable_set(:@proper,
|
62
|
-
this_line: 28, next_line: 28
|
63
|
-
})
|
56
|
+
subject.instance_variable_set(:@proper, this_line: 28, next_line: 28)
|
64
57
|
subject.decrease_this_line
|
65
58
|
|
66
59
|
proper_indentation = subject.instance_variable_get(:@proper)
|
67
|
-
proper_indentation[:this_line].
|
60
|
+
expect(proper_indentation[:this_line]).to eq 28
|
68
61
|
end
|
69
62
|
end
|
70
63
|
end
|
71
64
|
|
72
65
|
describe '#transition_lines' do
|
73
66
|
context '#started? is true' do
|
74
|
-
before { subject.
|
67
|
+
before { allow(subject).to receive(:started?).and_return true }
|
75
68
|
|
76
69
|
it 'sets @proper[:this_line] to @proper[:next_line]' do
|
77
|
-
subject.instance_variable_set(:@proper,
|
70
|
+
subject.instance_variable_set(:@proper, next_line: 33)
|
78
71
|
|
79
|
-
expect { subject.transition_lines }.to change{subject.should_be_at}.
|
72
|
+
expect { subject.transition_lines }.to change { subject.should_be_at }.
|
80
73
|
from(subject.should_be_at).to(33)
|
81
74
|
end
|
82
75
|
end
|
83
76
|
|
84
77
|
context '#started? is false' do
|
85
|
-
before { subject.
|
78
|
+
before { allow(subject).to receive(:started?).and_return false }
|
86
79
|
|
87
80
|
it 'sets @proper[:this_line] to @proper[:next_line]' do
|
88
|
-
subject.instance_variable_set(:@proper,
|
89
|
-
expect { subject.transition_lines }.
|
81
|
+
subject.instance_variable_set(:@proper, next_line: 33)
|
82
|
+
expect { subject.transition_lines }.
|
83
|
+
to_not change { subject.should_be_at }
|
90
84
|
end
|
91
85
|
end
|
92
86
|
end
|
@@ -95,7 +89,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
95
89
|
it 'sets @do_measurement to true' do
|
96
90
|
subject.instance_variable_set(:@do_measurement, false)
|
97
91
|
subject.start
|
98
|
-
subject.instance_variable_get(:@do_measurement).
|
92
|
+
expect(subject.instance_variable_get(:@do_measurement)).to eq true
|
99
93
|
end
|
100
94
|
end
|
101
95
|
|
@@ -103,38 +97,39 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
103
97
|
it 'sets @do_measurement to false' do
|
104
98
|
subject.instance_variable_set(:@do_measurement, true)
|
105
99
|
subject.stop
|
106
|
-
subject.instance_variable_get(:@do_measurement).
|
100
|
+
expect(subject.instance_variable_get(:@do_measurement)).to eq false
|
107
101
|
end
|
108
102
|
end
|
109
103
|
|
110
104
|
describe '#started?' do
|
111
105
|
context '@do_measurement is true' do
|
112
106
|
before { subject.instance_variable_set(:@do_measurement, true) }
|
113
|
-
specify { subject.
|
107
|
+
specify { expect(subject).to be_started }
|
114
108
|
end
|
115
109
|
|
116
110
|
context '@do_measurement is false' do
|
117
111
|
before { subject.instance_variable_set(:@do_measurement, false) }
|
118
|
-
specify { subject.
|
112
|
+
specify { expect(subject).to_not be_started }
|
119
113
|
end
|
120
114
|
end
|
121
115
|
|
122
116
|
describe '#update_actual_indentation' do
|
123
117
|
context 'lexed_line_output.end_of_multi_line_string? is true' do
|
124
118
|
before do
|
125
|
-
lexed_line.
|
119
|
+
allow(lexed_line).to receive(:end_of_multi_line_string?).and_return true
|
126
120
|
end
|
127
121
|
|
128
122
|
it 'returns without updating @actual_indentation' do
|
129
|
-
lexed_line.
|
123
|
+
expect(lexed_line).to_not receive(:first_non_space_element)
|
130
124
|
subject.update_actual_indentation(lexed_line)
|
131
125
|
end
|
132
126
|
end
|
133
127
|
|
134
128
|
context 'lexed_line_output.end_of_multi_line_string? is false' do
|
135
129
|
before do
|
136
|
-
lexed_line.
|
137
|
-
|
130
|
+
allow(lexed_line).to receive(:end_of_multi_line_string?).
|
131
|
+
and_return false
|
132
|
+
allow(lexed_line).to receive(:first_non_space_element).
|
138
133
|
and_return first_non_space_element
|
139
134
|
end
|
140
135
|
|
@@ -145,7 +140,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
145
140
|
|
146
141
|
it 'returns the column value of that element' do
|
147
142
|
subject.update_actual_indentation(lexed_line)
|
148
|
-
subject.instance_variable_get(:@actual_indentation).
|
143
|
+
expect(subject.instance_variable_get(:@actual_indentation)).to eq 5
|
149
144
|
end
|
150
145
|
end
|
151
146
|
|
@@ -156,7 +151,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
156
151
|
|
157
152
|
it 'returns the column value of that element' do
|
158
153
|
subject.update_actual_indentation(lexed_line)
|
159
|
-
subject.instance_variable_get(:@actual_indentation).
|
154
|
+
expect(subject.instance_variable_get(:@actual_indentation)).to be_zero
|
160
155
|
end
|
161
156
|
end
|
162
157
|
end
|
@@ -165,86 +160,91 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
165
160
|
describe '#line_ends_with_single_token_indenter?' do
|
166
161
|
context 'lexed_line does not end with an op, comma, period, label, or kw' do
|
167
162
|
before do
|
168
|
-
lexed_line.
|
169
|
-
lexed_line.
|
170
|
-
lexed_line.
|
171
|
-
lexed_line.
|
172
|
-
lexed_line.
|
163
|
+
allow(lexed_line).to receive(:ends_with_op?).and_return false
|
164
|
+
allow(lexed_line).to receive(:ends_with_comma?).and_return false
|
165
|
+
allow(lexed_line).to receive(:ends_with_period?).and_return false
|
166
|
+
allow(lexed_line).to receive(:ends_with_label?).and_return false
|
167
|
+
allow(lexed_line).to receive(:ends_with_modifier_kw?).and_return false
|
173
168
|
end
|
174
169
|
|
175
170
|
specify do
|
176
|
-
subject.line_ends_with_single_token_indenter?(lexed_line).
|
177
|
-
|
171
|
+
expect(subject.line_ends_with_single_token_indenter?(lexed_line)).
|
172
|
+
to eq false
|
178
173
|
end
|
179
174
|
end
|
180
175
|
|
181
176
|
context 'lexed_line ends with an op' do
|
182
177
|
before do
|
183
|
-
lexed_line.
|
184
|
-
lexed_line.
|
185
|
-
lexed_line.
|
186
|
-
lexed_line.
|
187
|
-
lexed_line.
|
178
|
+
allow(lexed_line).to receive(:ends_with_op?).and_return true
|
179
|
+
allow(lexed_line).to receive(:ends_with_comma?).and_return false
|
180
|
+
allow(lexed_line).to receive(:ends_with_period?).and_return false
|
181
|
+
allow(lexed_line).to receive(:ends_with_label?).and_return false
|
182
|
+
allow(lexed_line).to receive(:ends_with_modifier_kw?).and_return false
|
188
183
|
end
|
189
184
|
|
190
185
|
specify do
|
191
|
-
subject.line_ends_with_single_token_indenter?(lexed_line).
|
186
|
+
expect(subject.line_ends_with_single_token_indenter?(lexed_line)).
|
187
|
+
to eq true
|
192
188
|
end
|
193
189
|
end
|
194
190
|
|
195
191
|
context 'lexed_line ends with a comma' do
|
196
192
|
before do
|
197
|
-
lexed_line.
|
198
|
-
lexed_line.
|
199
|
-
lexed_line.
|
200
|
-
lexed_line.
|
201
|
-
lexed_line.
|
193
|
+
allow(lexed_line).to receive(:ends_with_op?).and_return false
|
194
|
+
allow(lexed_line).to receive(:ends_with_comma?).and_return true
|
195
|
+
allow(lexed_line).to receive(:ends_with_period?).and_return false
|
196
|
+
allow(lexed_line).to receive(:ends_with_label?).and_return false
|
197
|
+
allow(lexed_line).to receive(:ends_with_modifier_kw?).and_return false
|
202
198
|
end
|
203
199
|
|
204
200
|
specify do
|
205
|
-
subject.line_ends_with_single_token_indenter?(lexed_line).
|
201
|
+
expect(subject.line_ends_with_single_token_indenter?(lexed_line)).
|
202
|
+
to eq true
|
206
203
|
end
|
207
204
|
end
|
208
205
|
|
209
206
|
context 'lexed_line ends with a period' do
|
210
207
|
before do
|
211
|
-
lexed_line.
|
212
|
-
lexed_line.
|
213
|
-
lexed_line.
|
214
|
-
lexed_line.
|
215
|
-
lexed_line.
|
208
|
+
allow(lexed_line).to receive(:ends_with_op?).and_return false
|
209
|
+
allow(lexed_line).to receive(:ends_with_comma?).and_return false
|
210
|
+
allow(lexed_line).to receive(:ends_with_period?).and_return true
|
211
|
+
allow(lexed_line).to receive(:ends_with_label?).and_return false
|
212
|
+
allow(lexed_line).to receive(:ends_with_modifier_kw?).and_return false
|
216
213
|
end
|
217
214
|
|
218
215
|
specify do
|
219
|
-
subject.line_ends_with_single_token_indenter?(lexed_line).
|
216
|
+
expect(subject.line_ends_with_single_token_indenter?(lexed_line)).
|
217
|
+
to eq true
|
220
218
|
end
|
221
219
|
end
|
222
220
|
|
223
221
|
context 'lexed_line ends with a label' do
|
224
222
|
before do
|
225
|
-
lexed_line.
|
226
|
-
lexed_line.
|
227
|
-
lexed_line.
|
228
|
-
lexed_line.
|
229
|
-
lexed_line.
|
223
|
+
allow(lexed_line).to receive(:ends_with_op?).and_return false
|
224
|
+
allow(lexed_line).to receive(:ends_with_comma?).and_return false
|
225
|
+
allow(lexed_line).to receive(:ends_with_period?).and_return false
|
226
|
+
allow(lexed_line).to receive(:ends_with_label?).and_return true
|
227
|
+
allow(lexed_line).to receive(:ends_with_modifier_kw?).and_return false
|
230
228
|
end
|
231
229
|
|
232
230
|
specify do
|
233
|
-
subject.line_ends_with_single_token_indenter?(lexed_line).
|
231
|
+
expect(subject.line_ends_with_single_token_indenter?(lexed_line)).
|
232
|
+
to eq true
|
234
233
|
end
|
235
234
|
end
|
236
235
|
|
237
236
|
context 'lexed_line ends with a modified kw' do
|
238
237
|
before do
|
239
|
-
lexed_line.
|
240
|
-
lexed_line.
|
241
|
-
lexed_line.
|
242
|
-
lexed_line.
|
243
|
-
lexed_line.
|
238
|
+
allow(lexed_line).to receive(:ends_with_op?).and_return false
|
239
|
+
allow(lexed_line).to receive(:ends_with_comma?).and_return false
|
240
|
+
allow(lexed_line).to receive(:ends_with_period?).and_return false
|
241
|
+
allow(lexed_line).to receive(:ends_with_label?).and_return false
|
242
|
+
allow(lexed_line).to receive(:ends_with_modifier_kw?).and_return true
|
244
243
|
end
|
245
244
|
|
246
245
|
specify do
|
247
|
-
subject.line_ends_with_single_token_indenter?(lexed_line).
|
246
|
+
expect(subject.line_ends_with_single_token_indenter?(lexed_line)).
|
247
|
+
to eq true
|
248
248
|
end
|
249
249
|
end
|
250
250
|
end
|
@@ -256,7 +256,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
256
256
|
end
|
257
257
|
|
258
258
|
it 'returns false' do
|
259
|
-
subject.line_ends_with_same_as_last([]).
|
259
|
+
expect(subject.line_ends_with_same_as_last([])).to eq false
|
260
260
|
end
|
261
261
|
end
|
262
262
|
|
@@ -269,7 +269,8 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
269
269
|
end
|
270
270
|
|
271
271
|
it 'returns false' do
|
272
|
-
subject.line_ends_with_same_as_last(last_single_token).
|
272
|
+
expect(subject.line_ends_with_same_as_last(last_single_token)).
|
273
|
+
to eq false
|
273
274
|
end
|
274
275
|
end
|
275
276
|
|
@@ -282,7 +283,8 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
282
283
|
end
|
283
284
|
|
284
285
|
it 'returns true' do
|
285
|
-
subject.line_ends_with_same_as_last(last_single_token).
|
286
|
+
expect(subject.line_ends_with_same_as_last(last_single_token)).
|
287
|
+
to eq true
|
286
288
|
end
|
287
289
|
end
|
288
290
|
end
|
@@ -296,7 +298,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
296
298
|
end
|
297
299
|
|
298
300
|
it 'returns true' do
|
299
|
-
subject.multi_line_parens?(2).
|
301
|
+
expect(subject.multi_line_parens?(2)).to eq true
|
300
302
|
end
|
301
303
|
end
|
302
304
|
|
@@ -306,8 +308,8 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
306
308
|
subject.instance_variable_set(:@indent_reasons, d_tokens)
|
307
309
|
end
|
308
310
|
|
309
|
-
it 'returns
|
310
|
-
subject.multi_line_parens?(2).
|
311
|
+
it 'returns false' do
|
312
|
+
expect(subject.multi_line_parens?(2)).to eq false
|
311
313
|
end
|
312
314
|
end
|
313
315
|
end
|
@@ -318,8 +320,8 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
318
320
|
subject.instance_variable_set(:@indent_reasons, d_tokens)
|
319
321
|
end
|
320
322
|
|
321
|
-
it 'returns
|
322
|
-
subject.multi_line_parens?(1).
|
323
|
+
it 'returns false' do
|
324
|
+
expect(subject.multi_line_parens?(1)).to eq false
|
323
325
|
end
|
324
326
|
end
|
325
327
|
end
|
@@ -327,7 +329,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
327
329
|
describe '#last_opening_event' do
|
328
330
|
context '@indent_reasons is empty' do
|
329
331
|
before { subject.instance_variable_set(:@indent_reasons, []) }
|
330
|
-
specify { subject.last_opening_event(nil).
|
332
|
+
specify { expect(subject.last_opening_event(nil)).to be_nil }
|
331
333
|
end
|
332
334
|
|
333
335
|
context '@indent_reasons contains the corresponding opening event' do
|
@@ -339,13 +341,15 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
339
341
|
|
340
342
|
context 'the corresponding opening event is last' do
|
341
343
|
it 'returns the matching opening event' do
|
342
|
-
subject.last_opening_event(:on_rbrace).
|
344
|
+
expect(subject.last_opening_event(:on_rbrace)).
|
345
|
+
to eq indent_reasons.last
|
343
346
|
end
|
344
347
|
end
|
345
348
|
|
346
349
|
context 'the corresponding opening event is not last' do
|
347
350
|
it 'returns the matching opening event' do
|
348
|
-
subject.last_opening_event(:on_rparen).
|
351
|
+
expect(subject.last_opening_event(:on_rparen)).
|
352
|
+
to eq indent_reasons.first
|
349
353
|
end
|
350
354
|
end
|
351
355
|
end
|
@@ -365,7 +369,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
365
369
|
i
|
366
370
|
end
|
367
371
|
|
368
|
-
specify { subject.remove_continuation_keywords.
|
372
|
+
specify { expect(subject.remove_continuation_keywords).to be_nil }
|
369
373
|
end
|
370
374
|
|
371
375
|
context '@indent_reasons does not contain CONTINUATION_KEYWORDS' do
|
@@ -378,7 +382,7 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
378
382
|
end
|
379
383
|
|
380
384
|
it 'should not call #pop on @indent_reasons' do
|
381
|
-
indent_reasons.
|
385
|
+
expect(indent_reasons).to_not receive(:pop)
|
382
386
|
subject.remove_continuation_keywords
|
383
387
|
end
|
384
388
|
end
|
@@ -391,8 +395,8 @@ describe Tailor::Rulers::IndentationSpacesRuler::IndentationManager do
|
|
391
395
|
it 'should call #pop on @indent_reasons one time' do
|
392
396
|
subject.instance_variable_set(:@indent_reasons, indent_reasons)
|
393
397
|
subject.remove_continuation_keywords
|
394
|
-
subject.instance_variable_get(:@indent_reasons).
|
395
|
-
[{ token: 'if' }]
|
398
|
+
expect(subject.instance_variable_get(:@indent_reasons)).
|
399
|
+
to eq [{ token: 'if' }]
|
396
400
|
end
|
397
401
|
end
|
398
402
|
end
|