var Color = require('../../src/color');
var assert = require('assert');

describe('Colors', function() {
    describe('named colors', function() {
        it('bisque', function() {
            var c = new Color('bisque');
            assertColor(c, 255, 228, 196, null);
            assert.equal(c.isTransparent(), false);
        });

        it('BLUE', function() {
            var c = new Color('BLUE');
            assertColor(c, 0, 0, 255, null);
            assert.equal(c.isTransparent(), false);
        });
    });

    describe('rgb()', function() {
        it('rgb(1,3,5)', function() {
            var c = new Color('rgb(1,3,5)');
            assertColor(c, 1, 3, 5, null);
            assert.equal(c.isTransparent(), false);
        });

        it('rgb(222, 111, 50)', function() {
            var c = new Color('rgb(222, 111, 50)');
            assertColor(c, 222, 111, 50, null);
            assert.equal(c.isTransparent(), false);
        });

        it('rgb( 222, 111 , 50)', function() {
            var c = new Color('rgb(222 , 111 , 50)');
            assertColor(c, 222, 111, 50, null);
            assert.equal(c.isTransparent(), false);
        });
    });

    describe('rgba()', function() {
        it('rgba(200,3,5,1)', function() {
            var c = new Color('rgba(200,3,5,1)');
            assertColor(c, 200, 3, 5, 1);
            assert.equal(c.isTransparent(), false);
        });

        it('rgba(222, 111, 50, 0.22)', function() {
            var c = new Color('rgba(222, 111, 50, 0.22)');
            assertColor(c, 222, 111, 50, 0.22);
            assert.equal(c.isTransparent(), false);
        });

        it('rgba( 222, 111 , 50, 0.123 )', function() {
            var c = new Color('rgba(222 , 111 , 50, 0.123)');
            assertColor(c, 222, 111, 50, 0.123);
            assert.equal(c.isTransparent(), false);
        });
    });

    describe('hex', function() {
        it('#7FFFD4', function() {
            var c = new Color('#7FFFD4');
            assertColor(c, 127, 255, 212, null);
            assert.equal(c.isTransparent(), false);
        });

        it('#f0ffff', function() {
            var c = new Color('#f0ffff');
            assertColor(c, 240, 255, 255, null);
            assert.equal(c.isTransparent(), false);
        });

        it('#fff', function() {
            var c = new Color('#fff');
            assertColor(c, 255, 255, 255, null);
            assert.equal(c.isTransparent(), false);
        });
    });

    describe('from array', function() {
        it('[1,2,3]', function() {
            var c = new Color([1, 2, 3]);
            assertColor(c, 1, 2, 3, null);
            assert.equal(c.isTransparent(), false);
        });

        it('[5,6,7,1]', function() {
            var c = new Color([5, 6, 7, 1]);
            assertColor(c, 5, 6, 7, 1);
            assert.equal(c.isTransparent(), false);
        });

        it('[5,6,7,0]', function() {
            var c = new Color([5, 6, 7, 0]);
            assertColor(c, 5, 6, 7, 0);
            assert.equal(c.isTransparent(), true);
        });
    });

    describe('transparency', function() {
        it('transparent', function() {
            var c = new Color('transparent');
            assertColor(c, 0, 0, 0, 0);
            assert.equal(c.isTransparent(), true);
        });

        it('rgba(255,255,255,0)', function() {
            var c = new Color('rgba(255,255,255,0)');
            assertColor(c, 255, 255, 255, 0);
            assert.equal(c.isTransparent(), true);
        });
    });
});

function assertColor(c, r, g, b, a) {
    assert.equal(c.r, r);
    assert.equal(c.g, g);
    assert.equal(c.b, b);
    assert.equal(c.a, a);
}