from __future__ import absolute_import

import sys

from nose import SkipTest

from .. import compression
from .utils import TestCase
from .utils import mask_modules


class test_compression(TestCase):

    def setUp(self):
        try:
            import bz2  # noqa
        except ImportError:
            self.has_bzip2 = False
        else:
            self.has_bzip2 = True

    @mask_modules("bz2")
    def test_no_bz2(self):
        c = sys.modules.pop("kombu.compression")
        try:
            import kombu.compression
            self.assertFalse(hasattr(kombu.compression, "bz2"))
        finally:
            if c is not None:
                sys.modules["kombu.compression"] = c

    def test_encoders(self):
        encoders = compression.encoders()
        self.assertIn("application/x-gzip", encoders)
        if self.has_bzip2:
            self.assertIn("application/x-bz2", encoders)

    def test_compress__decompress__zlib(self):
        text = "The Quick Brown Fox Jumps Over The Lazy Dog"
        c, ctype = compression.compress(text, "zlib")
        self.assertNotEqual(text, c)
        d = compression.decompress(c, ctype)
        self.assertEqual(d, text)

    def test_compress__decompress__bzip2(self):
        if not self.has_bzip2:
            raise SkipTest("bzip2 not available")
        text = "The Brown Quick Fox Over The Lazy Dog Jumps"
        c, ctype = compression.compress(text, "bzip2")
        self.assertNotEqual(text, c)
        d = compression.decompress(c, ctype)
        self.assertEqual(d, text)
