diff --git a/src/commands.py b/src/commands.py index ced166cc1..f23d96c9a 100644 --- a/src/commands.py +++ b/src/commands.py @@ -622,12 +622,15 @@ class context(object): class rest(context): def __call__(self, irc, msg, args, state): - original = args[:] - args[:] = [' '.join(args)] - try: - super(rest, self).__call__(irc, msg, args, state) - except Exception, e: - args[:] = original + if args: + original = args[:] + args[:] = [' '.join(args)] + try: + super(rest, self).__call__(irc, msg, args, state) + except Exception, e: + args[:] = original + else: + raise callbacks.ArgumentError # additional means: Look for this (and make sure it's of this type). If # there are no arguments for us to check, then use our default. diff --git a/test/test_commands.py b/test/test_commands.py index 0280086e5..1c3f1144c 100644 --- a/test/test_commands.py +++ b/test/test_commands.py @@ -57,6 +57,10 @@ class CommandsTestCase(SupyTestCase): def testRestHandling(self): self.assertState([rest(None)], ['foo', 'bar', 'baz'], ['foo bar baz']) + def testRestRequiresArgs(self): + self.assertRaises(callbacks.ArgumentError, + self.assertState, [rest('something')], [], ['asdf']) + def testOptional(self): spec = [optional('int', 999), None] self.assertState(spec, ['12', 'foo'], [12, 'foo'])