Skip to content

Commit

Permalink
test: add tests for Options (#19)
Browse files Browse the repository at this point in the history
  • Loading branch information
tmzane authored Oct 28, 2023
1 parent 134336b commit 61cece7
Show file tree
Hide file tree
Showing 2 changed files with 49 additions and 13 deletions.
31 changes: 18 additions & 13 deletions sloglint.go
Original file line number Diff line number Diff line change
Expand Up @@ -39,19 +39,22 @@ func New(opts *Options) *analysis.Analyzer {
Requires: []*analysis.Analyzer{inspect.Analyzer},
Run: func(pass *analysis.Pass) (any, error) {
if opts.KVOnly && opts.AttrOnly {
return nil, errors.New("sloglint: incompatible options provided")
return nil, fmt.Errorf("sloglint: Options.KVOnly and Options.AttrOnly: %w", errIncompatible)
}
switch opts.KeyNamingCase {
case "", snakeCase, kebabCase, camelCase, pascalCase:
default:
return nil, fmt.Errorf("sloglint: Options.KeyNamingCase=%s: %w", opts.KeyNamingCase, errInvalidValue)
}
run(pass, opts)
return nil, nil
},
}
}

const (
snakeCase = "snake"
kebabCase = "kebab"
camelCase = "camel"
pascalCase = "pascal"
var (
errIncompatible = errors.New("incompatible options")
errInvalidValue = errors.New("invalid value")
)

func flags(opts *Options) flag.FlagSet {
Expand All @@ -72,13 +75,8 @@ func flags(opts *Options) flag.FlagSet {
boolVar(&opts.ArgsOnSepLines, "args-on-sep-lines", "enforce putting arguments on separate lines")

fs.Func("key-naming-case", "enforce a single key naming convention (snake|kebab|camel|pascal)", func(s string) error {
switch s {
case snakeCase, kebabCase, camelCase, pascalCase:
opts.KeyNamingCase = s
return nil
default:
return fmt.Errorf("sloglint: -key-naming-case=%s: invalid value", s)
}
opts.KeyNamingCase = s
return nil
})

return *fs
Expand Down Expand Up @@ -118,6 +116,13 @@ var attrFuncs = map[string]struct{}{
"log/slog.Any": {},
}

const (
snakeCase = "snake"
kebabCase = "kebab"
camelCase = "camel"
pascalCase = "pascal"
)

func run(pass *analysis.Pass, opts *Options) {
visit := pass.ResultOf[inspect.Analyzer].(*inspector.Inspector)
filter := []ast.Node{(*ast.CallExpr)(nil)}
Expand Down
31 changes: 31 additions & 0 deletions sloglint_internal_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package sloglint

import (
"errors"
"testing"
)

func TestOptions(t *testing.T) {
tests := map[string]struct {
opts Options
err error
}{
"incompatible": {
opts: Options{KVOnly: true, AttrOnly: true},
err: errIncompatible,
},
"invalid value": {
opts: Options{KeyNamingCase: "-"},
err: errInvalidValue,
},
}

for name, test := range tests {
t.Run(name, func(t *testing.T) {
analyzer := New(&test.opts)
if _, err := analyzer.Run(nil); !errors.Is(err, test.err) {
t.Errorf("errors.Is() mismatch\ngot: %v\nwant: %v", err, test.err)
}
})
}
}

0 comments on commit 61cece7

Please sign in to comment.