File tree Expand file tree Collapse file tree 2 files changed +44
-25
lines changed
Expand file tree Collapse file tree 2 files changed +44
-25
lines changed Original file line number Diff line number Diff line change 11package log
22
3- import "strings"
3+ import (
4+ "errors"
5+ "fmt"
6+ "strings"
7+ )
48
59// Level is a logging level.
610type Level int32
@@ -38,20 +42,23 @@ func (l Level) String() string {
3842 }
3943}
4044
45+ // ErrInvalidLevel is an error returned when parsing an invalid level string.
46+ var ErrInvalidLevel = errors .New ("invalid level" )
47+
4148// ParseLevel converts level in string to Level type. Default level is InfoLevel.
42- func ParseLevel (level string ) Level {
49+ func ParseLevel (level string ) ( Level , error ) {
4350 switch strings .ToLower (level ) {
4451 case DebugLevel .String ():
45- return DebugLevel
52+ return DebugLevel , nil
4653 case InfoLevel .String ():
47- return InfoLevel
54+ return InfoLevel , nil
4855 case WarnLevel .String ():
49- return WarnLevel
56+ return WarnLevel , nil
5057 case ErrorLevel .String ():
51- return ErrorLevel
58+ return ErrorLevel , nil
5259 case FatalLevel .String ():
53- return FatalLevel
60+ return FatalLevel , nil
5461 default :
55- return InfoLevel
62+ return 0 , fmt . Errorf ( "%w: %q" , ErrInvalidLevel , level )
5663 }
5764}
Original file line number Diff line number Diff line change 11package log
22
33import (
4+ "fmt"
45 "testing"
56
67 "github.com/stretchr/testify/assert"
@@ -10,52 +11,63 @@ func TestDefaultLevel(t *testing.T) {
1011 var level Level
1112 assert .Equal (t , InfoLevel , level )
1213}
14+
1315func TestParseLevel (t * testing.T ) {
1416 testCases := []struct {
1517 name string
16- level string
17- expLevel Level
18+ input string
19+ expected Level
20+ error error
1821 }{
1922 {
2023 name : "Parse debug" ,
21- level : "debug" ,
22- expLevel : DebugLevel ,
24+ input : "debug" ,
25+ expected : DebugLevel ,
26+ error : nil ,
2327 },
2428 {
2529 name : "Parse info" ,
26- level : "Info" ,
27- expLevel : InfoLevel ,
30+ input : "Info" ,
31+ expected : InfoLevel ,
32+ error : nil ,
2833 },
2934 {
3035 name : "Parse warn" ,
31- level : "WARN" ,
32- expLevel : WarnLevel ,
36+ input : "WARN" ,
37+ expected : WarnLevel ,
38+ error : nil ,
3339 },
3440 {
3541 name : "Parse error" ,
36- level : "error" ,
37- expLevel : ErrorLevel ,
42+ input : "error" ,
43+ expected : ErrorLevel ,
44+ error : nil ,
3845 },
3946 {
4047 name : "Parse fatal" ,
41- level : "FATAL" ,
42- expLevel : FatalLevel ,
48+ input : "FATAL" ,
49+ expected : FatalLevel ,
50+ error : nil ,
4351 },
4452 {
4553 name : "Default" ,
46- level : "" ,
47- expLevel : InfoLevel ,
54+ input : "" ,
55+ expected : InfoLevel ,
56+ error : fmt .Errorf ("%w: %q" , ErrInvalidLevel , "" ),
4857 },
4958 {
5059 name : "Wrong level, set INFO" ,
51- level : "WRONG_LEVEL" ,
52- expLevel : InfoLevel ,
60+ input : "WRONG_LEVEL" ,
61+ expected : InfoLevel ,
62+ error : fmt .Errorf ("%w: %q" , ErrInvalidLevel , "WRONG_LEVEL" ),
5363 },
5464 }
5565
5666 for _ , tc := range testCases {
5767 t .Run (tc .name , func (t * testing.T ) {
58- assert .Equal (t , tc .expLevel , ParseLevel (tc .level ))
68+ lvl , err := ParseLevel (tc .input )
69+ assert .Equal (t , tc .expected , lvl )
70+ assert .Equal (t , tc .error , err )
5971 })
6072 }
6173}
You can’t perform that action at this time.
0 commit comments