File: code_block_spec.rb

package info (click to toggle)
ruby3.4 3.4.5-1~exp1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 154,784 kB
  • sloc: ruby: 1,259,653; ansic: 829,955; yacc: 28,233; pascal: 7,359; sh: 3,864; python: 1,799; cpp: 1,158; asm: 808; makefile: 801; javascript: 414; lisp: 109; perl: 62; awk: 36; sed: 4; xml: 4
file content (77 lines) | stat: -rw-r--r-- 1,958 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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