ruby/spec/syntax_suggest/unit/block_expand_spec.rb

231 строка
4.5 KiB
Ruby

# frozen_string_literal: true
require_relative "../spec_helper"
module SyntaxSuggest
RSpec.describe BlockExpand do
it "empty line in methods" do
source_string = <<~EOM
class Dog # index 0
def bark # index 1
end # index 3
def sit # index 5
print "sit" # index 6
end # index 7
end # index 8
end # extra end
EOM
code_lines = code_line_array(source_string)
sit = code_lines[4..7]
sit.each(&:mark_invisible)
block = CodeBlock.new(lines: sit)
expansion = BlockExpand.new(code_lines: code_lines)
block = expansion.expand_neighbors(block)
expect(block.to_s).to eq(<<~EOM.indent(2))
def bark # index 1
end # index 3
EOM
end
it "captures multiple empty and hidden lines" do
source_string = <<~EOM
def foo
Foo.call
puts "lol"
# hidden
end
end
EOM
code_lines = code_line_array(source_string)
code_lines[6].mark_invisible
block = CodeBlock.new(lines: [code_lines[3]])
expansion = BlockExpand.new(code_lines: code_lines)
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM.indent(4))
puts "lol"
EOM
end
it "captures multiple empty lines" do
source_string = <<~EOM
def foo
Foo.call
puts "lol"
end
end
EOM
code_lines = code_line_array(source_string)
block = CodeBlock.new(lines: [code_lines[3]])
expansion = BlockExpand.new(code_lines: code_lines)
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM.indent(4))
puts "lol"
EOM
end
it "expands neighbors then indentation" do
source_string = <<~EOM
def foo
Foo.call
puts "hey"
puts "lol"
puts "sup"
end
end
EOM
code_lines = code_line_array(source_string)
block = CodeBlock.new(lines: [code_lines[3]])
expansion = BlockExpand.new(code_lines: code_lines)
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM.indent(4))
puts "hey"
puts "lol"
puts "sup"
EOM
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM.indent(2))
Foo.call
puts "hey"
puts "lol"
puts "sup"
end
EOM
end
it "handles else code" do
source_string = <<~EOM
Foo.call
if blerg
puts "lol"
else
puts "haha"
end
end
EOM
code_lines = code_line_array(source_string)
block = CodeBlock.new(lines: [code_lines[2]])
expansion = BlockExpand.new(code_lines: code_lines)
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM.indent(2))
if blerg
puts "lol"
else
puts "haha"
end
EOM
end
it "expand until next boundary (indentation)" do
source_string = <<~EOM
describe "what" do
Foo.call
end
describe "hi"
Bar.call do
Foo.call
end
end
it "blerg" do
end
EOM
code_lines = code_line_array(source_string)
block = CodeBlock.new(
lines: code_lines[6]
)
expansion = BlockExpand.new(code_lines: code_lines)
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM.indent(2))
Bar.call do
Foo.call
end
EOM
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM)
describe "hi"
Bar.call do
Foo.call
end
end
EOM
end
it "expand until next boundary (empty lines)" do
source_string = <<~EOM
describe "what" do
end
describe "hi"
end
it "blerg" do
end
EOM
code_lines = code_line_array(source_string)
expansion = BlockExpand.new(code_lines: code_lines)
block = CodeBlock.new(lines: code_lines[3])
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM)
describe "hi"
end
EOM
block = expansion.call(block)
expect(block.to_s).to eq(<<~EOM)
describe "what" do
end
describe "hi"
end
it "blerg" do
end
EOM
end
end
end