Skip to content

Commit d57c24e

Browse files
committed
(maint) Add tests for workspace symbols
Previously the workspace symbols method was added but there were not tests. This commit adds unit tests.
1 parent 3b18b0e commit d57c24e

File tree

2 files changed

+53
-3
lines changed

2 files changed

+53
-3
lines changed

spec/languageserver/spec_helper.rb

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -55,8 +55,9 @@ def add_random_basepuppetobject_values!(value)
5555
value
5656
end
5757

58-
def random_sidecar_puppet_class
58+
def random_sidecar_puppet_class(key = nil)
5959
result = add_random_basepuppetobject_values!(PuppetLanguageServer::Sidecar::Protocol::PuppetClass.new())
60+
result.key = key unless key.nil?
6061
result.doc = 'doc' + rand(1000).to_s
6162
result.parameters = {
6263
"attr_name1" => { :type => "Optional[String]", :doc => 'attr_doc1' },
@@ -65,8 +66,9 @@ def random_sidecar_puppet_class
6566
result
6667
end
6768

68-
def random_sidecar_puppet_function
69+
def random_sidecar_puppet_function(key = nil)
6970
result = add_random_basepuppetobject_values!(PuppetLanguageServer::Sidecar::Protocol::PuppetFunction.new())
71+
result.key = key unless key.nil?
7072
result.doc = 'doc' + rand(1000).to_s
7173
result.function_version = rand(1) + 3
7274
result.signatures << random_sidecar_puppet_function_signature
@@ -96,8 +98,9 @@ def random_sidecar_puppet_function_signature_parameter
9698
result
9799
end
98100

99-
def random_sidecar_puppet_type
101+
def random_sidecar_puppet_type(key = nil)
100102
result = add_random_basepuppetobject_values!(PuppetLanguageServer::Sidecar::Protocol::PuppetType.new())
103+
result.key = key unless key.nil?
101104
result.doc = 'doc' + rand(1000).to_s
102105
result.attributes = {
103106
:attr_name1 => { :type => :attr_type, :doc => 'attr_doc1', :required? => false, :isnamevar? => true },

spec/languageserver/unit/puppet-languageserver/manifest/document_symbol_provider_spec.rb

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,56 @@
2222
end
2323
end
2424

25+
RSpec::Matchers.define :be_symbol_information do |name, kind|
26+
match do |actual|
27+
actual.name == name &&
28+
actual.kind == kind
29+
end
30+
31+
failure_message do |actual|
32+
"expected that symbol called '#{actual.name}' of type '#{actual.kind}' would be " +
33+
"a symbol called '#{name}', of type '#{kind}'"
34+
end
35+
36+
description do
37+
"be a document symbol called '#{name}' of type #{kind} located at #{start_line}, #{start_char}, #{end_line}, #{end_char}"
38+
end
39+
end
40+
2541
describe 'PuppetLanguageServer::Manifest::DocumentSymbolProvider' do
2642
let(:subject) { PuppetLanguageServer::Manifest::DocumentSymbolProvider }
2743

44+
describe '#workspace_symbols' do
45+
let(:cache) { PuppetLanguageServer::PuppetHelper::Cache.new }
46+
47+
before(:each) do
48+
# Add test objects
49+
origin = :default
50+
cache.import_sidecar_list!([random_sidecar_puppet_class(:class1)], :class, origin)
51+
cache.import_sidecar_list!([random_sidecar_puppet_function(:func1)], :function, origin)
52+
cache.import_sidecar_list!([random_sidecar_puppet_type(:type1)], :type, origin)
53+
end
54+
55+
it 'should emit all known objects for an empty query' do
56+
result = subject.workspace_symbols(nil, cache)
57+
58+
expect(result[0]).to be_symbol_information('class1', LSP::SymbolKind::CLASS)
59+
expect(result[1]).to be_symbol_information('func1', LSP::SymbolKind::FUNCTION)
60+
expect(result[2]).to be_symbol_information('type1', LSP::SymbolKind::METHOD)
61+
62+
all_cache_names = []
63+
cache.all_objects { |key, _| all_cache_names << key.to_s }
64+
expect(result.count).to eq(all_cache_names.count)
65+
end
66+
67+
it 'should only emit objects that match a simple text query' do
68+
result = subject.workspace_symbols('func', cache)
69+
70+
expect(result.count).to eq(1)
71+
expect(result[0]).to be_symbol_information('func1', LSP::SymbolKind::FUNCTION)
72+
end
73+
end
74+
2875
context 'with Puppet 4.0 and below', :if => Gem::Version.new(Puppet.version) < Gem::Version.new('5.0.0') do
2976
describe '#extract_document_symbols' do
3077
it 'should always return an empty array' do

0 commit comments

Comments
 (0)