mirror of
https://github.com/wneessen/apg-go.git
synced 2024-11-22 13:50:49 +01:00
Add grouping functionality and corresponding tests
Implemented a new function 'GroupCharsForMobile' in the 'apg' package, which groups characters in a mobile-friendly manner based on their Unicode category. Accompanying tests for this function have also been created in 'grouping_test.go'. This update enhances password readability on mobile devices.
This commit is contained in:
parent
8da604dc65
commit
0bb1b6c09b
2 changed files with 47 additions and 0 deletions
23
grouping.go
Normal file
23
grouping.go
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
package apg
|
||||||
|
|
||||||
|
import "unicode"
|
||||||
|
|
||||||
|
// GroupCharsForMobile takes a given string of characters and groups them in a mobile-friendly
|
||||||
|
// manner. The grouping is based on the following precedense: uppercase, lowercase, numbers
|
||||||
|
// and special characters. The grouped string is then returned.
|
||||||
|
func GroupCharsForMobile(chars string) string {
|
||||||
|
var uppers, lowers, numbers, others []rune
|
||||||
|
for _, char := range chars {
|
||||||
|
switch {
|
||||||
|
case unicode.IsUpper(char):
|
||||||
|
uppers = append(uppers, char)
|
||||||
|
case unicode.IsLower(char):
|
||||||
|
lowers = append(lowers, char)
|
||||||
|
case unicode.IsNumber(char):
|
||||||
|
numbers = append(numbers, char)
|
||||||
|
default:
|
||||||
|
others = append(others, char)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return string(uppers) + string(lowers) + string(numbers) + string(others)
|
||||||
|
}
|
24
grouping_test.go
Normal file
24
grouping_test.go
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
package apg
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
func TestGroupCharacters(t *testing.T) {
|
||||||
|
tests := []struct {
|
||||||
|
name string
|
||||||
|
password string
|
||||||
|
want string
|
||||||
|
}{
|
||||||
|
{`PW: A1c9.Ba`, `A1c9.Ba`, `ABca19.`},
|
||||||
|
{`PW: PX4xDoiKrs,[egEAief{`, `PX4xDoiKrs,[egEAief{`, `PXDKEAxoirsegief4,[{`},
|
||||||
|
{`PW: *Z%C9d+PZYkD7D+{~r'w`, `*Z%C9d+PZYkD7D+{~r'w`, `ZCPZYDDdkrw97*%++{~'`},
|
||||||
|
{`PW: 4?r2YV:Abo&/z<3tJ*Z{`, `4?r2YV:Abo&/z<3tJ*Z{`, `YVAJZrbozt423?:&/<*{`},
|
||||||
|
}
|
||||||
|
for _, tt := range tests {
|
||||||
|
t.Run(tt.name, func(t *testing.T) {
|
||||||
|
grouped := GroupCharsForMobile(tt.password)
|
||||||
|
if grouped != tt.want {
|
||||||
|
t.Errorf("GroupCharsForMobile() failed, expected: %s, got: %s", tt.want, grouped)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue