OSDN Git Service

implement converter
[meshio/pymeshio.git] / test / pmx_test.py
index 2d64ae1..858f55e 100644 (file)
@@ -1,34 +1,73 @@
 # coding: utf-8\r
-import pymeshio.pmx\r
-\r
-\r
-PMX_MODEL='resources/初音ミクVer2.pmx'\r
-\r
-def test_read():\r
-    io=pymeshio.pmx.IO()\r
-    model=io.read(PMX_MODEL)\r
-    assert model.__class__==pymeshio.pmx.Model\r
-    assert model.name=='初音ミク'\r
-    assert model.english_name=='Miku Hatsune'\r
-    assert model.comment==(\r
-            "PolyMo用モデルデータ:初音ミク ver.2.3\r\n"+\r
-            "(物理演算対応モデル)\r\n"+\r
-            "\r\n"+\r
-            "モデリング   :あにまさ氏\r\n"+\r
-            "データ変換   :あにまさ氏\r\n"+\r
-            "Copyright :CRYPTON FUTURE MEDIA, INC"\r
-            )\r
-    assert model.english_comment==(\r
-            "MMD Model: Miku Hatsune ver.2.3\r\n"+\r
-            "(Physical Model)\r\n"+\r
-            "\r\n"+\r
-            "Modeling by       Animasa\r\n"+\r
-            "Converted by      Animasa\r\n"+\r
-            "Copyright         CRYPTON FUTURE MEDIA, INC"\r
-            )\r
-\r
-    assert len(model.vertices)==12354\r
-    assert len(model.indices)==22961 * 3\r
-    # texture\r
-    assert len(model.materials)==17\r
-    assert len(model.bones)==140\r
+import unittest\r
+import io\r
+import pymeshio.common\r
+import pymeshio.pmd.reader\r
+import pymeshio.pmx.reader\r
+import pymeshio.pmx.writer\r
+import pymeshio.converter\r
+\r
+\r
+PMD_FILE=pymeshio.common.unicode('resources/初音ミクVer2.pmd')\r
+PMX_FILE=pymeshio.common.unicode('resources/初音ミクVer2.pmx')\r
+\r
+\r
+class TestPmx(unittest.TestCase):\r
+    \r
+    def setUp(self):\r
+        pass\r
+\r
+    def test_read(self):\r
+        model=pymeshio.pmx.reader.read_from_file(PMX_FILE)\r
+        self.assertEqual(pymeshio.pmx.Model,  model.__class__)\r
+        self.assertEqual(pymeshio.common.unicode('初音ミク'),  model.name)\r
+        self.assertEqual(pymeshio.common.unicode('Miku Hatsune'),  model.english_name)\r
+        self.assertEqual(pymeshio.common.unicode(\r
+                "PolyMo用モデルデータ:初音ミク ver.2.3\r\n"+\r
+                "(物理演算対応モデル)\r\n"+\r
+                "\r\n"+\r
+                "モデリング       :あにまさ氏\r\n"+\r
+                "データ変換       :あにまさ氏\r\n"+\r
+                "Copyright     :CRYPTON FUTURE MEDIA, INC"),\r
+                model.comment)\r
+        self.assertEqual(pymeshio.common.unicode(\r
+                "MMD Model: Miku Hatsune ver.2.3\r\n"+\r
+                "(Physical Model)\r\n"+\r
+                "\r\n"+\r
+                "Modeling by   Animasa\r\n"+\r
+                "Converted by  Animasa\r\n"+\r
+                "Copyright             CRYPTON FUTURE MEDIA, INC"),\r
+                model.english_comment)\r
+\r
+        self.assertEqual(12354,  len(model.vertices))\r
+        self.assertEqual(22961 * 3,  len(model.indices))\r
+        print("{0} textures".format(len(model.textures)))\r
+        self.assertEqual(17,  len(model.materials))\r
+        self.assertEqual(140,  len(model.bones))\r
+        self.assertEqual(30,  len(model.morphs))\r
+        self.assertEqual(9,  len(model.display_slots))\r
+        self.assertEqual(45,  len(model.rigidbodies))\r
+        self.assertEqual(27,  len(model.joints))\r
+\r
+    def test_write(self):\r
+        # read source file\r
+        buf=pymeshio.common.readall(PMX_FILE)\r
+        # read and write to out\r
+        model=pymeshio.pmx.reader.read(io.BytesIO(buf))\r
+        out=io.BytesIO()\r
+        pymeshio.pmx.writer.write(out, model)\r
+        # read out buffer again\r
+        model2=pymeshio.pmx.reader.read(io.BytesIO(out.getvalue()))\r
+        self.assertEqual(model, model2)\r
+\r
+    def test_convert(self):\r
+        # convert\r
+        pmd=pymeshio.pmd.reader.read_from_file(PMD_FILE)\r
+        converted=pymeshio.converter.pmd_to_pmx(pmd)\r
+        # validate\r
+        pmx=pymeshio.pmx.reader.read_from_file(PMX_FILE)\r
+        # check diffference\r
+        pmx.diff(converted)\r
+        #self.assertEqual(pmx, converted)\r
+        pymeshio.pmx.writer.write(io.open("tmp.pmx", "wb"), converted)\r
+\r