in pyfilesystem2, movedir copies the content from one directory to
antoher, optionally creating the destination if create=True.
When the destination is exists and is a directory, shutil.move moves
the source directory inside the destinatinn directory.
shutil.copytree also fails if the destination already exists; so here
we resort to distutils.dir_util.copy_tree (it's part of python std lib)
The 'mode' and 'allow_zip_64' arguments are no longer there in
pyfileststem2's zipfs module; allow_zip_64 is the default now,
and the 'mode' is replaced by a 'write' boolean argument
The "contents" root dir must be created manually.
as pyfilesystem2 works internally with unicode strings, some methods
(e.g. self._fs.exists()) fail with TypeError if passed bytes strings
(on python 2 bytes == str).
We decode bytes path strings using the system's default filesystem
encoding.
The beginPath and addPoint methods of PointToSegmentPen already take
extra **kwargs (via BasePointToSegmentPen); only the addComponent method
does not.
This makes it raise TypeError when an unknown keyword argument is passed
(e.g. 'identifier' for UFO3 objects).
For the PointToSegmentPen, which translates between the PointPen and
the SegmentPen API, it is ok if we only use the arguments that have
an equivalent in the SegmentPen API, and silently discard the **kwargs.
Since the test suite is inlined, it makes sense to also have the test data installed alongside the test modules.
So all the content of the two top-level folders Data and TestData is now placed inside Lib/ufoLib/test/testadata.
The MANIFEST.in has been adjusted accordingly.
The `install_package_data` in setup.py ensures the package data specified in the manifest is installed with the package.
This way anyone who installs ufoLib (even the wheel from PyPI) can run the test suite with `pytest --pyargs ufoLib`.
When an element tree is built from code, or it is parsed from a string that was not pretty-printed (i.e. without indentation), the 'text' attribute of an Element instance can be None. So we must ensure it's not None before calling `strip()` method.