better handling of tag+verb messages without a source; handle some invalid extraneous space events from servers like unreal; additional (basic) event tests
This commit is contained in:
parent
05b8be7a4b
commit
812b7950e0
|
@ -82,11 +82,11 @@ func ParseTags(raw string) (t Tags) {
|
|||
}
|
||||
|
||||
// Check if tag key or decoded value are invalid.
|
||||
if !validTag(parts[i][:hasValue]) || !validTagValue(tagDecoder.Replace(parts[i][hasValue+1:])) {
|
||||
continue
|
||||
}
|
||||
// if !validTag(parts[i][:hasValue]) || !validTagValue(tagDecoder.Replace(parts[i][hasValue+1:])) {
|
||||
// continue
|
||||
// }
|
||||
|
||||
t[parts[i][:hasValue]] = parts[i][hasValue+1:]
|
||||
t[parts[i][:hasValue]] = tagDecoder.Replace(parts[i][hasValue+1:])
|
||||
}
|
||||
|
||||
return t
|
||||
|
|
5
event.go
5
event.go
|
@ -49,6 +49,7 @@ func ParseEvent(raw string) (e *Event) {
|
|||
}
|
||||
}
|
||||
raw = raw[i+1:]
|
||||
i = 0
|
||||
}
|
||||
|
||||
if raw[0] == messagePrefix {
|
||||
|
@ -91,7 +92,7 @@ func ParseEvent(raw string) (e *Event) {
|
|||
|
||||
if trailerIndex == -1 {
|
||||
// No trailing argument found, assume the rest is just params.
|
||||
e.Params = strings.Split(raw[j:], string(eventSpace))
|
||||
e.Params = strings.Fields(raw[j:])
|
||||
return e
|
||||
}
|
||||
|
||||
|
@ -114,7 +115,7 @@ func ParseEvent(raw string) (e *Event) {
|
|||
// Check if we need to parse arguments. If so, take everything after the
|
||||
// command, and right before the trailing prefix, and cut it up.
|
||||
if i > j {
|
||||
e.Params = strings.Split(raw[j:i-1], string(eventSpace))
|
||||
e.Params = strings.Fields(raw[j : i-1])
|
||||
}
|
||||
|
||||
e.Params = append(e.Params, raw[i+1:])
|
||||
|
|
|
@ -252,3 +252,74 @@ func TestEventSourceTagEquals(t *testing.T) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
func TestEventIRCDocsParseTests(t *testing.T) {
|
||||
// Some of these are pulled from https://github.com/ircdocs/parser-tests.
|
||||
// TODO: do result checks in an automated form from parser-tests.
|
||||
cases := []string{
|
||||
"foo bar baz asdf",
|
||||
"foo bar baz :asdf",
|
||||
":src AWAY",
|
||||
":src AWAY :",
|
||||
":coolguy foo bar baz asdf",
|
||||
":coolguy foo bar baz :asdf",
|
||||
"foo bar baz :asdf quux",
|
||||
"foo bar baz :",
|
||||
"foo bar baz ::asdf",
|
||||
":coolguy foo bar baz :asdf quux",
|
||||
":coolguy foo bar baz : asdf quux ",
|
||||
":coolguy PRIVMSG bar :lol :) ",
|
||||
":coolguy foo bar baz :",
|
||||
":coolguy foo bar baz : ",
|
||||
":coolguy foo b\tar baz",
|
||||
":coolguy foo b\tar :baz",
|
||||
"@asd :coolguy foo bar baz : ",
|
||||
"@a=b\\\\and\\nk;d=gh\\:764 foo",
|
||||
"@d=gh\\:764;a=b\\\\and\\nk foo",
|
||||
"@a=b\\\\and\\nk;d=gh\\:764 foo par1 par2",
|
||||
"@a=b\\\\and\\nk;d=gh\\:764 foo par1 :par2",
|
||||
"@d=gh\\:764;a=b\\\\and\\nk foo par1 par2",
|
||||
"@d=gh\\:764;a=b\\\\and\\nk foo par1 :par2",
|
||||
"@foo=\\\\\\\\\\:\\\\s\\s\\r\\n COMMAND",
|
||||
"foo bar baz asdf",
|
||||
":coolguy foo bar baz asdf",
|
||||
"foo bar baz :asdf quux",
|
||||
"foo bar baz :",
|
||||
"foo bar baz ::asdf",
|
||||
":coolguy foo bar baz :asdf quux",
|
||||
":coolguy foo bar baz : asdf quux ",
|
||||
":coolguy PRIVMSG bar :lol :) ",
|
||||
":coolguy foo bar baz :",
|
||||
":coolguy foo bar baz : ",
|
||||
"@a=b;c=32;k;rt=ql7 foo",
|
||||
"@a=b\\\\and\\nk;c=72\\s45;d=gh\\:764 foo",
|
||||
"@c;h=;a=b :quux ab cd",
|
||||
":src JOIN #chan",
|
||||
":src JOIN :#chan",
|
||||
":src AWAY",
|
||||
":src AWAY ",
|
||||
":cool\tguy foo bar baz",
|
||||
":coolguy!ag@net\x035w\x03ork.admin PRIVMSG foo :bar baz",
|
||||
":coolguy!~ag@n\x02et\x0305w\x0fork.admin PRIVMSG foo :bar baz",
|
||||
"@tag1=value1;tag2;vendor1/tag3=value2;vendor2/tag4= :irc.example.com COMMAND param1 param2 :param3 param3",
|
||||
":irc.example.com COMMAND param1 param2 :param3 param3",
|
||||
"@tag1=value1;tag2;vendor1/tag3=value2;vendor2/tag4 COMMAND param1 param2 :param3 param3",
|
||||
"COMMAND",
|
||||
"@foo=\\\\\\\\\\:\\\\s\\s\\r\\n COMMAND",
|
||||
":gravel.mozilla.org 432 #momo :Erroneous Nickname: Illegal characters",
|
||||
":gravel.mozilla.org MODE #tckk +n ",
|
||||
":services.esper.net MODE #foo-bar +o foobar ",
|
||||
"@tag1=value\\\\ntest COMMAND",
|
||||
"@tag1=value\\1 COMMAND",
|
||||
"@tag1=value1\\ COMMAND",
|
||||
"@tag1=1;tag2=3;tag3=4;tag1=5 COMMAND",
|
||||
"@tag1=1;tag2=3;tag3=4;tag1=5;vendor/tag2=8 COMMAND",
|
||||
":SomeOp MODE #channel :+i",
|
||||
":SomeOp MODE #channel +oo SomeUser :AnotherUser",
|
||||
}
|
||||
|
||||
for _, tt := range cases {
|
||||
// Basic test to just verify it doesn't panic.
|
||||
_ = ParseEvent(tt)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue