Move "copy" functions to their own file
This commit is contained in:
parent
cd63ed1fe4
commit
d2aba08773
@ -15,48 +15,3 @@ func (d Dict) HasKey(key string) bool {
|
|||||||
_, ok := d[key]
|
_, ok := d[key]
|
||||||
return ok
|
return ok
|
||||||
}
|
}
|
||||||
|
|
||||||
func Copy(dest *Dict, src Dict) {
|
|
||||||
if *dest == nil {
|
|
||||||
*dest = make(Dict)
|
|
||||||
}
|
|
||||||
for k, v := range src {
|
|
||||||
if vv, ok := v.(Dict); ok {
|
|
||||||
t := make(Dict)
|
|
||||||
Copy(&t, vv)
|
|
||||||
(*dest)[k] = t
|
|
||||||
} else {
|
|
||||||
(*dest)[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (dest *Dict) CopyFrom(src Dict) {
|
|
||||||
if *dest == nil {
|
|
||||||
*dest = make(Dict)
|
|
||||||
}
|
|
||||||
for k, v := range src {
|
|
||||||
if vv, ok := v.(Dict); ok {
|
|
||||||
t := make(Dict)
|
|
||||||
t.CopyFrom(vv)
|
|
||||||
(*dest)[k] = t
|
|
||||||
} else {
|
|
||||||
(*dest)[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (src Dict) CopyTo(dest *Dict) {
|
|
||||||
if *dest == nil {
|
|
||||||
*dest = make(Dict)
|
|
||||||
}
|
|
||||||
for k, v := range src {
|
|
||||||
if vv, ok := v.(Dict); ok {
|
|
||||||
t := make(Dict)
|
|
||||||
vv.CopyTo(&t)
|
|
||||||
(*dest)[k] = t
|
|
||||||
} else {
|
|
||||||
(*dest)[k] = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
46
internal/dict/dict_copy.go
Normal file
46
internal/dict/dict_copy.go
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
package dict
|
||||||
|
|
||||||
|
func Copy(dest *Dict, src Dict) {
|
||||||
|
if *dest == nil {
|
||||||
|
*dest = make(Dict)
|
||||||
|
}
|
||||||
|
for k, v := range src {
|
||||||
|
if vv, ok := v.(Dict); ok {
|
||||||
|
t := make(Dict)
|
||||||
|
Copy(&t, vv)
|
||||||
|
(*dest)[k] = t
|
||||||
|
} else {
|
||||||
|
(*dest)[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (dest *Dict) CopyFrom(src Dict) {
|
||||||
|
if *dest == nil {
|
||||||
|
*dest = make(Dict)
|
||||||
|
}
|
||||||
|
for k, v := range src {
|
||||||
|
if vv, ok := v.(Dict); ok {
|
||||||
|
t := make(Dict)
|
||||||
|
t.CopyFrom(vv)
|
||||||
|
(*dest)[k] = t
|
||||||
|
} else {
|
||||||
|
(*dest)[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (src Dict) CopyTo(dest *Dict) {
|
||||||
|
if *dest == nil {
|
||||||
|
*dest = make(Dict)
|
||||||
|
}
|
||||||
|
for k, v := range src {
|
||||||
|
if vv, ok := v.(Dict); ok {
|
||||||
|
t := make(Dict)
|
||||||
|
vv.CopyTo(&t)
|
||||||
|
(*dest)[k] = t
|
||||||
|
} else {
|
||||||
|
(*dest)[k] = v
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
81
internal/dict/dict_copy_test.go
Normal file
81
internal/dict/dict_copy_test.go
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
package dict
|
||||||
|
|
||||||
|
import (
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
func TestCopy(t *testing.T) {
|
||||||
|
originalDict, err := loadYaml("test_data/dict2.yaml")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("loadYaml() returned an error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newDict1 := Dict{}
|
||||||
|
Copy(&newDict1, originalDict)
|
||||||
|
if !reflect.DeepEqual(newDict1, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict1)
|
||||||
|
}
|
||||||
|
|
||||||
|
newDict2 := make(Dict)
|
||||||
|
Copy(&newDict2, originalDict)
|
||||||
|
if !reflect.DeepEqual(newDict2, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict2)
|
||||||
|
}
|
||||||
|
|
||||||
|
var newDict3 Dict
|
||||||
|
Copy(&newDict3, originalDict)
|
||||||
|
if !reflect.DeepEqual(newDict3, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCopyFrom(t *testing.T) {
|
||||||
|
originalDict, err := loadYaml("test_data/dict2.yaml")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("loadYaml() returned an error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newDict1 := Dict{}
|
||||||
|
newDict1.CopyFrom(originalDict)
|
||||||
|
if !reflect.DeepEqual(newDict1, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict1)
|
||||||
|
}
|
||||||
|
|
||||||
|
newDict2 := make(Dict)
|
||||||
|
newDict2.CopyFrom(originalDict)
|
||||||
|
if !reflect.DeepEqual(newDict2, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict2)
|
||||||
|
}
|
||||||
|
|
||||||
|
var newDict3 Dict
|
||||||
|
newDict3.CopyFrom(originalDict)
|
||||||
|
if !reflect.DeepEqual(newDict3, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict3)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestCopyTo(t *testing.T) {
|
||||||
|
originalDict, err := loadYaml("test_data/dict2.yaml")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("loadYaml() returned an error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
newDict1 := Dict{}
|
||||||
|
originalDict.CopyTo(&newDict1)
|
||||||
|
if !reflect.DeepEqual(newDict1, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict1)
|
||||||
|
}
|
||||||
|
|
||||||
|
newDict2 := make(Dict)
|
||||||
|
originalDict.CopyTo(&newDict2)
|
||||||
|
if !reflect.DeepEqual(newDict2, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict2)
|
||||||
|
}
|
||||||
|
|
||||||
|
var newDict3 Dict
|
||||||
|
originalDict.CopyTo(&newDict3)
|
||||||
|
if !reflect.DeepEqual(newDict3, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict3)
|
||||||
|
}
|
||||||
|
}
|
@ -1,87 +1,9 @@
|
|||||||
package dict
|
package dict
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"reflect"
|
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func sampleDict() Dict {
|
|
||||||
return Dict{
|
|
||||||
"name": "Test Project",
|
|
||||||
"version": 1.0,
|
|
||||||
"active": true,
|
|
||||||
"description": "This is a sample YAML file for testing the Dict package.",
|
|
||||||
"metadata": Dict{
|
|
||||||
"author": "John Doe",
|
|
||||||
"license": "MIT",
|
|
||||||
"tags": []interface{}{"sample", "test", "yaml"},
|
|
||||||
},
|
|
||||||
"configuration": Dict{
|
|
||||||
"threads": 4,
|
|
||||||
"verbose": true,
|
|
||||||
"features": []interface{}{"logging", "monitoring"},
|
|
||||||
},
|
|
||||||
"resources": []interface{}{
|
|
||||||
Dict{
|
|
||||||
"type": "database",
|
|
||||||
"name": "primary-db",
|
|
||||||
"properties": Dict{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 5432,
|
|
||||||
"credentials": Dict{
|
|
||||||
"username": "admin",
|
|
||||||
"password": "secret",
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
Dict{
|
|
||||||
"type": "cache",
|
|
||||||
"name": "redis-cache",
|
|
||||||
"properties": Dict{
|
|
||||||
"host": "localhost",
|
|
||||||
"port": 6379,
|
|
||||||
"ttl": 3600,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"nested": Dict{
|
|
||||||
"level1": Dict{
|
|
||||||
"level2": Dict{
|
|
||||||
"level3": Dict{
|
|
||||||
"key": "value",
|
|
||||||
"array": []interface{}{1, 2, 3, 4.5},
|
|
||||||
"nestedArray": []interface{}{
|
|
||||||
Dict{"key1": "val1"},
|
|
||||||
Dict{
|
|
||||||
"key2": "val2",
|
|
||||||
"subNested": Dict{
|
|
||||||
"subKey1": "subVal1",
|
|
||||||
"subKey2": 2,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
},
|
|
||||||
"additionalNotes": "This is a multiline string.\nIt can contain new lines and spaces.\nIt's useful for longer descriptions or content.",
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestSampleDict(t *testing.T) {
|
|
||||||
originalDict, err := loadYaml("test_data/dict2.yaml")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("loadYaml() returned an error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
dict := sampleDict()
|
|
||||||
|
|
||||||
if !reflect.DeepEqual(dict, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, dict)
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestNew(t *testing.T) {
|
func TestNew(t *testing.T) {
|
||||||
d := New()
|
d := New()
|
||||||
if d == nil {
|
if d == nil {
|
||||||
@ -130,78 +52,3 @@ func TestIsDict(t *testing.T) {
|
|||||||
t.Errorf("Expected false, got %v", r)
|
t.Errorf("Expected false, got %v", r)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestCopy(t *testing.T) {
|
|
||||||
originalDict, err := loadYaml("test_data/dict2.yaml")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("loadYaml() returned an error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
newDict1 := Dict{}
|
|
||||||
Copy(&newDict1, originalDict)
|
|
||||||
if !reflect.DeepEqual(newDict1, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict1)
|
|
||||||
}
|
|
||||||
|
|
||||||
newDict2 := make(Dict)
|
|
||||||
Copy(&newDict2, originalDict)
|
|
||||||
if !reflect.DeepEqual(newDict2, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict2)
|
|
||||||
}
|
|
||||||
|
|
||||||
var newDict3 Dict
|
|
||||||
Copy(&newDict3, originalDict)
|
|
||||||
if !reflect.DeepEqual(newDict3, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCopyFrom(t *testing.T) {
|
|
||||||
originalDict, err := loadYaml("test_data/dict2.yaml")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("loadYaml() returned an error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
newDict1 := Dict{}
|
|
||||||
newDict1.CopyFrom(originalDict)
|
|
||||||
if !reflect.DeepEqual(newDict1, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict1)
|
|
||||||
}
|
|
||||||
|
|
||||||
newDict2 := make(Dict)
|
|
||||||
newDict2.CopyFrom(originalDict)
|
|
||||||
if !reflect.DeepEqual(newDict2, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict2)
|
|
||||||
}
|
|
||||||
|
|
||||||
var newDict3 Dict
|
|
||||||
newDict3.CopyFrom(originalDict)
|
|
||||||
if !reflect.DeepEqual(newDict3, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func TestCopyTo(t *testing.T) {
|
|
||||||
originalDict, err := loadYaml("test_data/dict2.yaml")
|
|
||||||
if err != nil {
|
|
||||||
t.Fatalf("loadYaml() returned an error: %v", err)
|
|
||||||
}
|
|
||||||
|
|
||||||
newDict1 := Dict{}
|
|
||||||
originalDict.CopyTo(&newDict1)
|
|
||||||
if !reflect.DeepEqual(newDict1, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict1)
|
|
||||||
}
|
|
||||||
|
|
||||||
newDict2 := make(Dict)
|
|
||||||
originalDict.CopyTo(&newDict2)
|
|
||||||
if !reflect.DeepEqual(newDict2, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict2)
|
|
||||||
}
|
|
||||||
|
|
||||||
var newDict3 Dict
|
|
||||||
originalDict.CopyTo(&newDict3)
|
|
||||||
if !reflect.DeepEqual(newDict3, originalDict) {
|
|
||||||
t.Errorf("Expected dict to be %v, got %v", originalDict, newDict3)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
@ -2,6 +2,8 @@ package dict
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
|
"reflect"
|
||||||
|
"testing"
|
||||||
|
|
||||||
"gopkg.in/yaml.v3"
|
"gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
@ -25,3 +27,80 @@ func loadDictDictToDictTestCases(fn string) []dictDictToDictTestCase {
|
|||||||
}
|
}
|
||||||
return testCases
|
return testCases
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sampleDict() Dict {
|
||||||
|
return Dict{
|
||||||
|
"name": "Test Project",
|
||||||
|
"version": 1.0,
|
||||||
|
"active": true,
|
||||||
|
"description": "This is a sample YAML file for testing the Dict package.",
|
||||||
|
"metadata": Dict{
|
||||||
|
"author": "John Doe",
|
||||||
|
"license": "MIT",
|
||||||
|
"tags": []interface{}{"sample", "test", "yaml"},
|
||||||
|
},
|
||||||
|
"configuration": Dict{
|
||||||
|
"threads": 4,
|
||||||
|
"verbose": true,
|
||||||
|
"features": []interface{}{"logging", "monitoring"},
|
||||||
|
},
|
||||||
|
"resources": []interface{}{
|
||||||
|
Dict{
|
||||||
|
"type": "database",
|
||||||
|
"name": "primary-db",
|
||||||
|
"properties": Dict{
|
||||||
|
"host": "localhost",
|
||||||
|
"port": 5432,
|
||||||
|
"credentials": Dict{
|
||||||
|
"username": "admin",
|
||||||
|
"password": "secret",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Dict{
|
||||||
|
"type": "cache",
|
||||||
|
"name": "redis-cache",
|
||||||
|
"properties": Dict{
|
||||||
|
"host": "localhost",
|
||||||
|
"port": 6379,
|
||||||
|
"ttl": 3600,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"nested": Dict{
|
||||||
|
"level1": Dict{
|
||||||
|
"level2": Dict{
|
||||||
|
"level3": Dict{
|
||||||
|
"key": "value",
|
||||||
|
"array": []interface{}{1, 2, 3, 4.5},
|
||||||
|
"nestedArray": []interface{}{
|
||||||
|
Dict{"key1": "val1"},
|
||||||
|
Dict{
|
||||||
|
"key2": "val2",
|
||||||
|
"subNested": Dict{
|
||||||
|
"subKey1": "subVal1",
|
||||||
|
"subKey2": 2,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
"additionalNotes": "This is a multiline string.\nIt can contain new lines and spaces.\nIt's useful for longer descriptions or content.",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestSampleDict(t *testing.T) {
|
||||||
|
originalDict, err := loadYaml("test_data/dict2.yaml")
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("loadYaml() returned an error: %v", err)
|
||||||
|
}
|
||||||
|
|
||||||
|
dict := sampleDict()
|
||||||
|
|
||||||
|
if !reflect.DeepEqual(dict, originalDict) {
|
||||||
|
t.Errorf("Expected dict to be %v, got %v", originalDict, dict)
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user