def start(self):
     cp = CommandParser()
     cp.add_command('show_movies', self.show_all_movies)
     cp.add_command('add_movie', self.add_movie)
     cp.add_command('add_projection', self.add_movie_projection)
     cp.add_command('show_projections', self.show_projections)
     cp.add_command('add_reservation', self.add_reservation)
     
     while True:
         user_input = input()
         if user_input == 'exit':
             break
         else:
             print(cp.execute(user_input))
class CommandsTest(unittest.TestCase):

    def setUp(self):
        self.parser = CommandParser()
        
    def test_add_command(self):
        self.parser.add_command('plus', plus)
        self.assertEqual({'plus': plus}, self.parser._CommandParser__commands)

    def test_parse_arguments(self):
        result = self.parser.parse_arguments('(1, 2)')
        # ToDo
                
    def test_execute_key_error(self):
        self.parser.add_command('plus', plus)
        result = self.parser.execute('minus; 3')
        self.assertEqual('No such command', result)

    def test_execute(self):
        self.parser.add_command('plus', plus)
        result = self.parser.execute('plus; (1, 2)')
        self.assertEqual(3, result)