blob: e85df503b0a13c72a277eba6ea9fa3669b2d4c55 [file] [log] [blame]
// Copyright (c) HashiCorp, Inc.
// SPDX-License-Identifier: MPL-2.0
package random
import (
"testing"
)
func TestCharset(t *testing.T) {
type testCase struct {
charset string
minChars int
input string
expected bool
}
tests := map[string]testCase{
"0 minimum, empty input": {
charset: LowercaseCharset,
minChars: 0,
input: "",
expected: true,
},
"0 minimum, many matching": {
charset: LowercaseCharset,
minChars: 0,
input: LowercaseCharset,
expected: true,
},
"0 minimum, no matching": {
charset: LowercaseCharset,
minChars: 0,
input: "0123456789",
expected: true,
},
"1 minimum, empty input": {
charset: LowercaseCharset,
minChars: 1,
input: "",
expected: false,
},
"1 minimum, no matching": {
charset: LowercaseCharset,
minChars: 1,
input: "0123456789",
expected: false,
},
"1 minimum, exactly 1 matching": {
charset: LowercaseCharset,
minChars: 1,
input: "a",
expected: true,
},
"1 minimum, many matching": {
charset: LowercaseCharset,
minChars: 1,
input: "abcdefhaaaa",
expected: true,
},
"2 minimum, 1 matching": {
charset: LowercaseCharset,
minChars: 2,
input: "f",
expected: false,
},
"2 minimum, 2 matching": {
charset: LowercaseCharset,
minChars: 2,
input: "fz",
expected: true,
},
"2 minimum, many matching": {
charset: LowercaseCharset,
minChars: 2,
input: "joixnbonxd",
expected: true,
},
}
for name, test := range tests {
t.Run(name, func(t *testing.T) {
cr := CharsetRule{
Charset: []rune(test.charset),
MinChars: test.minChars,
}
actual := cr.Pass([]rune(test.input))
if actual != test.expected {
t.FailNow()
}
})
}
}