Doctests for the modify_delbranches spell and its friends
=========================================================

NifToaster modify_delbranches check
-----------------------------------

>>> import os
>>> from os.path import dirname
>>> dirpath = __file__
>>> for i in range(3): #recurse up to root repo dir
...     dirpath = dirname(dirpath)
>>> repo_root = dirpath
>>> script_dir = os.path.join(repo_root, "scripts", "nif")
>>> import sys
>>> script = os.path.join(script_dir, "niftoaster.py")
>>> sys.path.insert(-1, script_dir.replace("\\\\", "/"))
>>> nif_dir = "tests/spells/nif/files/"
>>> file_name = "test_opt_mergeduplicates.nif"
>>> file_name_full = nif_dir + file_name
>>> nif_dir_out = nif_dir + "out/"
>>> file_name_out = "_test_opt_mergeduplicates.nif"
>>> file_name_full_out = nif_dir + file_name_out

>>> from pyffi.formats.nif import NifFormat
>>> data = NifFormat.Data()
>>> data.read(open(file_name_full, "rb"))
>>> # check that file has properties
>>> print([block.__class__.__name__ for block in data.blocks])
['NiNode', 'NiVertexColorProperty', 'NiZBufferProperty', 'NiStencilProperty', 'NiDitherProperty', 'NiNode', 'NiZBufferProperty', 'NiVertexColorProperty', 'NiStencilProperty', 'NiDitherProperty', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiSpecularProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiSpecularProperty', 'NiAlphaProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiWireframeProperty', 'NiAlphaProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiWireframeProperty', 'NiDitherProperty', 'NiTriStripsData']


>>> # strip properties
>>> import niftoaster
>>> sys.argv = ["niftoaster.py", "--prefix", "_", "--noninteractive", "-x", "NiProperty", "modify_delbranches", file_name_full]
>>> niftoaster.NifToaster().cli() # doctest: +REPORT_NDIFF +ELLIPSIS
pyffi.toaster:INFO:=== tests/spells/nif/files/test_opt_mergeduplicates.nif ===
pyffi.toaster:INFO:  --- modify_delbranches ---
pyffi.toaster:INFO:    ~~~ NiNode [Scene Root] ~~~
pyffi.toaster:INFO:      ~~~ NiVertexColorProperty [] ~~~
pyffi.toaster:INFO:        stripping this branch
pyffi.toaster:INFO:      ~~~ NiZBufferProperty [] ~~~
pyffi.toaster:INFO:        stripping this branch
pyffi.toaster:INFO:      ~~~ NiStencilProperty [] ~~~
pyffi.toaster:INFO:        stripping this branch
pyffi.toaster:INFO:      ~~~ NiDitherProperty [] ~~~
pyffi.toaster:INFO:        stripping this branch
pyffi.toaster:INFO:      ~~~ NiNode [Cone] ~~~
pyffi.toaster:INFO:        ~~~ NiZBufferProperty [] ~~~
pyffi.toaster:INFO:          stripping this branch
pyffi.toaster:INFO:        ~~~ NiVertexColorProperty [] ~~~
pyffi.toaster:INFO:          stripping this branch
pyffi.toaster:INFO:        ~~~ NiStencilProperty [] ~~~
pyffi.toaster:INFO:          stripping this branch
pyffi.toaster:INFO:        ~~~ NiDitherProperty [] ~~~
pyffi.toaster:INFO:          stripping this branch
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 0] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [Red] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiSpecularProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 1] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [AlsoRed] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiSpecularProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiAlphaProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 2] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [Skin] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiWireframeProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiAlphaProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 3] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [Red] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiWireframeProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiDitherProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:  writing tests/spells/nif/files..._test_opt_mergeduplicates.nif
pyffi.toaster:INFO:Finished.
>>> # check that file no longer has properties
>>> data = NifFormat.Data()
>>> data.read(open(file_name_full_out, "rb"))
>>> print([block.__class__.__name__ for block in data.blocks])
['NiNode', 'NiNode', 'NiTriStrips', 'NiTriStripsData', 'NiTriStrips', 'NiTriStripsData', 'NiTriStrips', 'NiTriStripsData', 'NiTriStrips', 'NiTriStripsData']
>>> # clean up
>>> import os
>>> os.remove(file_name_full_out)


NifToaster modify_delalphaprop check
------------------------------------

>>> file_name = "test_opt_mergeduplicates.nif"
>>> file_name_out = "_" + file_name
>>> file_name_full = nif_dir + file_name
>>> file_name_full_out = nif_dir + file_name_out

>>> from pyffi.formats.nif import NifFormat
>>> data = NifFormat.Data()
>>> data.read(open(file_name_full, "rb"))
>>> # check that file has alpha properties
>>> print([block.__class__.__name__ for block in data.blocks])
['NiNode', 'NiVertexColorProperty', 'NiZBufferProperty', 'NiStencilProperty', 'NiDitherProperty', 'NiNode', 'NiZBufferProperty', 'NiVertexColorProperty', 'NiStencilProperty', 'NiDitherProperty', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiSpecularProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiSpecularProperty', 'NiAlphaProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiWireframeProperty', 'NiAlphaProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiWireframeProperty', 'NiDitherProperty', 'NiTriStripsData']
>>> # strip properties

>>> import niftoaster
>>> sys.argv = ["niftoaster.py", "--prefix", "_", "--noninteractive", "modify_delalphaprop", file_name_full]
>>> niftoaster.NifToaster().cli() # doctest: +REPORT_UDIFF +ELLIPSIS
pyffi.toaster:INFO:=== tests/spells/nif/files/test_opt_mergeduplicates.nif ===
pyffi.toaster:INFO:  --- modify_delalphaprop ---
pyffi.toaster:INFO:    ~~~ NiNode [Scene Root] ~~~
pyffi.toaster:INFO:      ~~~ NiVertexColorProperty [] ~~~
pyffi.toaster:INFO:      ~~~ NiZBufferProperty [] ~~~
pyffi.toaster:INFO:      ~~~ NiStencilProperty [] ~~~
pyffi.toaster:INFO:      ~~~ NiDitherProperty [] ~~~
pyffi.toaster:INFO:      ~~~ NiNode [Cone] ~~~
pyffi.toaster:INFO:        ~~~ NiZBufferProperty [] ~~~
pyffi.toaster:INFO:        ~~~ NiVertexColorProperty [] ~~~
pyffi.toaster:INFO:        ~~~ NiStencilProperty [] ~~~
pyffi.toaster:INFO:        ~~~ NiDitherProperty [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 0] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            ~~~ NiSourceTexture [] ~~~
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [Red] ~~~
pyffi.toaster:INFO:          ~~~ NiSpecularProperty [] ~~~
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 1] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            ~~~ NiSourceTexture [] ~~~
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [AlsoRed] ~~~
pyffi.toaster:INFO:          ~~~ NiSpecularProperty [] ~~~
pyffi.toaster:INFO:          ~~~ NiAlphaProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 2] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            ~~~ NiSourceTexture [] ~~~
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [Skin] ~~~
pyffi.toaster:INFO:          ~~~ NiWireframeProperty [] ~~~
pyffi.toaster:INFO:          ~~~ NiAlphaProperty [] ~~~
pyffi.toaster:INFO:            stripping this branch
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:        ~~~ NiTriStrips [Tri Cone 3] ~~~
pyffi.toaster:INFO:          ~~~ NiTexturingProperty [] ~~~
pyffi.toaster:INFO:            ~~~ NiSourceTexture [] ~~~
pyffi.toaster:INFO:          ~~~ NiMaterialProperty [Red] ~~~
pyffi.toaster:INFO:          ~~~ NiWireframeProperty [] ~~~
pyffi.toaster:INFO:          ~~~ NiDitherProperty [] ~~~
pyffi.toaster:INFO:          ~~~ NiTriStripsData [] ~~~
pyffi.toaster:INFO:  writing ..._test_opt_mergeduplicates.nif
pyffi.toaster:INFO:Finished.
>>> # check that file no longer has properties
>>> data = NifFormat.Data()
>>> data.read(open(file_name_full_out, "rb"))
>>> print([block.__class__.__name__ for block in data.blocks])
['NiNode', 'NiVertexColorProperty', 'NiZBufferProperty', 'NiStencilProperty', 'NiDitherProperty', 'NiNode', 'NiZBufferProperty', 'NiVertexColorProperty', 'NiStencilProperty', 'NiDitherProperty', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiSpecularProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiSpecularProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiWireframeProperty', 'NiTriStripsData', 'NiTriStrips', 'NiTexturingProperty', 'NiSourceTexture', 'NiMaterialProperty', 'NiWireframeProperty', 'NiDitherProperty', 'NiTriStripsData']
>>> # clean up
>>> import os
>>> os.remove(file_name_full_out)
