From 8d01004900b53ebc2ae06de7887cdf6b8ad76072 Mon Sep 17 00:00:00 2001 From: Tobias Date: Sat, 17 Aug 2024 12:32:05 +0200 Subject: [PATCH] add ErrFlagsAlreadyParsed; fix tests --- box_test.go | 14 +++++++++----- options.go | 6 +++++- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/box_test.go b/box_test.go index b2adfa4..43fad00 100644 --- a/box_test.go +++ b/box_test.go @@ -3,7 +3,6 @@ package box_test import ( "context" "errors" - "flag" "log/slog" "net/http" "testing" @@ -53,15 +52,20 @@ func TestWithConfigFromPath(t *testing.T) { } func TestWithFlags(t *testing.T) { + defer func() { + if r := recover(); r != nil { + // we expect to panic due to go test already parsing flags + if !errors.Is(r.(error), box.ErrFlagsAlreadyParsed) { + t.Errorf("expected %s, got %s", box.ErrFlagsAlreadyParsed, r) + } + } + }() + b := box.New(box.WithFlags()) if b == nil { t.Error("box.New() returned nil") return } - - if !flag.Parsed() { - t.Errorf("flag.Parsed() should be true") - } } func TestWithGlobalLogger(t *testing.T) { diff --git a/options.go b/options.go index b79725e..17b6aba 100644 --- a/options.go +++ b/options.go @@ -1,6 +1,7 @@ package box import ( + "errors" "flag" "net/http" "os" @@ -11,6 +12,9 @@ import ( "gopkg.in/yaml.v3" ) +// ErrFlagsAlreadyParsed indicates that the flag.Parse function has already been called. +var ErrFlagsAlreadyParsed = errors.New("flag.Parse() has already been called") + // Option is a modifier function which can alter the provided functionality of a Box. type Option func(*Box) @@ -59,7 +63,7 @@ func WithFlags() Option { flag.StringVar(&box.Config.TLSKeyFile, "tls-key-file", box.Config.TLSKeyFile, "Webserver TLS key file") if flag.Parsed() { - panic("flag.Parse() has already been called") + panic(ErrFlagsAlreadyParsed) } flag.Parse()