mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
135 lines
3.1 KiB
Ruby
135 lines
3.1 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative "../spec_helper"
|
|
|
|
module SyntaxSuggest
|
|
RSpec.describe CodeFrontier do
|
|
it "detect_bad_blocks" do
|
|
code_lines = code_line_array(<<~EOM)
|
|
describe "lol" do
|
|
end
|
|
end
|
|
|
|
it "lol" do
|
|
end
|
|
end
|
|
EOM
|
|
|
|
frontier = CodeFrontier.new(code_lines: code_lines)
|
|
blocks = []
|
|
blocks << CodeBlock.new(lines: code_lines[1])
|
|
blocks << CodeBlock.new(lines: code_lines[5])
|
|
blocks.each do |b|
|
|
frontier << b
|
|
end
|
|
|
|
expect(frontier.detect_invalid_blocks.sort).to eq(blocks.sort)
|
|
end
|
|
|
|
it "self.combination" do
|
|
expect(
|
|
CodeFrontier.combination([:a, :b, :c, :d])
|
|
).to eq(
|
|
[
|
|
[:a], [:b], [:c], [:d],
|
|
[:a, :b],
|
|
[:a, :c],
|
|
[:a, :d],
|
|
[:b, :c],
|
|
[:b, :d],
|
|
[:c, :d],
|
|
[:a, :b, :c],
|
|
[:a, :b, :d],
|
|
[:a, :c, :d],
|
|
[:b, :c, :d],
|
|
[:a, :b, :c, :d]
|
|
]
|
|
)
|
|
end
|
|
|
|
it "doesn't duplicate blocks" do
|
|
code_lines = code_line_array(<<~EOM)
|
|
def foo
|
|
puts "lol"
|
|
puts "lol"
|
|
puts "lol"
|
|
end
|
|
EOM
|
|
|
|
frontier = CodeFrontier.new(code_lines: code_lines)
|
|
frontier << CodeBlock.new(lines: [code_lines[2]])
|
|
expect(frontier.count).to eq(1)
|
|
|
|
frontier << CodeBlock.new(lines: [code_lines[1], code_lines[2], code_lines[3]])
|
|
# expect(frontier.count).to eq(1)
|
|
expect(frontier.pop.to_s).to eq(<<~EOM.indent(2))
|
|
puts "lol"
|
|
puts "lol"
|
|
puts "lol"
|
|
EOM
|
|
|
|
expect(frontier.pop).to be_nil
|
|
|
|
code_lines = code_line_array(<<~EOM)
|
|
def foo
|
|
puts "lol"
|
|
puts "lol"
|
|
puts "lol"
|
|
end
|
|
EOM
|
|
|
|
frontier = CodeFrontier.new(code_lines: code_lines)
|
|
frontier << CodeBlock.new(lines: [code_lines[2]])
|
|
expect(frontier.count).to eq(1)
|
|
|
|
frontier << CodeBlock.new(lines: [code_lines[3]])
|
|
expect(frontier.count).to eq(2)
|
|
expect(frontier.pop.to_s).to eq(<<~EOM.indent(2))
|
|
puts "lol"
|
|
EOM
|
|
end
|
|
|
|
it "detects if multiple syntax errors are found" do
|
|
code_lines = code_line_array(<<~EOM)
|
|
def foo
|
|
end
|
|
end
|
|
EOM
|
|
|
|
frontier = CodeFrontier.new(code_lines: code_lines)
|
|
|
|
frontier << CodeBlock.new(lines: code_lines[1])
|
|
block = frontier.pop
|
|
expect(block.to_s).to eq(<<~EOM.indent(2))
|
|
end
|
|
EOM
|
|
frontier << block
|
|
|
|
expect(frontier.holds_all_syntax_errors?).to be_truthy
|
|
end
|
|
|
|
it "detects if it has not captured all syntax errors" do
|
|
code_lines = code_line_array(<<~EOM)
|
|
def foo
|
|
puts "lol"
|
|
end
|
|
|
|
describe "lol"
|
|
end
|
|
|
|
it "lol"
|
|
end
|
|
EOM
|
|
|
|
frontier = CodeFrontier.new(code_lines: code_lines)
|
|
frontier << CodeBlock.new(lines: [code_lines[1]])
|
|
block = frontier.pop
|
|
expect(block.to_s).to eq(<<~EOM.indent(2))
|
|
puts "lol"
|
|
EOM
|
|
frontier << block
|
|
|
|
expect(frontier.holds_all_syntax_errors?).to be_falsey
|
|
end
|
|
end
|
|
end
|