2018-12-27 21:34:10 +00:00
|
|
|
require "../../spec_helper"
|
|
|
|
|
|
|
|
module Ameba
|
|
|
|
def explanation(source)
|
|
|
|
output = IO::Memory.new
|
|
|
|
ErrorRule.new.catch(source)
|
|
|
|
location = {file: "source.cr", line: 1, column: 1}
|
|
|
|
Formatter::ExplainFormatter.new(output, location).finished([source])
|
|
|
|
output.to_s
|
|
|
|
end
|
|
|
|
|
|
|
|
describe Formatter::ExplainFormatter do
|
|
|
|
describe "#location" do
|
|
|
|
it "returns crystal location" do
|
|
|
|
location = Formatter::ExplainFormatter
|
|
|
|
.new(STDOUT, {file: "compiler.cr", line: 3, column: 8}).location
|
|
|
|
|
|
|
|
location.is_a?(Crystal::Location).should be_true
|
|
|
|
location.filename.should eq "compiler.cr"
|
|
|
|
location.line_number.should eq 3
|
|
|
|
location.column_number.should eq 8
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#output" do
|
|
|
|
it "returns io" do
|
|
|
|
output = Formatter::ExplainFormatter
|
|
|
|
.new(STDOUT, {file: "compiler.cr", line: 3, column: 8}).output
|
|
|
|
output.should eq STDOUT
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
describe "#finished" do
|
|
|
|
it "writes issue info" do
|
|
|
|
source = Source.new "a = 42", "source.cr"
|
|
|
|
output = explanation(source)
|
|
|
|
output.should contain "ISSUE INFO"
|
|
|
|
output.should contain "This rule always adds an error"
|
|
|
|
output.should contain "source.cr:1:1"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "writes affected code" do
|
|
|
|
source = Source.new "a = 42", "source.cr"
|
|
|
|
output = explanation(source)
|
|
|
|
output.should contain "AFFECTED CODE"
|
|
|
|
output.should contain "a = 42"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "writes rule info" do
|
|
|
|
source = Source.new "a = 42", "source.cr"
|
|
|
|
output = explanation(source)
|
|
|
|
output.should contain "RULE INFO"
|
2019-05-11 18:17:18 +00:00
|
|
|
output.should contain "Convention"
|
2018-12-27 21:34:10 +00:00
|
|
|
output.should contain "Ameba/ErrorRule"
|
|
|
|
output.should contain "Always adds an error at 1:1"
|
|
|
|
end
|
|
|
|
|
|
|
|
it "writes detailed description" do
|
|
|
|
source = Source.new "a = 42", "source.cr"
|
|
|
|
output = explanation(source)
|
|
|
|
output.should contain "DETAILED DESCRIPTION"
|
|
|
|
output.should contain "TO BE DONE..."
|
|
|
|
end
|
|
|
|
|
|
|
|
it "writes nothing if location not found" do
|
|
|
|
source = Source.new "a = 42", "another_source.cr"
|
|
|
|
explanation(source).should be_empty
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|