-
-
Notifications
You must be signed in to change notification settings - Fork 58
/
Copy pathindex_test.rb
183 lines (154 loc) · 4.84 KB
/
index_test.rb
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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
# frozen_string_literal: true
require_relative "test_helper"
module SyntaxTree
class IndexTest < Minitest::Test
def test_module
index_each("module Foo; end") do |entry|
assert_equal :Foo, entry.name
assert_equal [[:Foo]], entry.nesting
end
end
def test_module_nested
index_each("module Foo; module Bar; end; end") do |entry|
assert_equal :Bar, entry.name
assert_equal [[:Foo], [:Bar]], entry.nesting
end
end
def test_module_comments
index_each("# comment1\n# comment2\nmodule Foo; end") do |entry|
assert_equal :Foo, entry.name
assert_equal ["# comment1", "# comment2"], entry.comments.to_a
end
end
def test_class
index_each("class Foo; end") do |entry|
assert_equal :Foo, entry.name
assert_equal [[:Foo]], entry.nesting
end
end
def test_class_paths_2
index_each("class Foo::Bar; end") do |entry|
assert_equal :Bar, entry.name
assert_equal [%i[Foo Bar]], entry.nesting
end
end
def test_class_paths_3
index_each("class Foo::Bar::Baz; end") do |entry|
assert_equal :Baz, entry.name
assert_equal [%i[Foo Bar Baz]], entry.nesting
end
end
def test_class_nested
index_each("class Foo; class Bar; end; end") do |entry|
assert_equal :Bar, entry.name
assert_equal [[:Foo], [:Bar]], entry.nesting
end
end
def test_class_paths_nested
index_each("class Foo; class Bar::Baz::Qux; end; end") do |entry|
assert_equal :Qux, entry.name
assert_equal [[:Foo], %i[Bar Baz Qux]], entry.nesting
end
end
def test_class_superclass
index_each("class Foo < Bar; end") do |entry|
assert_equal :Foo, entry.name
assert_equal [[:Foo]], entry.nesting
assert_equal [:Bar], entry.superclass
end
end
def test_class_path_superclass
index_each("class Foo::Bar < Baz::Qux; end") do |entry|
assert_equal :Bar, entry.name
assert_equal [%i[Foo Bar]], entry.nesting
assert_equal %i[Baz Qux], entry.superclass
end
end
def test_class_comments
index_each("# comment1\n# comment2\nclass Foo; end") do |entry|
assert_equal :Foo, entry.name
assert_equal ["# comment1", "# comment2"], entry.comments.to_a
end
end
def test_method
index_each("def foo; end") do |entry|
assert_equal :foo, entry.name
assert_empty entry.nesting
end
end
def test_method_nested
index_each("class Foo; def foo; end; end") do |entry|
assert_equal :foo, entry.name
assert_equal [[:Foo]], entry.nesting
end
end
def test_method_comments
index_each("# comment1\n# comment2\ndef foo; end") do |entry|
assert_equal :foo, entry.name
assert_equal ["# comment1", "# comment2"], entry.comments.to_a
end
end
def test_singleton_method
index_each("def self.foo; end") do |entry|
assert_equal :foo, entry.name
assert_empty entry.nesting
end
end
def test_singleton_method_nested
index_each("class Foo; def self.foo; end; end") do |entry|
assert_equal :foo, entry.name
assert_equal [[:Foo]], entry.nesting
end
end
def test_singleton_method_comments
index_each("# comment1\n# comment2\ndef self.foo; end") do |entry|
assert_equal :foo, entry.name
assert_equal ["# comment1", "# comment2"], entry.comments.to_a
end
end
def test_alias_method
index_each("alias foo bar") do |entry|
assert_equal :foo, entry.name
assert_empty entry.nesting
end
end
def test_attr_reader
index_each("attr_reader :foo") do |entry|
assert_equal :foo, entry.name
assert_empty entry.nesting
end
end
def test_attr_writer
index_each("attr_writer :foo") do |entry|
assert_equal :foo=, entry.name
assert_empty entry.nesting
end
end
def test_attr_accessor
index_each("attr_accessor :foo") do |entry|
assert_equal :foo=, entry.name
assert_empty entry.nesting
end
end
def test_constant
index_each("FOO = 1") do |entry|
assert_equal :FOO, entry.name
assert_empty entry.nesting
end
end
def test_this_file
entries = Index.index_file(__FILE__, backend: Index::ParserBackend.new)
if defined?(RubyVM::InstructionSequence)
entries += Index.index_file(__FILE__, backend: Index::ISeqBackend.new)
end
entries.map { |entry| entry.comments.to_a }
end
private
def index_each(source)
yield Index.index(source, backend: Index::ParserBackend.new).last
if defined?(RubyVM::InstructionSequence)
yield Index.index(source, backend: Index::ISeqBackend.new).last
end
end
end
end