added more int parsing and tests

This commit is contained in:
2026-01-10 18:22:16 +11:00
parent 61d519399f
commit f3312f7aef
7 changed files with 643 additions and 0 deletions

91
env/boolean_test.go vendored Normal file
View File

@@ -0,0 +1,91 @@
package env
import (
"os"
"testing"
)
func TestBool(t *testing.T) {
tests := []struct {
name string
key string
value string
defaultValue bool
expected bool
shouldSet bool
}{
// Truthy values
{"true lowercase", "TEST_BOOL", "true", false, true, true},
{"true uppercase", "TEST_BOOL", "TRUE", false, true, true},
{"true mixed case", "TEST_BOOL", "TrUe", false, true, true},
{"t", "TEST_BOOL", "t", false, true, true},
{"T", "TEST_BOOL", "T", false, true, true},
{"yes", "TEST_BOOL", "yes", false, true, true},
{"YES", "TEST_BOOL", "YES", false, true, true},
{"y", "TEST_BOOL", "y", false, true, true},
{"Y", "TEST_BOOL", "Y", false, true, true},
{"on", "TEST_BOOL", "on", false, true, true},
{"ON", "TEST_BOOL", "ON", false, true, true},
{"1", "TEST_BOOL", "1", false, true, true},
{"enable", "TEST_BOOL", "enable", false, true, true},
{"ENABLE", "TEST_BOOL", "ENABLE", false, true, true},
{"enabled", "TEST_BOOL", "enabled", false, true, true},
{"ENABLED", "TEST_BOOL", "ENABLED", false, true, true},
{"active", "TEST_BOOL", "active", false, true, true},
{"ACTIVE", "TEST_BOOL", "ACTIVE", false, true, true},
{"affirmative", "TEST_BOOL", "affirmative", false, true, true},
{"AFFIRMATIVE", "TEST_BOOL", "AFFIRMATIVE", false, true, true},
// Falsy values
{"false lowercase", "TEST_BOOL", "false", true, false, true},
{"false uppercase", "TEST_BOOL", "FALSE", true, false, true},
{"false mixed case", "TEST_BOOL", "FaLsE", true, false, true},
{"f", "TEST_BOOL", "f", true, false, true},
{"F", "TEST_BOOL", "F", true, false, true},
{"no", "TEST_BOOL", "no", true, false, true},
{"NO", "TEST_BOOL", "NO", true, false, true},
{"n", "TEST_BOOL", "n", true, false, true},
{"N", "TEST_BOOL", "N", true, false, true},
{"off", "TEST_BOOL", "off", true, false, true},
{"OFF", "TEST_BOOL", "OFF", true, false, true},
{"0", "TEST_BOOL", "0", true, false, true},
{"disable", "TEST_BOOL", "disable", true, false, true},
{"DISABLE", "TEST_BOOL", "DISABLE", true, false, true},
{"disabled", "TEST_BOOL", "disabled", true, false, true},
{"DISABLED", "TEST_BOOL", "DISABLED", true, false, true},
{"inactive", "TEST_BOOL", "inactive", true, false, true},
{"INACTIVE", "TEST_BOOL", "INACTIVE", true, false, true},
{"negative", "TEST_BOOL", "negative", true, false, true},
{"NEGATIVE", "TEST_BOOL", "NEGATIVE", true, false, true},
// Whitespace handling
{"true with spaces", "TEST_BOOL", " true ", false, true, true},
{"false with spaces", "TEST_BOOL", " false ", true, false, true},
// Default values
{"not set default true", "TEST_BOOL_NOTSET", "", true, true, false},
{"not set default false", "TEST_BOOL_NOTSET", "", false, false, false},
// Invalid values should return default
{"invalid value default true", "TEST_BOOL", "invalid", true, true, true},
{"invalid value default false", "TEST_BOOL", "invalid", false, false, true},
{"empty string default true", "TEST_BOOL", "", true, true, true},
{"empty string default false", "TEST_BOOL", "", false, false, true},
{"random text default true", "TEST_BOOL", "maybe", true, true, true},
{"random text default false", "TEST_BOOL", "maybe", false, false, true},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
if tt.shouldSet {
os.Setenv(tt.key, tt.value)
defer os.Unsetenv(tt.key)
}
result := Bool(tt.key, tt.defaultValue)
if result != tt.expected {
t.Errorf("Bool() = %v, want %v", result, tt.expected)
}
})
}
}