# frozen_string_literal: true
RSpec.describe YARD::Templates::Helpers::HtmlSyntaxHighlightHelper do
include YARD::Templates::Helpers::HtmlHelper
include YARD::Templates::Helpers::HtmlSyntaxHighlightHelper
describe "#html_syntax_highlight" do
let(:object) { CodeObjects::NamespaceObject.new(:root, :YARD) }
before do
Registry.root.source_type = :ruby
end
it "does not highlight source if options.highlight is false" do
expect(self).to receive(:options).and_return(Options.new.update(:highlight => false))
expect(html_syntax_highlight("def x\nend")).to eq "def x\nend"
end
it "highlights source (legacy)" do
type = Parser::SourceParser.parser_type
Parser::SourceParser.parser_type = :ruby18
expect(self).to receive(:options).and_return(Options.new.update(:highlight => true))
expect = "defx
'x'+
/x/iend"
result = html_syntax_highlight("def x\n 'x' + /x/i\nend")
html_equals_string(result, expect)
Parser::SourceParser.parser_type = type
end
it "highlights source (ripper)" do
expect(self).to receive(:options).and_return(Options.new.update(:highlight => true))
Parser::SourceParser.parser_type = :ruby
expect = "def x
'
x'
+
/x
/i\nend"
result = html_syntax_highlight("def x\n 'x' + /x/i\nend")
html_equals_string(result, expect)
end if HAVE_RIPPER
it "returns escaped unhighlighted source if a syntax error is found (ripper)" do
allow(self).to receive(:options).and_return(Options.new.update(:highlight => true))
expect(html_syntax_highlight("def &x; ... end")).to eq "def &x; ... end"
end if HAVE_RIPPER
it "returns escaped unhighlighted source if a syntax error is found (ripper)" do
allow(self).to receive(:options).and_return(Options.new.update(:highlight => true))
expect(html_syntax_highlight("$ git clone http://url")).to eq "$ git clone http://url"
end if HAVE_RIPPER
it "links constants/methods" do
other = CodeObjects::NamespaceObject.new(:root, :Other)
allow(self).to receive(:options).and_return(Options.new.update(:highlight => true))
allow(self).to receive(:run_verifier).with([other]).and_return([other])
allow(self).to receive(:link_object).with(other, "Other").and_return("LINK!")
result = html_syntax_highlight("def x; Other end")
html_equals_string(result, "def
x;
LINK! end")
end if HAVE_RIPPER
end
end