mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
97 lines
2.6 KiB
Crystal
97 lines
2.6 KiB
Crystal
require "../../../spec_helper"
|
|
|
|
module Ameba::Rule::Lint
|
|
describe RedundantStringCoercion do
|
|
subject = RedundantStringCoercion.new
|
|
|
|
it "does not report if there is no redundant string coercion" do
|
|
s = Source.new %(
|
|
"Hello, #{name}"
|
|
)
|
|
subject.catch(s).should be_valid
|
|
end
|
|
|
|
it "reports if there is a redundant string coercion" do
|
|
s = Source.new %q(
|
|
"Hello, #{name.to_s}"
|
|
)
|
|
subject.catch(s).should_not be_valid
|
|
end
|
|
|
|
it "does not report if coercion is used in binary op" do
|
|
s = Source.new %q(
|
|
"Hello, #{3.to_s + 's'}"
|
|
)
|
|
subject.catch(s).should be_valid
|
|
end
|
|
|
|
it "reports if coercion is used with symbol literals" do
|
|
s = Source.new %q("Hello, #{:symbol.to_s}")
|
|
subject.catch(s).should_not be_valid
|
|
end
|
|
|
|
it "reports if coercion is used with number literals" do
|
|
s = Source.new %q("Hello, #{42.to_s}")
|
|
subject.catch(s).should_not be_valid
|
|
end
|
|
|
|
it "reports if coercion is used with boolean literals" do
|
|
s = Source.new %q("Hello, #{false.to_s}")
|
|
subject.catch(s).should_not be_valid
|
|
end
|
|
|
|
it "reports if coercion is used with char literals" do
|
|
s = Source.new %q("Hello, #{'t'.to_s}")
|
|
subject.catch(s).should_not be_valid
|
|
end
|
|
|
|
it "reports redundant coercion in regex" do
|
|
s = Source.new %q(
|
|
/\w #{name.to_s}/
|
|
)
|
|
subject.catch(s).should_not be_valid
|
|
end
|
|
|
|
it "doesn't report if Object#to_s is called with arguments" do
|
|
s = Source.new %q(
|
|
/\w #{name.to_s(io)}/
|
|
)
|
|
subject.catch(s).should be_valid
|
|
end
|
|
|
|
it "doesn't report if Object#to_s is called without receiver" do
|
|
s = Source.new %q(
|
|
/\w #{to_s}/
|
|
)
|
|
subject.catch(s).should be_valid
|
|
end
|
|
|
|
it "doesn't report if Object#to_s is called with named args" do
|
|
s = Source.new %q(
|
|
"0x#{250.to_s base: 16}"
|
|
)
|
|
subject.catch(s).should be_valid
|
|
end
|
|
|
|
it "reports rule, location and message" do
|
|
s = Source.new %q(
|
|
"Hello, #{name1.to_s}"
|
|
"Hello, #{name2.to_s}"
|
|
), "source.cr"
|
|
subject.catch(s).should_not be_valid
|
|
s.issues.size.should eq 2
|
|
|
|
issue = s.issues[0]
|
|
issue.rule.should_not be_nil
|
|
issue.location.to_s.should eq "source.cr:1:17"
|
|
issue.end_location.to_s.should eq "source.cr:1:20"
|
|
issue.message.should eq RedundantStringCoercion::MSG
|
|
|
|
issue = s.issues[1]
|
|
issue.rule.should_not be_nil
|
|
issue.location.to_s.should eq "source.cr:2:17"
|
|
issue.end_location.to_s.should eq "source.cr:2:20"
|
|
issue.message.should eq RedundantStringCoercion::MSG
|
|
end
|
|
end
|
|
end
|