1# -*- coding: utf-8 -*-
2from __future__ import absolute_import, unicode_literals
3
4import pytest
5from case import skip
6
7from celery.five import text_t
8from celery.utils import term
9from celery.utils.term import colored, fg
10
11
12@skip.if_win32()
13class test_colored:
14
15    @pytest.fixture(autouse=True)
16    def preserve_encoding(self, patching):
17        patching('sys.getdefaultencoding', 'utf-8')
18
19    @pytest.mark.parametrize('name,color', [
20        ('black', term.BLACK),
21        ('red', term.RED),
22        ('green', term.GREEN),
23        ('yellow', term.YELLOW),
24        ('blue', term.BLUE),
25        ('magenta', term.MAGENTA),
26        ('cyan', term.CYAN),
27        ('white', term.WHITE),
28    ])
29    def test_colors(self, name, color):
30        assert fg(30 + color) in str(colored().names[name]('foo'))
31
32    @pytest.mark.parametrize('name', [
33        'bold', 'underline', 'blink', 'reverse', 'bright',
34        'ired', 'igreen', 'iyellow', 'iblue', 'imagenta',
35        'icyan', 'iwhite', 'reset',
36    ])
37    def test_modifiers(self, name):
38        assert str(getattr(colored(), name)('f'))
39
40    def test_unicode(self):
41        assert text_t(colored().green('∂bar'))
42        assert colored().red('éefoo') + colored().green('∂bar')
43        assert colored().red('foo').no_color() == 'foo'
44
45    def test_repr(self):
46        assert repr(colored().blue('åfoo'))
47        assert "''" in repr(colored())
48
49    def test_more_unicode(self):
50        c = colored()
51        s = c.red('foo', c.blue('bar'), c.green('baz'))
52        assert s.no_color()
53        c._fold_no_color(s, 'øfoo')
54        c._fold_no_color('fooå', s)
55
56        c = colored().red('åfoo')
57        assert c._add(c, 'baræ') == '\x1b[1;31m\xe5foo\x1b[0mbar\xe6'
58
59        c2 = colored().blue('ƒƒz')
60        c3 = c._add(c, c2)
61        assert c3 == '\x1b[1;31m\xe5foo\x1b[0m\x1b[1;34m\u0192\u0192z\x1b[0m'
62