Detailed tests of baserelease.py
================================

.. :doctest:
.. :setup: zest.releaser.tests.functional.setup
.. :teardown: zest.releaser.tests.functional.teardown

Change to a git dir:

    >>> gitsourcedir
    'TESTTEMP/tha.example-git'
    >>> import os
    >>> os.chdir(gitsourcedir)

Init the Basereleaser, which is otherwise only used as a base class.

    >>> from zest.releaser import baserelease
    >>> base = baserelease.Basereleaser()

The data dict is initialized.  And a vcs is chosen:

    >>> base.data['workingdir']
    'TESTTEMP/tha.example-git'
    >>> base.data['name']
    'tha.example'
    >>> base.vcs
    <Git at TESTTEMP/tha.example-git .>

Two methods are unimplemented:

    >>> base.prepare()
    Traceback (most recent call last):
    ...
    NotImplementedError
    >>> base.execute()
    Traceback (most recent call last):
    ...
    NotImplementedError

We can update commit messages based on what we find in ``setup.cfg``::

    >>> lines = [
    ...     "[zest.releaser]",
    ...     "extra-message = Aargh!"]
    >>> with open('setup.cfg', 'w') as f:
    ...     _ = f.write('\n'.join(lines))
    >>> base = baserelease.Basereleaser()
    >>> print(base.update_commit_message('Ni!'))
    Ni!
    <BLANKLINE>
    Aargh!

Check that this works with non-ascii too.

    >>> lines = [
    ...     "[zest.releaser]".encode('utf-8'),
    ...     "extra-message = \u2603".encode('utf-8')]
    >>> with open('setup.cfg', 'wb') as f:
    ...     _ = f.write(b'\n'.join(lines))
    >>> base = baserelease.Basereleaser()
    >>> base.update_commit_message('Ni!')
    'Ni!\n\n\u2603'

And check with multiple lines.

    >>> lines = [
    ...     "[zest.releaser]",
    ...     "extra-message =",
    ...     "    Where is my towel?",
    ...     "    Not again."]
    >>> with open('setup.cfg', 'w') as f:
    ...     _ = f.write('\n'.join(lines))
    >>> base = baserelease.Basereleaser()
    >>> print(base.update_commit_message('Ni!'))
    Ni!
    <BLANKLINE>
    Where is my towel?
    Not again.
