【Python】unittestサンプル

次の ```sphinx_kana_text.py``` で定義されている ```KanaText``` クラスのユニットテスト。サンプルとして使えます。

https://qiita.com/koKekkoh/items/7e56228276fd092f3c8e

#unittest_sphinx_kana_text.py

```python
#!/usr/bin/python
import unittest
from sphinx_kana_text import KanaText

#正規表現による字句解析
testcase1 = [
[   #テストパターン
    "よみ１|用語１",
    "よみ２|用語２^120a3",
    "よみ３|用語３^",
    "よみ４|用語４^10a3あいうえお",
    "よみ５|用語５^あいうえお",
    "用語６",
    "用語７^120a3",
    "用語８^",
    "用語９^120a3あいうえお",
    "用語Ａ^あいうえお",
    "  よみ１|用語１",
    "  よみ２|用語２^120a3",
    "  よみ３|用語３^",
    "  よみ４|用語４^10a3あいうえお",
    "  よみ５|用語５^あいうえお",
    "  用語６",
    "  用語７^120a3",
    "  用語８^",
    "  用語９^10a3あいうえお",
    "  用語Ａ^あいうえお",
    " 　よみ１|用語１",
    " 　よみ２|用語２^120a3",
    " 　よみ３|用語３^",
    " 　よみ４|用語４^10a3あいうえお",
    " 　よみ５|用語５^あいうえお",
    " 　用語６",
    " 　用語７^120a3",
    " 　用語８^",
    " 　用語９^10a3あいうえお",
    " 　用語Ａ^あいうえお", ],
[   #想定する結果
    "よみ１|用語１",
    "よみ２|用語２",
    "よみ３|用語３",
    "よみ４|用語４",
    "よみ５|用語５",
    "用語６",
    "用語７",
    "用語８",
    "用語９",
    "用語Ａ",
    "よみ１|用語１",
    "よみ２|用語２",
    "よみ３|用語３",
    "よみ４|用語４",
    "よみ５|用語５",
    "用語６",
    "用語７",
    "用語８",
    "用語９",
    "用語Ａ",
    "よみ１|用語１",
    "よみ２|用語２",
    "よみ３|用語３",
    "よみ４|用語４",
    "よみ５|用語５",
    "用語６",
    "用語７",
    "用語８",
    "用語９",
    "用語Ａ", ]]

#オプションの処理
testcase2 = [
[   #テストパターン
    "よみ１|用語１",
    "よみ２|用語２^120a3",
    "よみ３|用語３^",
    "よみ４|用語４^10a3あいうえお",
    "よみ５|用語５^あいうえお",
    "用語６",
    "用語７^120a3",
    "用語８^",
    "用語９^120a3あいうえお",
    "用語Ａ^あいうえお", ],
[   #想定する結果
    [[(False, '用語１')]],
    [[(True, ('用', 'よ')), (True, ('語', 'み２')), (False, '２')]],
    [[(True, ('用語３', 'よみ３'))]],
    [[(True, ('用', 'よ')), (False, '語'), (False, '４')]],
    [[(True, ('用語５', 'よみ５'))]],
    [[(False, '用語６')]],
    [[(False, '用語７')]],
    [[(False, '用語８')]],
    [[(False, '用語９')]],
    [[(False, '用語Ａ')]], ]]

#オプションと文字データの文字数の多少
testcase3 = [
[   #テストケース
    'いろはにほへと|壱弐参四五六七八九',
    'いろはにほへと|壱弐参四五六七八九^',
    'いろはにほへと|壱弐参四五六七八九^111010111',
    'いろはにほへと|壱弐参四五六七八九^1201012',
    'いろはにほへと|壱弐参四五六七八九^33',
    'いろはにほへと|壱弐参四五六七八九^45',
    'いろはにほへと|壱弐参四五六七八九^55',
    'いろはにほへと|壱弐参四五六七八九^0000000000',
    'いろはにほへと|壱弐参四五六七八九^i9',
    'いろはにほへと|壱弐参四五六七八九^jkl7',
    'いろはにほへと|壱弐参四五六七八九^jkl9',
    'いろはにほへと|壱弐参四五六七八九^jkl55',
        ], 
[   #期待する結果
    [[(False, '壱弐参四五六七八九')]],
    [[(True, ('壱弐参四五六七八九', 'いろはにほへと'))]],
    [[  (True, ('壱', 'い')),
        (True, ('弐', 'ろ')),
        (True, ('参', 'は')),
        (False, '四'),
        (True, ('五', 'に')),
        (False, '六'),
        (True, ('七', 'ほ')),
        (True, ('八', 'へ')),
        (True, ('九', 'と'))]],
    [[  (True, ('壱', 'い')),
        (True, ('弐', 'ろは')),
        (False, '参'),
        (True, ('四', 'に')),
        (False, '五'),
        (True, ('六', 'ほ')),
        (True, ('七', 'へと')),
        (False, '八九')]],
    [[(True, ('壱', 'いろは')), (True, ('弐', 'にほへ')), (False, '参四五六七八九')]],
    [[(True, ('壱', 'いろはに')), (True, ('弐', 'ほへと')), (False, '参四五六七八九')]],
    [[(True, ('壱', 'いろはにほ')), (True, ('弐', 'へと')), (False, '参四五六七八九')]],
    [[  (False, '壱'), (False, '弐'), (False, '参'), (False, '四'), (False, '五'),
        (False, '六'), (False, '七'), (False, '八'), (False, '九')]],
    [[(False, '壱弐参四五六七八九')]],
    [[(True, ('壱', 'いろはにほへと')), (False, '弐参四五六七八九')]],
    [[(True, ('壱', 'いろはにほへと')), (False, '弐参四五六七八九')]],
    [[(True, ('壱', 'いろはにほ')), (True, ('弐', 'へと')), (False, '参四五六七八九')]],
]]

#用語の数
testcase4 = [
[   #テストケース
    '',
    r'いろはにほへと|壱弐参四五六七八九^',
    r'いろはに|壱弐参四; ほへと|五六七八九^',
    r'いろは|壱弐参; にほへ|四五六^; とちり|七八九',
    r'いろ|壱弐; はに|参四^; ほへ|五六; とち|七八九^',
    r'いろ|壱弐; はに|参四^; ほへ|五六; とち|七八^; りぬ|九拾',
        ], 
[   #期待する結果
    [None],
    [[(True, ('壱弐参四五六七八九', 'いろはにほへと'))]],
    [[(False, '壱弐参四')], [(True, ('五六七八九', 'ほへと'))]],
    [[(False, '壱弐参')], [(True, ('四五六', 'にほへ'))], [(False, '七八九')]],
    [   [(False, '壱弐')], [(True, ('参四', 'はに'))],
        [(False, '五六')], [(True, ('七八九', 'とち'))]],
    [   [(False, '壱弐')], [(True, ('参四', 'はに'))], [(False, '五六')],
        [(True, ('七八', 'とち'))], [(False, '九拾')]],
]]

#正規表現による字句解析
class Test1KanaText(unittest.TestCase):
    def test_HTMLTextNode(self):
        for t, e in zip(testcase1[0], testcase1[1]):
            node = KanaText(t)
            rslt = node.astext()
            self.assertEqual(e, rslt)

#オプションの処理
class Test2KanaText(unittest.TestCase):
    def test_KanaText(self):
        for t, e in zip(testcase2[0], testcase2[1]):
            node = KanaText(t)
            rslt = node.aslist()
            self.assertEqual(e, rslt)

#オプションと文字データの文字数の多少
class Test3KanaText(unittest.TestCase):
    def test_KanaText(self):
        for t, e in zip(testcase3[0], testcase3[1]):
            node = KanaText(t)
            rslt = node.aslist()
            self.assertEqual(e, rslt)

#用語の数
class Test4KanaText(unittest.TestCase):
    def test_KanaText(self):
        for t, e in zip(testcase4[0], testcase4[1]):
            node = KanaText(t)
            rslt = node.aslist()
            self.assertEqual(e, rslt)

#KanaText.force_to_parse

if __name__ == '__main__':
    unittest.main()
```

#以上