"""
    lesscpy color tests.
"""
import unittest

from lesscpy.lessc import color


class TestLessColor(unittest.TestCase):
    def setUp(self):
        self.color = color.Color()

    def test_rgb(self):
        test = self.color.rgb
        for r, g, b, v in [
            (255, 255, 255, '#ffffff'),
            (100, 100, 100, '#646464'),
            (0, 0, 0, '#000000'),
            ('70%', '70%', '70%', '#b2b2b2'),
            ('1%', '1%', '1%', '#020202'),
            ('100%', '100%', '100%', '#ffffff'),
            ('0%', '0%', '0%', '#000000'),
        ]:
            self.assertEqual(test(r, g, b), v)
        for r, g, b, a, v in [
            (255, 255, 255, 0.5, '#ffffff'),
            (100, 100, 100, 0.9, '#646464'),
            (0, 0, 0, 100, '#000000'),
        ]:
            self.assertEqual(test(r, g, b, a), v)
        for args in [
            (255, 255, 256),
            (0, -1, 0),
            ('100%', '100%', 200),
            ('100%', '100%', '200%'),
        ]:
            self.assertRaises(ValueError, test, args)

    def test_rgba(self):
        test = self.color.rgba
        for r, g, b, a, v in [
            (255, 255, 255, 255, '#ffffff'),
            (100, 100, 100, 100, '#646464'),
            (0, 0, 0, 0, 'rgba(0,0,0,0)'),
            ('70%', '70%', '70%', '70%', '#b2b2b2b2'),
            ('1%', '1%', '1%', '1%', '#02020202'),
            ('100%', '100%', '100%', '100%', '#ffffffff'),
            ('0%', '0%', '0%', '0%', 'rgba(0,0,0,0)'),
        ]:
            self.assertEqual(test(r, g, b, a), v)
        for args in [
            (255, 255, 255, 256),
            (0, 0, 0, -1),
            ('100%', '100%', '100%', 200),
            ('100%', '100%', '100%', '200%'),
        ]:
            self.assertRaises(ValueError, test, args)

    def test_argb(self):
        test = self.color.argb
        for a, r, g, b, v in [
            (255, 255, 255, 255, '#ffffffff'),
            (100, 100, 100, 100, '#ff646464'),
            (0, 0, 0, 0, '#00000000'),
            ('70%', '70%', '70%', '70%', '#b2b2b2b2'),
            ('1%', '1%', '1%', '1%', '#02020202'),
            ('100%', '100%', '100%', '100%', '#ffffffff'),
            ('0%', '0%', '0%', '0%', '#00000000'),
        ]:
            self.assertEqual(test(a, r, g, b), v)
        for args in [
            (255, 255, 255, 256),
            (-1, 0, 0, 0),
            (200, '100%', '100%', '100%'),
            ('200%', '100%', '100%', '100%'),
        ]:
            self.assertRaises(ValueError, test, args)

    def test_hsl(self):
        """
        """
        test = self.color.hsl
        for h, s, l, v in [
            (31, '1%', '4%', '#0a0a0a'),
            (0, '100%', '100%', '#ffffff'),
            (100, '100%', '100%', '#ffffff'),
            (0, '0%', '0%', '#000000'),
            (100, '0%', '0%', '#000000'),
        ]:
            self.assertEqual(test(h, s, l), v)

    def test_hsla(self):
        test = self.color.hsla
        for h, s, l, a, v in [
            (31, '1%', '4%', '0%', 'rgba(10.0,10.0,10.0,0.0)'),
            (31, '30%', '4%', '1%', 'rgba(13.0,10.0,7.0,0.01)'),
            (31, '60%', '4%', '20%', 'rgba(16.0,10.0,4.0,0.2)'),
            (31, '90%', '4%', '60%', 'rgba(19.0,11.0,1.0,0.6)'),
            (31, '100%', '4%', '100%', 'rgba(20.0,11.0,0.0,1.0)'),
        ]:
            self.assertEqual(test(h, s, l, a), v)

    def test_fmt(self):
        test = self.color.fmt
        self.assertEqual(test('#000'), '#000000')
        self.assertEqual(test('#000000'), '#000000')
        self.assertEqual(test('#0000'), '#00000000')
        self.assertEqual(test('#00000000'), '#00000000')
        self.assertEqual(test('#AAA'), '#aaaaaa')
        self.assertEqual(test('#Abc'), '#aabbcc')
        self.assertEqual(test('#AbCdEf'), '#abcdef')
        self.assertRaises(ValueError, test, '#xxx')
        self.assertRaises(ValueError, test, None)
        self.assertRaises(ValueError, test, 'aabbcc')
        self.assertRaises(ValueError, test, '#4aabbcc')

    def test_saturate(self):
        test = self.color.saturate
        for c, p, v in [
            ('#555', '1%', '#565454'),
            ('#555', '10%', '#5e4c4c'),
            ('#555', '20%', '#664444'),
            ('#555', '40%', '#773333'),
            ('#555', '60%', '#882222'),
            ('#555', '100%', '#aa0000'),
            ('#000', '100%', '#000000'),
            ('#000', '0%', '#000000'),
            ('#fff', '100%', '#ffffff'),
            ('#fff', '0%', '#ffffff'),
            ('#29332f', '1%', '#29332f'),
            ('#29332f', '10%', '#243830'),
            ('#29332f', '20%', '#203c31'),
            ('#29332f', '40%', '#174533'),
            ('#29332f', '60%', '#0d4f35'),
            ('#29332f', '100%', '#005c37'),

        ]:
            self.assertEqual(test(c, p), v, v)

    def test_desaturate(self):
        test = self.color.desaturate
        for c, p, v in [
            ('#555', '1%', '#555555'),
            ('#555', '10%', '#555555'),
            ('#555', '20%', '#555555'),
            ('#555', '40%', '#555555'),
            ('#555', '60%', '#555555'),
            ('#555', '100%', '#555555'),
            ('#000', '100%', '#000000'),
            ('#000', '0%', '#000000'),
            ('#fff', '100%', '#ffffff'),
            ('#fff', '0%', '#ffffff'),
            ('#29332f', '1%', '#29332f'),
            ('#29332f', '10%', '#2e2e2e'),
            ('#29332f', '20%', '#2e2e2e'),
            ('#29332f', '40%', '#2e2e2e'),
            ('#29332f', '60%', '#2e2e2e'),
            ('#29332f', '100%', '#2e2e2e'),

        ]:
            self.assertEqual(test(c, p), v, v)

    def test_spin(self):
        test = self.color.spin
        for c, p, v in [
            ('#555', '1%', '#555555'),
            ('#555', '10%', '#555555'),
            ('#555', '20%', '#555555'),
            ('#555', '40%', '#555555'),
            ('#555', '60%', '#555555'),
            ('#555', '100%', '#555555'),
            ('#000', '100%', '#000000'),
            ('#000', '0%', '#000000'),
            ('#fff', '100%', '#ffffff'),
            ('#fff', '0%', '#ffffff'),
            ('#29332f', '1%', '#29332f'),
            ('#29332f', '10%', '#293331'),
            ('#29332f', '20%', '#293332'),
            ('#29332f', '40%', '#293033'),
            ('#29332f', '60%', '#292d33'),
            ('#29332f', '100%', '#2c2933'),

        ]:
            self.assertEqual(test(c, p), v, v)
