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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
# 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
|