From 7cdfbb2148ff453156d6432dfe0862a77d0d5a04 Mon Sep 17 00:00:00 2001 From: PgBiel <9021226+PgBiel@users.noreply.github.com> Date: Mon, 27 Jan 2025 01:31:46 -0300 Subject: [PATCH] add some def-alias tests --- .../lsp/search/search_completion_list.go | 4 +- .../search/search_find_access_path_test.go | 80 ++++++++++++++++++- 2 files changed, 81 insertions(+), 3 deletions(-) diff --git a/server/internal/lsp/search/search_completion_list.go b/server/internal/lsp/search/search_completion_list.go index 4607ff9..a125a18 100644 --- a/server/internal/lsp/search/search_completion_list.go +++ b/server/internal/lsp/search/search_completion_list.go @@ -313,7 +313,7 @@ func (s *Search) BuildCompletionList( Label: assoc.GetName(), Kind: &assoc.Kind, - // No documentation for enumerators at this time + // No documentation for associated values at this time Documentation: nil, Detail: GetCompletionDetail(&assoc), @@ -362,7 +362,7 @@ func (s *Search) BuildCompletionList( Label: assoc.GetName(), Kind: &assoc.Kind, - // No documentation for enumerators at this time + // No documentation for associated values at this time Documentation: nil, Detail: GetCompletionDetail(&assoc), diff --git a/server/internal/lsp/search/search_find_access_path_test.go b/server/internal/lsp/search/search_find_access_path_test.go index 31d0d5d..d7d366d 100644 --- a/server/internal/lsp/search/search_find_access_path_test.go +++ b/server/internal/lsp/search/search_find_access_path_test.go @@ -366,7 +366,7 @@ func TestProjectState_findClosestSymbolDeclaration_access_path_enums(t *testing. assert.True(t, symbolOption.IsNone(), "Element was found") }) - t.Run("Should find enum method", func(t *testing.T) { + t.Run("Should find enum method on instance variable", func(t *testing.T) { symbolOption := SearchUnderCursor_AccessPath( `enum WindowStatus { OPEN, BACKGROUND, MINIMIZED } fn bool WindowStatus.isOpen() {} @@ -446,6 +446,54 @@ func TestProjectState_findClosestSymbolDeclaration_access_path_enums(t *testing. assert.Equal(t, "assoc", variable.GetName()) assert.Equal(t, "int", variable.GetType().GetName()) }) + + t.Run("Should find enumerator on def-aliased enum", func(t *testing.T) { + symbolOption := SearchUnderCursor_AccessPath( + `enum WindowStatus { OPEN, BACKGROUND, MINIMIZED } + def AliasStatus = WindowStatus; + WindowStatus stat = AliasStatus.O|||PEN;`, + ) + + assert.False(t, symbolOption.IsNone(), "Element not found") + _, ok := symbolOption.Get().(*idx.Enumerator) + assert.Equal(t, true, ok, fmt.Sprintf("The symbol is not an enumerator, %s was found", reflect.TypeOf(symbolOption.Get()))) + assert.Equal(t, "OPEN", symbolOption.Get().GetName()) + }) + + t.Run("Should find associated value on def-aliased instance", func(t *testing.T) { + symbolOption := SearchUnderCursor_AccessPath( + `enum WindowStatus : (int assoc) { + OPEN = 5, + BACKGROUND = 6, + MINIMIZED = 7 + } + WindowStatus stat = WindowStatus.OPEN; + def alias_stat = stat; + int val = alias_stat.a|||ssoc;`, + ) + + assert.False(t, symbolOption.IsNone(), "Element not found") + variable, ok := symbolOption.Get().(*idx.Variable) + assert.True(t, ok, fmt.Sprintf("The symbol is not a variable, %s was found", reflect.TypeOf(symbolOption.Get()))) + assert.Equal(t, "assoc", variable.GetName()) + assert.Equal(t, "int", variable.GetType().GetName()) + }) + + t.Run("Should find enum method on def-aliased global variable", func(t *testing.T) { + symbolOption := SearchUnderCursor_AccessPath( + `enum WindowStatus { OPEN, BACKGROUND, MINIMIZED } + WindowStatus stat = WindowStatus.OPEN; + def aliased_stat = stat; + fn bool WindowStatus.isOpen() {} + fn void main() { + aliased_stat.is|||Open(); + }`, + ) + + fun := symbolOption.Get().(*idx.Function) + assert.Equal(t, "WindowStatus.isOpen", fun.GetName()) + assert.Equal(t, "WindowStatus.isOpen", fun.GetFullName()) + }) } func TestProjectState_findClosestSymbolDeclaration_access_path_faults(t *testing.T) { @@ -533,6 +581,36 @@ func TestProjectState_findClosestSymbolDeclaration_access_path_faults(t *testing assert.Equal(t, "WindowError.isBad", fun.GetName()) assert.Equal(t, "WindowError.isBad", fun.GetFullName()) }) + + t.Run("Should find fault constant on def-aliased fault", func(t *testing.T) { + symbolOption := SearchUnderCursor_AccessPath( + `fault WindowError { UNEXPECTED_ERROR, SOMETHING_HAPPENED } + WindowError constant = WindowError.UNEXPECTED_ERROR; + def AliasedFault = WindowError; + WindowError value = AliasedFault.U|||NEXPECTED_ERROR;`, + ) + + assert.False(t, symbolOption.IsNone(), "Element not found") + _, ok := symbolOption.Get().(*idx.FaultConstant) + assert.True(t, ok, fmt.Sprintf("The symbol is not a fault constant, %s was found", reflect.TypeOf(symbolOption.Get()))) + assert.Equal(t, "UNEXPECTED_ERROR", symbolOption.Get().GetName()) + }) + + t.Run("Should find fault method on def-aliased global variable", func(t *testing.T) { + symbolOption := SearchUnderCursor_AccessPath( + `fault WindowError { UNEXPECTED_ERROR, SOMETHING_HAPPENED } + WindowError constant = WindowError.UNEXPECTED_ERROR; + def ct_alias = constant; + fn bool WindowError.isBad() {} + fn void main() { + ct_alias.is|||Bad(); + }`, + ) + + fun := symbolOption.Get().(*idx.Function) + assert.Equal(t, "WindowError.isBad", fun.GetName()) + assert.Equal(t, "WindowError.isBad", fun.GetFullName()) + }) } func TestProjectState_findClosestSymbolDeclaration_access_path_with_generics(t *testing.T) {