def _parse_scope(self, token_iterator) -> Command: parts = [] for tok in token_iterator: if tok == '{': parts.append(self._parse_scope(token_iterator)) elif tok == '}': break else: parts.append(tok) if ':' in parts: cmd = Command(parts[2]) cmd.target = parts[0] cmd.arguments = parts[3:] return cmd else: cmd = Command(parts[0]) cmd.arguments = parts[1:] return cmd
def test_execute_set(self): set_cmd = Command('set') set_cmd.target = 'foo' set_cmd.arguments = [3] self.assertEqual(1, self.interpreter.root['foo'].value) self.interpreter.execute(set_cmd) self.assertEqual(3, self.interpreter.root['foo'].value) self.assertEqual(2, self.interpreter.root['foo.bar'].value) set_cmd.target = 'foo.bar' self.interpreter.execute(set_cmd) self.assertEqual(3, self.interpreter.root['foo.bar'].value)
def test_recursive_argument_evaluation(self): self.root['foo'].append_node('value', Node(123)) get_value_cmd = Command('get') get_value_cmd.target = 'foo.value' set_cmd = Command('set') set_cmd.target = 'foo' set_cmd.arguments = [get_value_cmd] # Execute: foo: set {foo.value: get} self.interpreter.execute(set_cmd) self.assertEqual(123, self.root['foo'].value)
def test_nested_arguments_string(self): cmd = Command("foobar") cmd.arguments = [Command("spam"), "rabbit", Command("rabarbar")] self.assertEqual("foobar {spam} rabbit {rabarbar}", str(cmd))
def test_command_arguments_string(self): cmd = Command("foobar") cmd.arguments = ["foo", "bar", "spam"] self.assertEqual("foobar foo bar spam", str(cmd))