-
Notifications
You must be signed in to change notification settings - Fork 577
Expand file tree
/
Copy pathlines_classifier_spec.rb
More file actions
130 lines (110 loc) · 3.57 KB
/
lines_classifier_spec.rb
File metadata and controls
130 lines (110 loc) · 3.57 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
# frozen_string_literal: true
require "helper"
require "simplecov/lines_classifier"
describe SimpleCov::LinesClassifier do
describe "#classify" do
describe "relevant lines" do
it "determines code as relevant" do
classified_lines = subject.classify [
"module Foo",
" class Baz",
" def Bar",
" puts 'hi'",
" end",
" end",
"end"
]
expect(classified_lines.length).to eq 7
expect(classified_lines).to all be_relevant
end
it "determines invalid UTF-8 byte sequences as relevant" do
classified_lines = subject.classify [
"bytes = \"\xF1t\xEBrn\xE2ti\xF4n\xE0liz\xE6ti\xF8n\""
]
expect(classified_lines.length).to eq 1
expect(classified_lines).to all be_relevant
end
end
describe "not-relevant lines" do
it "determines whitespace is not-relevant" do
classified_lines = subject.classify [
"",
" ",
"\t\t"
]
expect(classified_lines.length).to eq 3
expect(classified_lines).to all be_irrelevant
end
describe "comments" do
it "determines comments are not-relevant" do
classified_lines = subject.classify [
"#Comment",
" # Leading space comment",
"\t# Leading tab comment"
]
expect(classified_lines.length).to eq 3
expect(classified_lines).to all be_irrelevant
end
it "doesn't mistake interpolation as a comment" do
classified_lines = subject.classify [
'puts "#{var}"' # rubocop:disable Lint/InterpolationCheck
]
expect(classified_lines.length).to eq 1
expect(classified_lines).to all be_relevant
end
end
describe ":nocov: one liner" do
it "determines :nocov: lines are not-relevant" do
classified_lines = subject.classify [
"def hi",
"raise NotImplementedError # :nocov:",
"end",
""
]
expect(classified_lines.length).to eq 4
expect(classified_lines[1]).to be_irrelevant
end
end
describe ":nocov: blocks" do
it "determines :nocov: blocks are not-relevant" do
classified_lines = subject.classify [
"# :nocov:",
"def hi",
"end",
"# :nocov:"
]
expect(classified_lines.length).to eq 4
expect(classified_lines).to all be_irrelevant
end
it "determines all lines after a non-closing :nocov: as not-relevant" do
classified_lines = subject.classify [
"puts 'Not relevant' # :nocov:",
"# :nocov:",
"puts 'Not relevant'",
"# :nocov:",
"puts 'Relevant again'",
"puts 'Still relevant'",
"# :nocov:",
"puts 'Not relevant till the end' # :nocov:",
"puts 'Ditto'"
]
expect(classified_lines.length).to eq 9
expect(classified_lines[0]).to be_irrelevant
expect(classified_lines[1..3]).to all be_irrelevant
expect(classified_lines[4..5]).to all be_relevant
expect(classified_lines[6..8]).to all be_irrelevant
end
end
end
end
RSpec::Matchers.define :be_relevant do
match do |actual|
actual == SimpleCov::LinesClassifier::RELEVANT
end
end
RSpec::Matchers.define :be_irrelevant do
match do |actual|
actual == SimpleCov::LinesClassifier::NOT_RELEVANT
end
end
end