Skip to content

Commit 4fa1dac

Browse files
committed
(GH-166) Add tests for definition provider
This commit adds basic integration tests for the definition provider.
1 parent 8190f73 commit 4fa1dac

File tree

7 files changed

+172
-0
lines changed

7 files changed

+172
-0
lines changed

server/spec/languageserver/fixtures/environments/.gitkeep

Whitespace-only changes.
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
define deftypeone(
2+
$ensure = 'UNSET',
3+
) {
4+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "testfixture-definedtypes",
3+
"version": "0.1.0",
4+
"author": "testfixture",
5+
"summary": "Test fixture with defined types",
6+
"license": "Apache-2.0",
7+
"source": "http://localhost",
8+
"dependencies": []
9+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class testclasses::nestedclass () {
2+
$param1 = 'value2'
3+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
class puppetclassone () {
2+
$param1 = 'value1'
3+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{
2+
"name": "testfixture-testclasses",
3+
"version": "0.1.0",
4+
"author": "testfixture",
5+
"summary": "Test fixture with puppet classes",
6+
"license": "Apache-2.0",
7+
"source": "http://localhost",
8+
"dependencies": []
9+
}
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
require 'spec_helper'
2+
3+
RSpec.shared_examples "a single definition result" do |filename_regex|
4+
it "should return a single definition result which matches #{filename_regex.to_s}" do
5+
result = subject.find_definition(content, line_num, char_num)
6+
7+
expect(result).to be_a(Array)
8+
expect(result.count).to eq(1)
9+
expect(result[0]['uri']).to match(filename_regex)
10+
expect(result[0]['range']['start']['line']).to_not be_nil
11+
expect(result[0]['range']['start']['character']).to_not be_nil
12+
expect(result[0]['range']['end']['line']).to_not be_nil
13+
expect(result[0]['range']['end']['character']).to_not be_nil
14+
end
15+
end
16+
17+
describe 'definition_provider' do
18+
let(:subject) { PuppetLanguageServer::DefinitionProvider }
19+
20+
describe '#find_defintion' do
21+
before(:all) do
22+
# Ensure the functions are loaded so that defintion information is available
23+
PuppetLanguageServer::PuppetHelper.load_functions unless PuppetLanguageServer::PuppetHelper.functions_loaded?
24+
25+
# Ensure the types are loaded so that defintion information is available
26+
PuppetLanguageServer::PuppetHelper.load_types unless PuppetLanguageServer::PuppetHelper.types_loaded?
27+
28+
# Ensure the classes are loaded so that defintion information is available
29+
PuppetLanguageServer::PuppetHelper.load_classes unless PuppetLanguageServer::PuppetHelper.classes_loaded?
30+
end
31+
32+
context 'When cursor is on a function name' do
33+
let(:content) { <<-EOT
34+
class Test::NoParams {
35+
alert('This is an alert message')
36+
}
37+
EOT
38+
}
39+
let(:line_num) { 1 }
40+
let(:char_num) { 5 }
41+
42+
it_should_behave_like "a single definition result", /functions\.rb/
43+
end
44+
45+
context 'When cursor is on a custom puppet type' do
46+
let(:content) { <<-EOT
47+
class Test::NoParams {
48+
user { 'foo':
49+
ensure => 'present',
50+
name => 'name',
51+
}
52+
}
53+
EOT
54+
}
55+
let(:line_num) { 1 }
56+
let(:char_num) { 5 }
57+
58+
it_should_behave_like "a single definition result", /user\.rb/
59+
end
60+
61+
context 'When cursor is on a defined type' do
62+
let(:content) { <<-EOT
63+
class Test::NoParams {
64+
deftypeone { 'foo':
65+
ensure => 'present',
66+
}
67+
}
68+
EOT
69+
}
70+
let(:line_num) { 1 }
71+
let(:char_num) { 5 }
72+
73+
it_should_behave_like "a single definition result", /deftypeone\.pp/
74+
end
75+
76+
context 'When cursor is on a puppet class' do
77+
let(:content) { <<-EOT
78+
class Test::NoParams {
79+
puppetclassone { 'foo':
80+
ensure => 'present',
81+
}
82+
}
83+
EOT
84+
}
85+
let(:line_num) { 1 }
86+
let(:char_num) { 5 }
87+
88+
it_should_behave_like "a single definition result", /puppetclassone\.pp/
89+
end
90+
91+
context 'When cursor is on a classname for an include statement' do
92+
let(:content) { <<-EOT
93+
class Test::NoParams {
94+
include puppetclassone
95+
}
96+
EOT
97+
}
98+
let(:line_num) { 1 }
99+
let(:char_num) { 14 }
100+
101+
it_should_behave_like "a single definition result", /puppetclassone\.pp/
102+
end
103+
104+
context 'When cursor is on a fully qualified classname for an include statement' do
105+
let(:content) { <<-EOT
106+
class Test::NoParams {
107+
include testclasses::nestedclass
108+
}
109+
EOT
110+
}
111+
let(:line_num) { 1 }
112+
let(:char_num) { 14 }
113+
114+
it_should_behave_like "a single definition result", /nestedclass\.pp/
115+
end
116+
117+
context 'When cursor is on a root classname for an include statement' do
118+
let(:content) { <<-EOT
119+
class Test::NoParams {
120+
include ::puppetclassone
121+
}
122+
EOT
123+
}
124+
let(:line_num) { 1 }
125+
let(:char_num) { 14 }
126+
127+
it_should_behave_like "a single definition result", /puppetclassone\.pp/
128+
end
129+
130+
context 'When cursor is on a function name for an include statement' do
131+
let(:content) { <<-EOT
132+
class Test::NoParams {
133+
include puppetclassone
134+
}
135+
EOT
136+
}
137+
let(:line_num) { 1 }
138+
let(:char_num) { 5 }
139+
140+
it_should_behave_like "a single definition result", /include\.rb/
141+
end
142+
143+
end
144+
end

0 commit comments

Comments
 (0)