diff --git a/sucks/__init__.py b/sucks/__init__.py
index ba44995..8560364 100644
--- a/sucks/__init__.py
+++ b/sucks/__init__.py
@@ -195,6 +195,7 @@ class VacBot(ClientXMPP):
def send_command(self, xml):
c = self.wrap_command(xml)
+ logging.debug('Sending command {0}'.format(c))
c.send()
def wrap_command(self, ctl):
@@ -228,7 +229,7 @@ class VacBot(ClientXMPP):
class VacBotCommand:
- def __init__(self, name, args, wait=None, terminal=False):
+ def __init__(self, name, args=None, wait=None, terminal=False):
self.name = name
self.args = args
self.wait = wait
@@ -240,9 +241,10 @@ class VacBotCommand:
time.sleep(self.wait)
def to_xml(self):
- ctl = ET.Element('ctl', {'td': self.name.capitalize()})
- inner = ET.Element(self.name, self.args)
- ctl.append(inner)
+ ctl = ET.Element('ctl', {'td': self.name})
+ if self.args:
+ inner = ET.Element(self.name.lower(), self.args)
+ ctl.append(inner)
return ctl
def __str__(self, *args, **kwargs):
@@ -254,17 +256,17 @@ class VacBotCommand:
class Clean(VacBotCommand):
def __init__(self, wait):
- super().__init__('clean', {'type': 'auto', 'speed': 'standard'}, wait)
+ super().__init__('Clean', {'type': 'auto', 'speed': 'standard'}, wait)
class Edge(VacBotCommand):
def __init__(self, wait):
- super().__init__('clean', {'type': 'border', 'speed': 'strong'}, wait)
+ super().__init__('Clean', {'type': 'border', 'speed': 'strong'}, wait)
class Charge(VacBotCommand):
def __init__(self):
- super().__init__('charge', {'type': 'go'}, terminal=True)
+ super().__init__('Charge', {'type': 'go'}, terminal=True)
def wait_for_completion(self, bot):
logging.debug("waiting in " + self.name)
@@ -276,7 +278,7 @@ class Charge(VacBotCommand):
class Stop(VacBotCommand):
def __init__(self):
- super().__init__('clean', {'type': 'stop', 'speed': 'standard'}, terminal=True)
+ super().__init__('Clean', {'type': 'stop', 'speed': 'standard'}, terminal=True)
def wait_for_completion(self, bot):
logging.debug("waiting in " + self.name)
diff --git a/tests/test_vacbot.py b/tests/test_vacbot.py
index 163be6a..95e6555 100644
--- a/tests/test_vacbot.py
+++ b/tests/test_vacbot.py
@@ -10,6 +10,20 @@ from sucks import *
# the library's design and its multithreaded nature, and b) I'm manually testing every change anyhow,
# as it's not clear how the robot really behaves.
+def test_custom_command():
+ # Ensure a custom-built command generates the expected XML payload
+ c = VacBotCommand('CustomCommand', {'type': 'customtype'})
+ assert_equals(ElementTree.tostring(c.to_xml()),
+
+ b'')
+
+def test_custom_command_noargs():
+ # Ensure a custom-built command with no args generates XML without an args element
+ c = VacBotCommand('CustomCommand')
+ assert_equals(ElementTree.tostring(c.to_xml()),
+ b'')
+
+
def test_clean_command():
c = Clean(10)
assert_equals(c.terminal, False)