Files
@ afabea7d0e61
Branch filter:
Location: Diana/src/diana/tests/test_sgf_parser.py
afabea7d0e61
3.6 KiB
text/x-python
renamed sgfparser, game_record, prop_values
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 | from itertools import chain
from datetime import date
import unittest
from unittest import TestCase
import os
from ..sgfparser import str_row_col
from ..sgfparser.collection import Collection
from ..sgfparser.property import Property, DateProperty, DateException
from ..sgfparser.prop_values import text, compose
dataDir = os.path.join(os.path.dirname(__file__), "data")
class TestUtils(TestCase):
def testTextPos(self):
s = "abc\ndef\rgh\r\nij\n\rklmn"
rc = [
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3, 4],
[1, 2, 3], [1], # don't care about LFCR, we unicode now
[1, 2, 3, 4]
]
res = chain((r+1, c) for (r, row) in enumerate(rc) for c in row)
for (i, (r, c)) in zip(range(len(s)+1), res):
self.assertEqual(str_row_col(s, i), (r, c))
class TestProperty(TestCase):
def testName(self):
with self.assertRaises(AssertionError):
Property.create("[99]", 0)
with self.assertRaises(AssertionError):
Property.create("99[99]", 0)
(i, prop) = Property.create("MN[99]", 0)
self.assertNotEqual((i, prop), (0, None))
self.assertEqual((i, prop.name), (6, "MN"))
def testText(self):
s = r"""[abc\
def
ghi]"""
self.assertEqual(text()(s, 1)[1], "abcdef ghi")
self.assertEqual(text(False)(s, 1)[1], "abcdef\nghi")
s = """[m\\no\\\tpqr\\]\\\\]"""
self.assertEqual(text()(s, 1)[1], "mno pqr]\\")
self.assertEqual(text(False)(s, 1)[1], "mno pqr]\\")
s = """[abc:def]"""
parsed = compose(text(composed=True), text(composed=True))(s, 1)
self.assertEqual(str(parsed[1]), "abc:def")
class TestDateProperty(TestCase):
def testSingle(self):
self.assertEqual(DateProperty.parse_single("2019", "Y")[1], date(2019, 1, 1))
self.assertEqual(DateProperty.parse_single("2019-06", "YM")[1], date(2019, 6, 1))
self.assertEqual(DateProperty.parse_single("2019-06-22", "YMD")[1], date(2019, 6, 22))
d = date(2019, 6, 21)
self.assertEqual(DateProperty.parse_single("22", "D", d)[1], date(2019, 6, 22))
self.assertEqual(DateProperty.parse_single("07-22", "MD", d)[1], date(2019, 7, 22))
self.assertEqual(DateProperty.parse_single("2020-07-22", "YMD", d)[1], date(2020, 7, 22))
with self.assertRaises(ValueError):
DateProperty.parse_single("2019-31", "YMD")
def testParse(self):
self.assertEqual(DateProperty("1996-05,06").value, [date(1996, 5, 1), date(1996, 6, 1)])
self.assertEqual(DateProperty("1996-05-06,07,08").value, [date(1996, 5, 6), date(1996, 5, 7), date(1996, 5, 8)])
self.assertEqual(DateProperty("1996,1997").value, [date(1996, 1, 1), date(1997, 1, 1)])
self.assertEqual(DateProperty("1996-12-27,28,1997-01-03,04").value, [date(1996, 12, 27), date(1996, 12, 28), date(1997, 1, 3), date(1997, 1, 4)])
self.assertEqual(DateProperty("1997-05-05,1997-05-06").value, [date(1997, 5, 5), date(1997, 5, 6)])
self.assertEqual(DateProperty("Published on 1997-05-06").value, [date(1997, 5, 6)])
with self.assertRaises(DateException):
DateProperty("unknown")
class TestCollection(TestCase):
def testSubtrees(self):
c = Collection("""
(;B[aa]
(;W[ab]PB[Some Black]PW[Some White];B[ac])
(;W[bb]PB[Other Black]PW[Other White])
)""")
games = list(c.list_games())
self.assertEqual(len(games), 2)
self.assertRegex(games[0].export(), r"^\(;B\[aa]\n;(PB\[Some Black]|PW\[Some White]|W\[ab]){3}\n;B\[ac]\n\)\n$")
self.assertRegex(games[1].export(), r"^\(;B\[aa]\n;(PB\[Other Black]|PW\[Other White]|W\[bb]){3}\n\)\n$")
def testEmptySgf(self):
Collection("(;)")
def testSimpleSgf(self):
with open(os.path.join(dataDir, "simple.sgf")) as f:
Collection(f.read())
def testComplexSgf(self):
with open(os.path.join(dataDir, "kogos.sgf")) as f:
Collection(f.read())
if __name__ == '__main__':
unittest.main()
|