shard-ameba/spec/ameba/inline_comments_spec.cr
2020-03-25 18:14:15 +02:00

156 lines
4.8 KiB
Crystal

require "../spec_helper"
module Ameba
describe InlineComments do
describe InlineComments::COMMENT_DIRECTIVE_REGEX do
subject = InlineComments::COMMENT_DIRECTIVE_REGEX
it "allows to parse action and rule name" do
result = subject.match("#ameba:enable Group/RuleName")
result.should_not be_nil
result.not_nil![1].should eq "enable"
result.not_nil![2].should eq "Group/RuleName"
end
it "ignores the repeatable spaces" do
result = subject.match("# ameba : enable Group/RuleName")
result.should_not be_nil
result.not_nil![1].should eq "enable"
result.not_nil![2].should eq "Group/RuleName"
end
end
it "disables a rule with a comment directive" do
s = Source.new %Q(
# ameba:disable #{NamedRule.name}
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {1, 12}, message: "Error!")
s.should be_valid
end
it "disables a rule with a line that ends with a comment directive" do
s = Source.new %Q(
Time.epoch(1483859302) # ameba:disable #{NamedRule.name}
)
s.add_issue(NamedRule.new, location: {1, 12}, message: "Error!")
s.should be_valid
end
it "does not disable a rule of a different name" do
s = Source.new %Q(
# ameba:disable WrongName
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {2, 12}, message: "Error!")
s.should_not be_valid
end
it "disables a rule if multiple rule names provided" do
s = Source.new %Q(
# ameba:disable SomeRule LargeNumbers #{NamedRule.name} SomeOtherRule
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {2, 12}, message: "")
s.should be_valid
end
it "disables a rule if multiple rule names are separated by comma" do
s = Source.new %Q(
# ameba:disable SomeRule, LargeNumbers, #{NamedRule.name}, SomeOtherRule
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {2, 12}, message: "")
s.should be_valid
end
it "does not disable if multiple rule names used without required one" do
s = Source.new %(
# ameba:disable SomeRule, SomeOtherRule LargeNumbers
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {2, 12}, message: "")
s.should_not be_valid
end
it "does not disable if comment directive has wrong place" do
s = Source.new %Q(
# ameba:disable #{NamedRule.name}
#
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {3, 12}, message: "")
s.should_not be_valid
end
it "does not disable if comment directive added to the wrong line" do
s = Source.new %Q(
if use_epoch? # ameba:disable #{NamedRule.name}
Time.epoch(1483859302)
end
)
s.add_issue(NamedRule.new, location: {3, 12}, message: "")
s.should_not be_valid
end
it "does not disable if that is not a comment directive" do
s = Source.new %Q(
"ameba:disable #{NamedRule.name}"
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {3, 12}, message: "")
s.should_not be_valid
end
it "does not disable if that is a commented out directive" do
s = Source.new %Q(
# # ameba:disable #{NamedRule.name}
Time.epoch(1483859302)
)
s.add_issue(NamedRule.new, location: {3, 12}, message: "")
s.should_not be_valid
end
it "does not disable if that is an inline commented out directive" do
s = Source.new %Q(
a = 1 # Disable it: # ameba:disable #{NamedRule.name}
)
s.add_issue(NamedRule.new, location: {2, 12}, message: "")
s.should_not be_valid
end
context "with group name" do
it "disables one rule with a group" do
s = Source.new %Q(
a = 1 # ameba:disable #{DummyRule.rule_name}
)
s.add_issue(DummyRule.new, location: {1, 12}, message: "")
s.should be_valid
end
it "doesn't disable others rules" do
s = Source.new %Q(
a = 1 # ameba:disable #{DummyRule.rule_name}
)
s.add_issue(NamedRule.new, location: {2, 12}, message: "")
s.should_not be_valid
end
it "disables a hole group of rules" do
s = Source.new %Q(
a = 1 # ameba:disable #{DummyRule.group_name}
)
s.add_issue(DummyRule.new, location: {1, 12}, message: "")
s.should be_valid
end
it "does not disable rules which do not belong to the group" do
s = Source.new %Q(
a = 1 # ameba:disable Lint
)
s.add_issue(DummyRule.new, location: {2, 12}, message: "")
s.should_not be_valid
end
end
end
end