aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--xS/main.go2
-rw-r--r--xS/main_test.go29
2 files changed, 30 insertions, 1 deletions
diff --git a/xS/main.go b/xS/main.go
index a7bd2e9..c49b2f6 100644
--- a/xS/main.go
+++ b/xS/main.go
@@ -420,7 +420,7 @@ func ircFnmatch(pattern string, s string) bool {
}
var reMsg = regexp.MustCompile(
- `^(@[^ ]* +)?(?::([^! ]*)(?:!([^@]*)@([^ ]*))? +)?([^ ]+)(.*)?$`)
+ `^(?:@([^ ]*) +)?(?::([^! ]*)(?:!([^@]*)@([^ ]*))? +)?([^ ]+)(.*)?$`)
var reArgs = regexp.MustCompile(`:.*| [^: ][^ ]*`)
type message struct {
diff --git a/xS/main_test.go b/xS/main_test.go
index 90a55f6..4d6ccb3 100644
--- a/xS/main_test.go
+++ b/xS/main_test.go
@@ -137,3 +137,32 @@ func TestDetectTLS(t *testing.T) {
}
})
}
+
+func TestIRC(t *testing.T) {
+ msg := ircParseMessage(
+ `@first=a\:\s\r\n\\;2nd :srv hi there :good m8 :how are you?`)
+
+ if !reflect.DeepEqual(msg.tags, map[string]string{
+ "first": "a; \r\n\\",
+ "2nd": "",
+ }) {
+ t.Error("tags parsed incorrectly")
+ }
+
+ if msg.nick != "srv" || msg.user != "" || msg.host != "" {
+ t.Error("server name parsed incorrectly")
+ }
+ if msg.command != "hi" {
+ t.Error("command name parsed incorrectly")
+ }
+ if !reflect.DeepEqual(msg.params,
+ []string{"there", "good m8 :how are you?"}) {
+ t.Error("params parsed incorrectly")
+ }
+
+ if !ircEqual("[fag]^", "{FAG}~") {
+ t.Error("string case comparison not according to RFC 2812")
+ }
+
+ // TODO: More tests.
+}