summaryrefslogtreecommitdiff
path: root/spec/syntax_suggest/unit/display_invalid_blocks_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/syntax_suggest/unit/display_invalid_blocks_spec.rb')
-rw-r--r--spec/syntax_suggest/unit/display_invalid_blocks_spec.rb174
1 files changed, 174 insertions, 0 deletions
diff --git a/spec/syntax_suggest/unit/display_invalid_blocks_spec.rb b/spec/syntax_suggest/unit/display_invalid_blocks_spec.rb
new file mode 100644
index 0000000000..b11d7d242e
--- /dev/null
+++ b/spec/syntax_suggest/unit/display_invalid_blocks_spec.rb
@@ -0,0 +1,174 @@
+# 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",
+ " 3 def hai",
+ " 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,
+ " 3 def hai",
+ " 4 end",
+ " 5 end",
+ ""
+ ].join($/ + DisplayCodeWithLineNumbers::TERMINAL_END)
+ )
+ end
+ end
+end