from
shogi.piece
import
Piece
from
shogi.piece
import
PieceError
import
unittest
class
Test(unittest.TestCase):
all_pieces
=
(
(
None
,
' '
,
'* '
,
' * '
,
' * '
,
None
),
(
' * '
,
' '
,
'* '
,
' * '
,
' * '
,
None
),
(
' XX'
,
' '
,
'* '
,
' * '
,
' * '
,
None
),
(
'+FU'
,
'+'
,
'FU'
,
'+FU'
,
'-FU'
,
'+TO'
),
(
'+KY'
,
'+'
,
'KY'
,
'+KY'
,
'-KY'
,
'+NY'
),
(
'+KE'
,
'+'
,
'KE'
,
'+KE'
,
'-KE'
,
'+NK'
),
(
'+GI'
,
'+'
,
'GI'
,
'+GI'
,
'-GI'
,
'+NG'
),
(
'+KI'
,
'+'
,
'KI'
,
'+KI'
,
'-KI'
,
None
),
(
'+KA'
,
'+'
,
'KA'
,
'+KA'
,
'-KA'
,
'+UM'
),
(
'+HI'
,
'+'
,
'HI'
,
'+HI'
,
'-HI'
,
'+RY'
),
(
'+OU'
,
'+'
,
'OU'
,
'+OU'
,
'-OU'
,
None
),
(
'+TO'
,
'+'
,
'TO'
,
'+FU'
,
'-TO'
,
None
),
(
'+NY'
,
'+'
,
'NY'
,
'+KY'
,
'-NY'
,
None
),
(
'+NK'
,
'+'
,
'NK'
,
'+KE'
,
'-NK'
,
None
),
(
'+NG'
,
'+'
,
'NG'
,
'+GI'
,
'-NG'
,
None
),
(
'+UM'
,
'+'
,
'UM'
,
'+KA'
,
'-UM'
,
None
),
(
'+RY'
,
'+'
,
'RY'
,
'+HI'
,
'-RY'
,
None
),
(
'-FU'
,
'-'
,
'FU'
,
'-FU'
,
'+FU'
,
'-TO'
),
(
'-KY'
,
'-'
,
'KY'
,
'-KY'
,
'+KY'
,
'-NY'
),
(
'-KE'
,
'-'
,
'KE'
,
'-KE'
,
'+KE'
,
'-NK'
),
(
'-GI'
,
'-'
,
'GI'
,
'-GI'
,
'+GI'
,
'-NG'
),
(
'-KI'
,
'-'
,
'KI'
,
'-KI'
,
'+KI'
,
None
),
(
'-KA'
,
'-'
,
'KA'
,
'-KA'
,
'+KA'
,
'-UM'
),
(
'-HI'
,
'-'
,
'HI'
,
'-HI'
,
'+HI'
,
'-RY'
),
(
'-OU'
,
'-'
,
'OU'
,
'-OU'
,
'+OU'
,
None
),
(
'-TO'
,
'-'
,
'TO'
,
'-FU'
,
'+TO'
,
None
),
(
'-NY'
,
'-'
,
'NY'
,
'-KY'
,
'+NY'
,
None
),
(
'-NK'
,
'-'
,
'NK'
,
'-KE'
,
'+NK'
,
None
),
(
'-NG'
,
'-'
,
'NG'
,
'-GI'
,
'+NG'
,
None
),
(
'-UM'
,
'-'
,
'UM'
,
'-KA'
,
'+UM'
,
None
),
(
'-RY'
,
'-'
,
'RY'
,
'-HI'
,
'+RY'
,
None
),
)
def
test_all(
self
):
print
'[All pieces]'
for
csa, owner, type_, origin, reverse, promote
in
self
.all_pieces:
print
csa, owner, type_, origin, reverse, promote
p
=
Piece()
if
not
csa
else
Piece(csa)
self
.assertEqual(
str
(p),
'%s%s'
%
(owner, type_))
self
.assertEqual(
repr
(p),
"Piece('%s%s')"
%
(owner, type_))
self
.assertEqual(p.owner(), owner)
self
.assertEqual(p.type_(), type_)
self
.assertEqual(p.origin(), Piece(origin))
self
.assertEqual(p.reverse(), Piece(reverse))
self
.assertEqual(p.is_promotable(), promote !
=
None
)
if
promote:
self
.assertEqual(p.promote(), Piece(promote))
def
test_initialize_error(
self
):
print
'[Initialize errors]'
for
csa
in
('
', '
', '
-
', '
SPAM
', '
=
FU
', '
+
Fu',
0
):
with
self
.assertRaises(PieceError) as cm:
Piece(csa)
print
cm.exception
def
test_modify_error(
self
):
print
'[Modify error]'
with
self
.assertRaises(TypeError) as cm:
x
=
Piece(
'+FU'
)
x.csa
=
'-FU'
print
cm.exception
def
test_delete_error(
self
):
print
'[Delete error]'
with
self
.assertRaises(TypeError) as cm:
x
=
Piece(
'+FU'
)
del
x.csa
print
cm.exception
def
test_promote_error(
self
):
print
'[Promote errors]'
for
x
in
(
None
,
'+'
,
'-'
):
for
y
in
(
'OU'
,
'KI'
,
'TO'
,
'NY'
,
'NK'
,
'NG'
,
'UM'
,
'RY'
):
with
self
.assertRaises(PieceError) as cm:
if
not
x:
Piece().promote()
else
:
Piece(x
+
y).promote()
print
cm.exception
if
not
x:
break
if
__name__
=
=
"__main__"
:
unittest.main()