Skip to content

Commit

Permalink
add some def-alias tests
Browse files Browse the repository at this point in the history
  • Loading branch information
PgBiel committed Jan 27, 2025
1 parent 1c78aa4 commit 7cdfbb2
Show file tree
Hide file tree
Showing 2 changed files with 81 additions and 3 deletions.
4 changes: 2 additions & 2 deletions server/internal/lsp/search/search_completion_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down Expand Up @@ -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),
Expand Down
80 changes: 79 additions & 1 deletion server/internal/lsp/search/search_find_access_path_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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() {}
Expand Down Expand Up @@ -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) {
Expand Down Expand Up @@ -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) {
Expand Down

0 comments on commit 7cdfbb2

Please sign in to comment.