OSDN Git Service

refactoring pmd.writer
[meshio/pymeshio.git] / test / pmd_test.py
1 # coding: utf-8
2 import sys
3 import io
4 import unittest
5 import pymeshio.pmd
6 import pymeshio.pmd.loader
7 import pymeshio.pmd.writer
8
9
10 PMD_FILE=u'resources/初音ミクVer2.pmd'
11
12
13 def test_old_pmd_load():
14     loader=pymeshio.pmd.IO()
15     assert loader.read(PMD_FILE)
16
17
18 class TestPmd(unittest.TestCase):
19     
20     def setUp(self):
21         pass
22
23     def test_load(self):
24         model=pymeshio.pmd.loader.load_from_file(PMD_FILE)
25         self.assertEqual(pymeshio.pmd.Model,  model.__class__)
26         self.assertEqual(u'初音ミク'.encode('cp932'),  model.name)
27         self.assertEqual(u'Miku Hatsune'.encode('cp932'),  model.english_name)
28         self.assertEqual((
29             u"PolyMo用モデルデータ:初音ミク ver.2.3\n"+
30             u"(物理演算対応モデル)\n"+
31             u"\n"+
32             u"モデリング   :あにまさ氏\n"+
33             u"データ変換   :あにまさ氏\n"+
34             u"Copyright :CRYPTON FUTURE MEDIA, INC").encode('cp932'),
35             model.comment)
36         self.assertEqual((
37             u"MMD Model: Miku Hatsune ver.2.3\n"+
38             u"(Physical Model)\n"+
39             u"\n"+
40             u"Modeling by       Animasa\n"+
41             u"Converted by      Animasa\n"+
42             u"Copyright         CRYPTON FUTURE MEDIA, INC").encode('cp932'),
43             model.english_comment)
44         self.assertEqual(12354,  len(model.vertices))
45         self.assertEqual(22961 * 3,  len(model.indices))
46         print("{0} textures".format(len(model.toon_textures)))
47         self.assertEqual(17,  len(model.materials))
48         self.assertEqual(140,  len(model.bones))
49         self.assertEqual(31,  len(model.morphs))
50         self.assertEqual(45,  len(model.rigidbodies))
51         self.assertEqual(27,  len(model.joints))
52
53     def test_write(self):
54         # read source file
55         buf=pymeshio.common.readall(PMD_FILE)
56         # load and write to out
57         model=pymeshio.pmd.loader.load(io.BytesIO(buf))
58         out=io.BytesIO()
59         pymeshio.pmd.writer.write(out, model)
60         # read out buffer again
61         model2=pymeshio.pmd.loader.load(io.BytesIO(out.getvalue()))
62         self.assertEqual(model, model2)
63