reprogl

Форк
0
/
config_test.go 
112 строк · 2.1 Кб
1
package container
2

3
import (
4
	"reflect"
5
	"testing"
6

7
	"github.com/gookit/ini/v2"
8
)
9

10
type testStruct struct {
11
	A string `app_config:"PARAM_A"`
12
	B int    `app_config:"PARAM_B"`
13
	C string
14
}
15

16
type testInvalidStruct struct {
17
	D string  `app_config:"PARAM_D"`
18
	E int     `app_config:"PARAM_E"`
19
	F float32 `app_config:"PARAM_F"`
20
}
21

22
type testInvalidParam struct {
23
	D string `app_config:"PARAM_D"`
24
	Z int    `app_config:"PARAM_Z"`
25
}
26

27
var iniStr = `PARAM_A = test_a
28
PARAM_B=42
29
PARAM_D=test_d
30
PARAM_E=568
31
PARAM_F=0.301
32
`
33

34
func TestParseField(t *testing.T) {
35
	ta := testStruct{}
36
	fields := parseFields(reflect.TypeOf(ta))
37

38
	if !testContainField("A", fields) {
39
		t.Error("testStruct does not contain the \"A\" field")
40
	}
41

42
	if testContainField("C", fields) {
43
		t.Error("testStruct contain the \"C\" field")
44
	}
45
}
46

47
func TestSetupField(t *testing.T) {
48
	ini.LoadStrings(iniStr)
49

50
	ta := testStruct{}
51
	fields := parseFields(reflect.TypeOf(ta))
52

53
	rv := reflect.ValueOf(&ta)
54
	err := setupFields(rv, fields)
55
	if err != nil {
56
		t.Error(err.Error())
57
	}
58

59
	if ta.A != "test_a" {
60
		t.Error("incorrect value for PARAM_A")
61
	}
62
	if ta.B != 42 {
63
		t.Error("incorrect value for PARAM_B")
64
	}
65
	if ta.C != "" {
66
		t.Error("incorrect value for \"C\" field")
67
	}
68
}
69

70
func TestSetupFieldWithInvalidStruct(t *testing.T) {
71
	ini.LoadStrings(iniStr)
72

73
	ta := testInvalidStruct{}
74
	fields := parseFields(reflect.TypeOf(ta))
75

76
	rv := reflect.ValueOf(&ta)
77
	err := setupFields(rv, fields)
78
	if err != nil {
79
		if err.Error() != "config: undefined type float32 of field F" {
80
			t.Error("unknown error message for undefined type")
81
		}
82
	} else {
83
		t.Error("ignoring unknown type")
84
	}
85
}
86

87
func TestInvalidParameter(t *testing.T) {
88
	ini.LoadStrings(iniStr)
89

90
	ta := testInvalidParam{}
91
	fields := parseFields(reflect.TypeOf(ta))
92

93
	rv := reflect.ValueOf(&ta)
94
	err := setupFields(rv, fields)
95
	if err != nil {
96
		if err.Error() != "app.ini: Undefined parameter \"PARAM_Z\"" {
97
			t.Error("unknown error message for undefined parameter")
98
		}
99
	} else {
100
		t.Error("ignoring unknown parameter")
101
	}
102
}
103

104
func testContainField(fieldName string, fields []structField) bool {
105
	for _, el := range fields {
106
		if el.name == fieldName {
107
			return true
108
		}
109
	}
110

111
	return false
112
}
113

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.