# -*- coding: utf-8 -*-
r"""Unit tests

"""

from __future__ import absolute_import, print_function

import io
import os
import sys
import unittest

from _test_setup import DATADIR

from cutils import shasum


PY2 = sys.version_info[0] <= 2


class ChangedDir(object):

    """Context manager to temporarily change the directory"""

    def __init__(self, path):
        self._new_dir = path
        self._prev_dir = None

    def __enter__(self):
        self._prev_dir = os.getcwd()
        os.chdir(self._new_dir)

    def __exit__(self, *args, **kwds):
        if self._prev_dir is not None:
            os.chdir(self._prev_dir)
            self._prev_dir = None


class SignifyTests(unittest.TestCase):

    def test_empty(self):
        destfile = io.StringIO()
        opts = shasum.gen_opts(algorithm="SHA256",
                               dest=destfile,
                               files=[os.path.join(DATADIR, "empty")])
        shasum.shasum(opts)
        self.assertTrue(
            destfile.getvalue().startswith(
                "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *"))

    def test_empty_mmap(self):
        destfile = io.StringIO()
        opts = shasum.gen_opts(algorithm="SHA256",
                               dest=destfile,
                               files=[os.path.join(DATADIR, "empty")],
                               mmap=True)
        shasum.shasum(opts)
        self.assertTrue(
            destfile.getvalue().startswith(
                "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *"))

    def test_empty_no_mmap(self):
        destfile = io.StringIO()
        opts = shasum.gen_opts(algorithm="SHA256",
                               dest=destfile,
                               files=[os.path.join(DATADIR, "empty")],
                               mmap=False)
        shasum.shasum(opts)
        self.assertTrue(
            destfile.getvalue().startswith(
                "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855 *"))


if __name__ == "__main__":
    sys.exit(unittest.main())
