shard-ameba/spec/ameba/formatter/dot_formatter_spec.cr
Sijawusz Pur Rahnama ea98554191
Add support for showing end location marker (#200)
* Add support for showing end location marker

* Cleanup Reportable method definitions

There’s no need for double splats, since they mess up method resolution, and obscure the actual - single (!) - argument - `status`, so… be gone

Also, all of the helpers return the constructed `Issue` like a behaving good methods.

* Refactor Util#affected_code

* Increase max length of trimmed lines to 120 characters

* Refactor Issue to use enum instead of a symbol for #status

* Optimize Reportable#valid?

* Add spec coverage for newly added Util methods

* Refactor DotFormatter a bit

Make text format moar in line with Crystal spec runner.

* Update README.md
2021-01-26 08:38:19 +02:00

108 lines
3.1 KiB
Crystal

require "../../spec_helper"
module Ameba::Formatter
describe DotFormatter do
output = IO::Memory.new
subject = DotFormatter.new output
describe "#started" do
it "writes started message" do
subject.started [Source.new ""]
output.to_s.should eq "Inspecting 1 file\n\n"
end
end
describe "#source_finished" do
it "writes valid source" do
subject.source_finished Source.new ""
output.to_s.should contain "."
end
it "writes invalid source" do
s = Source.new ""
s.add_issue DummyRule.new, Crystal::Nop.new, "message"
subject.source_finished s
output.to_s.should contain "F"
end
end
describe "#finished" do
it "writes a final message" do
subject.finished [Source.new ""]
output.to_s.should contain "1 inspected, 0 failures"
end
it "writes the elapsed time" do
subject.finished [Source.new ""]
output.to_s.should contain "Finished in"
end
context "when issues found" do
it "writes each issue" do
s = Source.new("").tap do |source|
source.add_issue(DummyRule.new, {1, 1}, "DummyRuleError")
source.add_issue(NamedRule.new, {1, 2}, "NamedRuleError")
end
subject.finished [s]
log = output.to_s
log.should contain "1 inspected, 2 failures"
log.should contain "DummyRuleError"
log.should contain "NamedRuleError"
end
it "writes affected code by default" do
output.clear
s = Source.new(%(
a = 22
puts a
)).tap do |source|
source.add_issue(DummyRule.new, {1, 5}, "DummyRuleError")
end
subject.finished [s]
log = output.to_s
log.should contain "> \e[97ma = 22"
log.should contain " \e[33m^\e[0m"
end
it "writes severity" do
output.clear
s = Source.new(%(
a = 22
puts a
)).tap do |source|
source.add_issue(DummyRule.new, {1, 5}, "DummyRuleError")
end
subject.finished [s]
log = output.to_s
log.should contain "[C]"
end
it "doesn't write affected code if it is disabled" do
output.clear
s = Source.new(%(
a = 22
puts a
)).tap do |source|
source.add_issue(DummyRule.new, {1, 5}, "DummyRuleError")
end
formatter = DotFormatter.new output
formatter.config[:without_affected_code] = true
formatter.finished [s]
log = output.to_s
log.should_not contain "> a = 22"
log.should_not contain " \e[33m^\e[0m"
end
it "does not write disabled issues" do
s = Source.new ""
s.add_issue(DummyRule.new, location: {1, 1},
message: "DummyRuleError", status: :disabled)
subject.finished [s]
output.to_s.should contain "1 inspected, 0 failures"
end
end
end
end
end