mirror of
https://gitea.invidious.io/iv-org/shard-ameba.git
synced 2024-08-15 00:53:29 +00:00
Add expect_correction
and expect_no_corrections
This commit is contained in:
parent
c1b4add094
commit
d3d3ccd7e3
2 changed files with 39 additions and 2 deletions
|
@ -15,7 +15,8 @@ class Ameba::Spec::AnnotatedSource
|
|||
def self.parse(annotated_code)
|
||||
lines = [] of String
|
||||
annotations = [] of {Int32, String, String}
|
||||
annotated_code.each_line do |code_line|
|
||||
code_lines = annotated_code.split('\n') # must preserve trailing newline
|
||||
code_lines.each do |code_line|
|
||||
if (annotation_match = ANNOTATION_PATTERN_1.match(code_line))
|
||||
message_index = annotation_match.end
|
||||
prefix = code_line[0...message_index]
|
||||
|
|
|
@ -47,6 +47,8 @@ require "./util"
|
|||
module Ameba::Spec::ExpectIssue
|
||||
include Spec::Util
|
||||
|
||||
class_property source : Source?
|
||||
|
||||
def expect_issue(rules : Rule::Base | Enumerable(Rule::Base),
|
||||
annotated_code : String,
|
||||
path = "",
|
||||
|
@ -79,6 +81,39 @@ module Ameba::Spec::ExpectIssue
|
|||
end
|
||||
end
|
||||
|
||||
def expect_correction(correction, *, file = __FILE__, line = __LINE__)
|
||||
source = ExpectIssue.source
|
||||
raise "`expect_correction` must follow `expect_issue`" unless source
|
||||
|
||||
corrected_code = Source::Corrector.correct(source) # TODO: recursive
|
||||
raise "Use `expect_no_corrections` if the code will not change" unless corrected_code
|
||||
return if correction == corrected_code
|
||||
|
||||
fail <<-MSG, file, line
|
||||
Expected correction:
|
||||
|
||||
#{correction}
|
||||
|
||||
Got:
|
||||
|
||||
#{corrected_code}
|
||||
MSG
|
||||
end
|
||||
|
||||
def expect_no_corrections(*, file = __FILE__, line = __LINE__)
|
||||
source = ExpectIssue.source
|
||||
raise "`expect_no_corrections` must follow `expect_offense`" unless source
|
||||
|
||||
corrected_code = Source::Corrector.correct(source)
|
||||
return unless corrected_code
|
||||
|
||||
fail <<-MSG, file, line
|
||||
Expected no corrections, but got:
|
||||
|
||||
#{corrected_code}
|
||||
MSG
|
||||
end
|
||||
|
||||
def expect_no_issues(rules : Rule::Base | Enumerable(Rule::Base),
|
||||
code : String,
|
||||
path = "",
|
||||
|
@ -87,7 +122,7 @@ module Ameba::Spec::ExpectIssue
|
|||
file = __FILE__,
|
||||
line = __LINE__)
|
||||
code = normalize_code(code) if normalize
|
||||
lines = code.lines
|
||||
lines = code.split('\n') # must preserve trailing newline
|
||||
actual_annotations = actual_annotations(rules, code, path, lines)
|
||||
unless actual_annotations.to_s == code
|
||||
fail <<-MSG, file, line
|
||||
|
@ -100,6 +135,7 @@ module Ameba::Spec::ExpectIssue
|
|||
|
||||
private def actual_annotations(rules, code, path, lines)
|
||||
source = Source.new(code, path, normalize: false) # already normalized
|
||||
ExpectIssue.source = source
|
||||
if rules.is_a?(Enumerable)
|
||||
rules.each(&.catch(source))
|
||||
else
|
||||
|
|
Loading…
Reference in a new issue