Skip to content
This repository has been archived by the owner on Mar 11, 2024. It is now read-only.

Commit

Permalink
Add Case Insensitivity to commands (#85)
Browse files Browse the repository at this point in the history
* Change parser tests to use sub tests
  • Loading branch information
icco authored and fabioxgn committed Oct 6, 2018
1 parent 0592640 commit 97d0d74
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 53 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ jobs:
- checkout
- run: go test -v -cover -race -coverprofile=coverage.out
- run: go get github.com/mattn/goveralls
- run: goveralls -coverprofile=coverage.out -service=circle-ci
- run: goveralls -coverprofile=coverage.out -service=circle-ci -repotoken=$COVERALLS_TOKEN
2 changes: 1 addition & 1 deletion parser.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func parse(s string, channel *ChannelData, user *User) (*Cmd, error) {

// get the command
pieces := strings.SplitN(c.Message, " ", 2)
c.Command = pieces[0]
c.Command = strings.ToLower(pieces[0])

if len(pieces) > 1 {
// get the arguments and remove extra spaces
Expand Down
138 changes: 87 additions & 51 deletions parser_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,9 @@ func TestParser(t *testing.T) {
cmdWithoutArgs := CmdPrefix + "cmd"
cmdWithArgs := CmdPrefix + "cmd arg1 arg2 "
cmdWithQuotes := CmdPrefix + "cmd \"arg1 arg2\""
cmdMixedCaseWithoutArgs := CmdPrefix + "Cmd"
cmdMixedCaseWithArgs := CmdPrefix + "Cmd arg1 arg2 "
cmdMixedCaseWithQuotes := CmdPrefix + "Cmd \"arg1 arg2\""

tests := []struct {
msg string
Expand Down Expand Up @@ -50,62 +53,95 @@ func TestParser(t *testing.T) {
Args: []string{"arg1 arg2"},
MessageData: &Message{Text: strings.TrimLeft("cmd \"arg1 arg2\"", CmdPrefix)},
}},
{cmdMixedCaseWithoutArgs, &Cmd{
Raw: cmdMixedCaseWithoutArgs,
Command: "cmd",
Channel: channel.Channel,
ChannelData: channel,
User: user,
Message: "Cmd",
MessageData: &Message{Text: strings.TrimLeft("Cmd", CmdPrefix)},
}},
{cmdMixedCaseWithArgs, &Cmd{
Raw: cmdMixedCaseWithArgs,
Command: "cmd",
Channel: channel.Channel,
ChannelData: channel,
User: user,
Message: "Cmd arg1 arg2",
RawArgs: "arg1 arg2",
Args: []string{"arg1", "arg2"},
MessageData: &Message{Text: strings.TrimLeft("Cmd arg1 arg2", CmdPrefix)},
}},
{cmdMixedCaseWithQuotes, &Cmd{
Raw: cmdMixedCaseWithQuotes,
Command: "cmd",
Channel: channel.Channel,
ChannelData: channel,
User: user,
Message: "Cmd \"arg1 arg2\"",
RawArgs: "\"arg1 arg2\"",
Args: []string{"arg1 arg2"},
MessageData: &Message{Text: strings.TrimLeft("Cmd \"arg1 arg2\"", CmdPrefix)},
}},
}

for _, test := range tests {
cmd, _ := parse(test.msg, channel, user)
if test.expected != nil && cmd != nil {
if test.expected.Raw != cmd.Raw {
t.Errorf("Expected Raw:\n%#v\ngot:\n%#v", test.expected.Raw, cmd.Raw)
}
if test.expected.Channel != cmd.Channel {
t.Errorf("Expected Channel:\n%#v\ngot:\n%#v", test.expected.Channel, cmd.Channel)
}
if test.expected.Message != cmd.Message {
t.Errorf("Expected Message:\n%#v\ngot:\n%#v", test.expected.Message, cmd.Message)
}
if test.expected.Command != cmd.Command {
t.Errorf("Expected Command:\n%#v\ngot:\n%#v", test.expected.Command, cmd.Command)
}
if test.expected.RawArgs != cmd.RawArgs {
t.Errorf("Expected RawArgs:\n%#v\ngot:\n%#v", test.expected.RawArgs, cmd.RawArgs)
}
if test.expected.ChannelData.Protocol != cmd.ChannelData.Protocol {
t.Errorf("Expected ChannelData.Protocol:\n%#v\ngot:\n%#v", test.expected.ChannelData.Protocol, cmd.ChannelData.Protocol)
}
if test.expected.ChannelData.Server != cmd.ChannelData.Server {
t.Errorf("Expected ChannelData.Server:\n%#v\ngot:\n%#v", test.expected.ChannelData.Server, cmd.ChannelData.Server)
}
if test.expected.ChannelData.Channel != cmd.ChannelData.Channel {
t.Errorf("Expected ChannelData.Channel:\n%#v\ngot:\n%#v", test.expected.ChannelData.Channel, cmd.ChannelData.Channel)
}
if test.expected.ChannelData.IsPrivate != cmd.ChannelData.IsPrivate {
t.Errorf("Expected ChannelData.IsPrivate:\n%#v\ngot:\n%#v", test.expected.ChannelData.IsPrivate, cmd.ChannelData.IsPrivate)
}
if test.expected.User.ID != cmd.User.ID {
t.Errorf("Expected User.ID:\n%#v\ngot:\n%#v", test.expected.User.ID, cmd.User.ID)
}
if test.expected.User.Nick != cmd.User.Nick {
t.Errorf("Expected User.Nick:\n%#v\ngot:\n%#v", test.expected.User.Nick, cmd.User.Nick)
}
if test.expected.User.RealName != cmd.User.RealName {
t.Errorf("Expected User.RealName:\n%#v\ngot:\n%#v", test.expected.User.RealName, cmd.User.RealName)
}
if test.expected.User.IsBot != cmd.User.IsBot {
t.Errorf("Expected User.IsBot:\n%#v\ngot:\n%#v", test.expected.User.IsBot, cmd.User.IsBot)
}
if test.expected.MessageData.Text != cmd.MessageData.Text {
t.Errorf("Expected MessageData.Text:\n%#v\ngot:\n%#v", test.expected.MessageData.Text, cmd.MessageData.Text)
}
if test.expected.MessageData.IsAction != cmd.MessageData.IsAction {
t.Errorf("Expected MessageData.IsAction:\n%#v\ngot:\n%#v", test.expected.MessageData.IsAction, cmd.MessageData.IsAction)
}
for i, arg := range test.expected.Args {
if arg != cmd.Args[i] {
t.Errorf("Expected cmd.Args[]:\n%#v\ngot:\n%#v", arg, cmd.Args[i])
t.Run(test.msg, func(t *testing.T) {
cmd, _ := parse(test.msg, channel, user)
if test.expected != nil && cmd != nil {
if test.expected.Raw != cmd.Raw {
t.Errorf("Expected Raw:\n%#v\ngot:\n%#v", test.expected.Raw, cmd.Raw)
}
if test.expected.Channel != cmd.Channel {
t.Errorf("Expected Channel:\n%#v\ngot:\n%#v", test.expected.Channel, cmd.Channel)
}
if test.expected.Message != cmd.Message {
t.Errorf("Expected Message:\n%#v\ngot:\n%#v", test.expected.Message, cmd.Message)
}
if test.expected.Command != cmd.Command {
t.Errorf("Expected Command:\n%#v\ngot:\n%#v", test.expected.Command, cmd.Command)
}
if test.expected.RawArgs != cmd.RawArgs {
t.Errorf("Expected RawArgs:\n%#v\ngot:\n%#v", test.expected.RawArgs, cmd.RawArgs)
}
if test.expected.ChannelData.Protocol != cmd.ChannelData.Protocol {
t.Errorf("Expected ChannelData.Protocol:\n%#v\ngot:\n%#v", test.expected.ChannelData.Protocol, cmd.ChannelData.Protocol)
}
if test.expected.ChannelData.Server != cmd.ChannelData.Server {
t.Errorf("Expected ChannelData.Server:\n%#v\ngot:\n%#v", test.expected.ChannelData.Server, cmd.ChannelData.Server)
}
if test.expected.ChannelData.Channel != cmd.ChannelData.Channel {
t.Errorf("Expected ChannelData.Channel:\n%#v\ngot:\n%#v", test.expected.ChannelData.Channel, cmd.ChannelData.Channel)
}
if test.expected.ChannelData.IsPrivate != cmd.ChannelData.IsPrivate {
t.Errorf("Expected ChannelData.IsPrivate:\n%#v\ngot:\n%#v", test.expected.ChannelData.IsPrivate, cmd.ChannelData.IsPrivate)
}
if test.expected.User.ID != cmd.User.ID {
t.Errorf("Expected User.ID:\n%#v\ngot:\n%#v", test.expected.User.ID, cmd.User.ID)
}
if test.expected.User.Nick != cmd.User.Nick {
t.Errorf("Expected User.Nick:\n%#v\ngot:\n%#v", test.expected.User.Nick, cmd.User.Nick)
}
if test.expected.User.RealName != cmd.User.RealName {
t.Errorf("Expected User.RealName:\n%#v\ngot:\n%#v", test.expected.User.RealName, cmd.User.RealName)
}
if test.expected.User.IsBot != cmd.User.IsBot {
t.Errorf("Expected User.IsBot:\n%#v\ngot:\n%#v", test.expected.User.IsBot, cmd.User.IsBot)
}
if test.expected.MessageData.Text != cmd.MessageData.Text {
t.Errorf("Expected MessageData.Text:\n%#v\ngot:\n%#v", test.expected.MessageData.Text, cmd.MessageData.Text)
}
if test.expected.MessageData.IsAction != cmd.MessageData.IsAction {
t.Errorf("Expected MessageData.IsAction:\n%#v\ngot:\n%#v", test.expected.MessageData.IsAction, cmd.MessageData.IsAction)
}
for i, arg := range test.expected.Args {
if arg != cmd.Args[i] {
t.Errorf("Expected cmd.Args[]:\n%#v\ngot:\n%#v", arg, cmd.Args[i])
}
}
}
}
})
}
}

Expand Down

0 comments on commit 97d0d74

Please sign in to comment.