mirror of
https://github.com/wneessen/apg-go.git
synced 2024-12-23 03:30:39 +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