ruby/spec/syntax_suggest/unit/display_invalid_blocks_spec.rb
schneems d6e91784ab Update SyntaxSuggest to use angle brackets >
```
$ ruby tool/sync_default_gems.rb syntax_suggest
Sync ruby/syntax_suggest
```

https://github.com/ruby/syntax_suggest/pull/161
2022-11-30 12:58:47 +09:00

172 lines
3.7 KiB
Ruby

# frozen_string_literal: true
require_relative "../spec_helper"
module SyntaxSuggest
RSpec.describe DisplayInvalidBlocks do
it "works with valid code" do
syntax_string = <<~EOM
class OH
def hello
end
def hai
end
end
EOM
search = CodeSearch.new(syntax_string)
search.call
io = StringIO.new
display = DisplayInvalidBlocks.new(
io: io,
blocks: search.invalid_blocks,
terminal: false,
code_lines: search.code_lines
)
display.call
expect(io.string).to include("")
end
it "selectively prints to terminal if input is a tty by default" do
source = <<~EOM
class OH
def hello
def hai
end
end
EOM
code_lines = CleanDocument.new(source: source).call.lines
io = StringIO.new
def io.isatty
true
end
block = CodeBlock.new(lines: code_lines[1])
display = DisplayInvalidBlocks.new(
io: io,
blocks: block,
code_lines: code_lines
)
display.call
expect(io.string).to include([
"> 2 ",
DisplayCodeWithLineNumbers::TERMINAL_HIGHLIGHT,
" def hello"
].join)
io = StringIO.new
def io.isatty
false
end
block = CodeBlock.new(lines: code_lines[1])
display = DisplayInvalidBlocks.new(
io: io,
blocks: block,
code_lines: code_lines
)
display.call
expect(io.string).to include("> 2 def hello")
end
it "outputs to io when using `call`" do
source = <<~EOM
class OH
def hello
def hai
end
end
EOM
code_lines = CleanDocument.new(source: source).call.lines
io = StringIO.new
block = CodeBlock.new(lines: code_lines[1])
display = DisplayInvalidBlocks.new(
io: io,
blocks: block,
terminal: false,
code_lines: code_lines
)
display.call
expect(io.string).to include("> 2 def hello")
end
it " wraps code with github style codeblocks" do
source = <<~EOM
class OH
def hello
def hai
end
end
EOM
code_lines = CleanDocument.new(source: source).call.lines
block = CodeBlock.new(lines: code_lines[1])
io = StringIO.new
DisplayInvalidBlocks.new(
io: io,
blocks: block,
terminal: false,
code_lines: code_lines
).call
expect(io.string).to include(<<~EOM)
1 class OH
> 2 def hello
4 def hai
5 end
6 end
EOM
end
it "shows terminal characters" do
code_lines = code_line_array(<<~EOM)
class OH
def hello
def hai
end
end
EOM
io = StringIO.new
block = CodeBlock.new(lines: code_lines[1])
DisplayInvalidBlocks.new(
io: io,
blocks: block,
terminal: false,
code_lines: code_lines
).call
expect(io.string).to include([
" 1 class OH",
"> 2 def hello",
" 4 end",
" 5 end",
""
].join($/))
block = CodeBlock.new(lines: code_lines[1])
io = StringIO.new
DisplayInvalidBlocks.new(
io: io,
blocks: block,
terminal: true,
code_lines: code_lines
).call
expect(io.string).to include(
[
" 1 class OH",
["> 2 ", DisplayCodeWithLineNumbers::TERMINAL_HIGHLIGHT, " def hello"].join,
" 4 end",
" 5 end",
""
].join($/ + DisplayCodeWithLineNumbers::TERMINAL_END)
)
end
end
end