v0.0.479 AccessStruct
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m36s
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 1m36s
This commit is contained in:
235
reflectext/structAccess_test.go
Normal file
235
reflectext/structAccess_test.go
Normal file
@@ -0,0 +1,235 @@
|
||||
package reflectext
|
||||
|
||||
import "testing"
|
||||
|
||||
type TestStruct struct {
|
||||
Name string `json:"name"`
|
||||
Age int `json:"age"`
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_HappyPath(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
result, err := AccessStructByArrayPath[string](testStruct, []string{"Name"})
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "John" {
|
||||
t.Errorf("Expected 'John', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_InvalidField(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"Invalid"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByStringPath_HappyPath(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
result, err := AccessStructByStringPath[string](testStruct, "Name")
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "John" {
|
||||
t.Errorf("Expected 'John', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByStringPath_InvalidField(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
_, err := AccessStructByStringPath[string](testStruct, "Invalid")
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
type RecursiveStruct struct {
|
||||
Name string
|
||||
Sub *RecursiveStruct
|
||||
SubSlice []RecursiveStruct
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_RecursiveStruct(t *testing.T) {
|
||||
testStruct := RecursiveStruct{Name: "John", Sub: &RecursiveStruct{Name: "Jane"}}
|
||||
result, err := AccessStructByArrayPath[string](*testStruct.Sub, []string{"Name"})
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "Jane" {
|
||||
t.Errorf("Expected 'Jane', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_RecursiveStructSlice(t *testing.T) {
|
||||
testStruct := RecursiveStruct{Name: "John", SubSlice: []RecursiveStruct{{Name: "Jane"}}}
|
||||
result, err := AccessStructByArrayPath[string](testStruct.SubSlice[0], []string{"Name"})
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "Jane" {
|
||||
t.Errorf("Expected 'Jane', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_WrongType(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
_, err := AccessStructByArrayPath[int](testStruct, []string{"Name"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_InvalidPath(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"Name", "Invalid"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
type NestedStruct struct {
|
||||
Name string
|
||||
Sub *TestStruct
|
||||
}
|
||||
|
||||
func TestAccessStructByStringPath_NestedStruct(t *testing.T) {
|
||||
testStruct := NestedStruct{Name: "John", Sub: &TestStruct{Name: "Jane", Age: 30}}
|
||||
result, err := AccessStructByStringPath[string](testStruct, "Sub.Name")
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "Jane" {
|
||||
t.Errorf("Expected 'Jane', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
type DeepNestedStruct struct {
|
||||
Name string
|
||||
Sub *NestedStruct
|
||||
}
|
||||
|
||||
func TestAccessStructByStringPath_DeepNestedStruct(t *testing.T) {
|
||||
testStruct := DeepNestedStruct{Name: "John", Sub: &NestedStruct{Name: "Jane", Sub: &TestStruct{Name: "Doe", Age: 30}}}
|
||||
result, err := AccessStructByStringPath[string](testStruct, "Sub.Sub.Name")
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "Doe" {
|
||||
t.Errorf("Expected 'Doe', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
type MapStruct struct {
|
||||
Name string
|
||||
Age int
|
||||
}
|
||||
|
||||
type TestStructWithMap struct {
|
||||
MapField map[string]MapStruct
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_MapField(t *testing.T) {
|
||||
testStruct := TestStructWithMap{
|
||||
MapField: map[string]MapStruct{
|
||||
"key": {Name: "John", Age: 30},
|
||||
},
|
||||
}
|
||||
result, err := AccessStructByArrayPath[string](testStruct, []string{"MapField", "key", "Name"})
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "John" {
|
||||
t.Errorf("Expected 'John', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_InvalidMapKey(t *testing.T) {
|
||||
testStruct := TestStructWithMap{
|
||||
MapField: map[string]MapStruct{
|
||||
"key": {Name: "John", Age: 30},
|
||||
},
|
||||
}
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"MapField", "invalid", "Name"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
type ArrayStruct struct {
|
||||
Name string
|
||||
Arr []TestStruct
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_ArrayField(t *testing.T) {
|
||||
testStruct := ArrayStruct{
|
||||
Name: "John",
|
||||
Arr: []TestStruct{{Name: "Jane", Age: 30}},
|
||||
}
|
||||
result, err := AccessStructByArrayPath[string](testStruct, []string{"Arr", "0", "Name"})
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "Jane" {
|
||||
t.Errorf("Expected 'Jane', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_InvalidArrayIndex(t *testing.T) {
|
||||
testStruct := ArrayStruct{
|
||||
Name: "John",
|
||||
Arr: []TestStruct{{Name: "Jane", Age: 30}},
|
||||
}
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"Arr", "1", "Name"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
type FunctionStruct struct {
|
||||
Name string
|
||||
Func func() string
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_FunctionField(t *testing.T) {
|
||||
testStruct := FunctionStruct{Name: "John", Func: func() string { return "Hello" }}
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"Func"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_NonExistentPath(t *testing.T) {
|
||||
testStruct := TestStruct{Name: "John", Age: 30}
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"NonExistent"})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
|
||||
type NestedStructWithTag struct {
|
||||
Name string `json:"name"`
|
||||
Sub *TestStruct `json:"sub"`
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_UsedTagForKeys(t *testing.T) {
|
||||
testStruct := NestedStructWithTag{Name: "John", Sub: &TestStruct{Name: "Jane", Age: 30}}
|
||||
tag := "json"
|
||||
result, err := AccessStructByArrayPath[string](testStruct, []string{"sub", "name"}, AccessStructOpt{UsedTagForKeys: &tag})
|
||||
if err != nil {
|
||||
t.Errorf("Unexpected error: %v", err)
|
||||
}
|
||||
if result != "Jane" {
|
||||
t.Errorf("Expected 'Jane', got '%s'", result)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAccessStructByArrayPath_UsedTagForKeysInvalid(t *testing.T) {
|
||||
testStruct := NestedStructWithTag{Name: "John", Sub: &TestStruct{Name: "Jane", Age: 30}}
|
||||
tag := "json"
|
||||
_, err := AccessStructByArrayPath[string](testStruct, []string{"sub", "invalid"}, AccessStructOpt{UsedTagForKeys: &tag})
|
||||
if err == nil {
|
||||
t.Errorf("Expected error, got nil")
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user