1
0
Fork 0
forked from External/ergo
Make snomask add/remove behavior match other ircds
This commit is contained in:
Shivaram Lingamneni 2021-02-08 11:43:13 -05:00
parent 42316bc04f
commit 91cfdb963d
8 changed files with 214 additions and 44 deletions

View file

@ -212,12 +212,10 @@ func ParseUserModeChanges(params ...string) (ModeChanges, map[rune]bool) {
// put arg into modechange if needed
switch Mode(mode) {
case ServerNotice:
// always require arg
// arg is optional for ServerNotice (we accept bare `-s`)
if len(params) > skipArgs {
change.Arg = params[skipArgs]
skipArgs++
} else {
continue
}
}

View file

@ -15,6 +15,38 @@ func assertEqual(supplied, expected interface{}, t *testing.T) {
}
}
func TestParseUserModeChanges(t *testing.T) {
emptyUnknown := make(map[rune]bool)
changes, unknown := ParseUserModeChanges("+i")
assertEqual(unknown, emptyUnknown, t)
assertEqual(changes, ModeChanges{ModeChange{Op: Add, Mode: Invisible}}, t)
// no-op change to sno
changes, unknown = ParseUserModeChanges("+is")
assertEqual(unknown, emptyUnknown, t)
assertEqual(changes, ModeChanges{ModeChange{Op: Add, Mode: Invisible}, ModeChange{Op: Add, Mode: ServerNotice}}, t)
// add snomasks
changes, unknown = ParseUserModeChanges("+is", "ac")
assertEqual(unknown, emptyUnknown, t)
assertEqual(changes, ModeChanges{ModeChange{Op: Add, Mode: Invisible}, ModeChange{Op: Add, Mode: ServerNotice, Arg: "ac"}}, t)
// remove snomasks
changes, unknown = ParseUserModeChanges("+s", "-cx")
assertEqual(unknown, emptyUnknown, t)
assertEqual(changes, ModeChanges{ModeChange{Op: Add, Mode: ServerNotice, Arg: "-cx"}}, t)
// remove all snomasks (arg is parsed but has no meaning)
changes, unknown = ParseUserModeChanges("-is", "ac")
assertEqual(unknown, emptyUnknown, t)
assertEqual(changes, ModeChanges{ModeChange{Op: Remove, Mode: Invisible}, ModeChange{Op: Remove, Mode: ServerNotice, Arg: "ac"}}, t)
// remove all snomasks
changes, unknown = ParseUserModeChanges("-is")
assertEqual(unknown, emptyUnknown, t)
assertEqual(changes, ModeChanges{ModeChange{Op: Remove, Mode: Invisible}, ModeChange{Op: Remove, Mode: ServerNotice}}, t)
}
func TestIssue874(t *testing.T) {
emptyUnknown := make(map[rune]bool)
modes, unknown := ParseChannelModeChanges("+k")