+class TestParser(unittest.TestCase):
+
+ def test_tokenizer(self):
+ p = Parser(Game())
+ self.assertEqual(p.tokenize(''), [])
+ self.assertEqual(p.tokenize(' '), [])
+ self.assertEqual(p.tokenize('abc'), ['abc'])
+ self.assertEqual(p.tokenize('a b\nc "d"'), ['a', 'b', 'c', 'd'])
+ self.assertEqual(p.tokenize('a "b\nc d"'), ['a', 'b\nc d'])
+ self.assertEqual(p.tokenize('a"b"c'), ['abc'])
+ self.assertEqual(p.tokenize('a\\b'), ['a\\b'])
+ self.assertEqual(p.tokenize('"a\\b"'), ['ab'])
+ self.assertEqual(p.tokenize('a"b'), ['ab'])
+ self.assertEqual(p.tokenize('a"\\"b'), ['a"b'])
+
+ def test_unhandled(self):
+ p = Parser(Game())
+ self.assertEqual(p.parse(''), None)
+ self.assertEqual(p.parse(' '), None)
+ self.assertEqual(p.parse('x'), None)
+
+ def test_argsparse(self):
+ p = Parser(Game())
+ assertErr = partial(self.assertRaises, ParseError, p.argsparse)
+ assertErr('', ['foo'])
+ assertErr('string', [])
+ assertErr('string string', ['foo'])
+ self.assertEqual(p.argsparse('string', ('foo',)),
+ (['foo'], {}))
+ self.assertEqual(p.argsparse('string string', ('foo', 'bar')),
+ (['foo', 'bar'], {}))
+ assertErr('int:nonneg', [''])
+ assertErr('int:nonneg', ['x'])
+ assertErr('int:nonneg', ['-1'])
+ assertErr('int:nonneg', ['0.1'])
+ self.assertEqual(p.argsparse('int:nonneg', ('0',)),
+ ([0], {}))
+ assertErr('yx_tuple:nonneg', ['x'])
+ assertErr('yx_tuple:nonneg', ['Y:0,X:1'])
+ assertErr('yx_tuple:nonneg', ['Y:1,X:0'])
+ assertErr('yx_tuple:nonneg', ['Y:1.1,X:1'])
+ assertErr('yx_tuple:nonneg', ['Y:1,X:1.1'])
+ self.assertEqual(p.argsparse('yx_tuple:nonneg', ('Y:1,X:2',)),
+ ([(1, 2)], {}))
+
+
+if __name__ == '__main__':
+ game = Game()
+ s = socket.create_connection(('127.0.0.1', 5000))
+ p = PlomRogueClient(game, s)
+ p.run()
+ s.close()