summaryrefslogtreecommitdiff
path: root/spec/syntax_suggest/unit/code_block_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'spec/syntax_suggest/unit/code_block_spec.rb')
-rw-r--r--spec/syntax_suggest/unit/code_block_spec.rb77
1 files changed, 77 insertions, 0 deletions
diff --git a/spec/syntax_suggest/unit/code_block_spec.rb b/spec/syntax_suggest/unit/code_block_spec.rb
new file mode 100644
index 0000000000..3ab2751b27
--- /dev/null
+++ b/spec/syntax_suggest/unit/code_block_spec.rb
@@ -0,0 +1,77 @@
+# frozen_string_literal: true
+
+require_relative "../spec_helper"
+
+module SyntaxSuggest
+ RSpec.describe CodeBlock do
+ it "can detect if it's valid or not" do
+ code_lines = code_line_array(<<~EOM)
+ def foo
+ puts 'lol'
+ end
+ EOM
+
+ block = CodeBlock.new(lines: code_lines[1])
+ expect(block.valid?).to be_truthy
+ end
+
+ it "can be sorted in indentation order" do
+ code_lines = code_line_array(<<~EOM)
+ def foo
+ puts 'lol'
+ end
+ EOM
+
+ block_0 = CodeBlock.new(lines: code_lines[0])
+ block_1 = CodeBlock.new(lines: code_lines[1])
+ block_2 = CodeBlock.new(lines: code_lines[2])
+
+ expect(block_0 <=> block_0.dup).to eq(0)
+ expect(block_1 <=> block_0).to eq(1)
+ expect(block_1 <=> block_2).to eq(-1)
+
+ array = [block_2, block_1, block_0].sort
+ expect(array.last).to eq(block_2)
+
+ block = CodeBlock.new(lines: CodeLine.new(line: " " * 8 + "foo", index: 4, lex: []))
+ array.prepend(block)
+ expect(array.max).to eq(block)
+ end
+
+ it "knows it's current indentation level" do
+ code_lines = code_line_array(<<~EOM)
+ def foo
+ puts 'lol'
+ end
+ EOM
+
+ block = CodeBlock.new(lines: code_lines[1])
+ expect(block.current_indent).to eq(2)
+
+ block = CodeBlock.new(lines: code_lines[0])
+ expect(block.current_indent).to eq(0)
+ end
+
+ it "knows it's current indentation level when mismatched indents" do
+ code_lines = code_line_array(<<~EOM)
+ def foo
+ puts 'lol'
+ end
+ EOM
+
+ block = CodeBlock.new(lines: [code_lines[1], code_lines[2]])
+ expect(block.current_indent).to eq(1)
+ end
+
+ it "before lines and after lines" do
+ code_lines = code_line_array(<<~EOM)
+ def foo
+ bar; end
+ end
+ EOM
+
+ block = CodeBlock.new(lines: code_lines[1])
+ expect(block.valid?).to be_falsey
+ end
+ end
+end