wecui
Version:
一款基于Vue2.x版本的移动端web组件
341 lines (265 loc) • 10.5 kB
JavaScript
var assert = require('assert');
var color = require('..');
function convert (string, expected) {
string = 'color(' + string + ')';
assert.equal(color.convert(string), expected);
}
describe('#convert', function () {
describe('red', function () {
it('should set red', function () {
convert('red red(25)', 'rgb(25, 0, 0)');
});
it('should set red by percentage', function () {
convert('black red(10%)', 'rgb(26, 0, 0)');
});
it('should add red', function () {
convert('rgb(100, 0, 0) red(+ 25)', 'rgb(125, 0, 0)');
});
it('should add red by percentage', function () {
convert('rgb(50, 0, 0) red(+ 10%)', 'rgb(55, 0, 0)');
});
it('should subtract red', function () {
convert('rgb(50, 0, 0) red(- 25)', 'rgb(25, 0, 0)');
});
it('should subtract red by percentage', function () {
convert('rgb(50, 0, 0) red(- 10%)', 'rgb(45, 0, 0)');
});
it('should multiply red', function () {
convert('rgb(250, 0, 0) red(* .1)', 'rgb(25, 0, 0)');
});
it('should multiply red by percentage', function () {
convert('rgb(250, 0, 0) red(* 10%)', 'rgb(25, 0, 0)');
});
});
describe('green', function () {
it('should set green', function () {
convert('green green(25)', 'rgb(0, 25, 0)');
});
it('should set green by percentage', function () {
convert('black green(10%)', 'rgb(0, 26, 0)');
});
it('should add green', function () {
convert('rgb(0, 100, 0) green(+ 25)', 'rgb(0, 125, 0)');
});
it('should add green by percentage', function () {
convert('rgb(0, 50, 0) green(+ 10%)', 'rgb(0, 55, 0)');
});
it('should subtract green', function () {
convert('rgb(0, 50, 0) green(- 25)', 'rgb(0, 25, 0)');
});
it('should subtract green by percentage', function () {
convert('rgb(0, 50, 0) green(- 10%)', 'rgb(0, 45, 0)');
});
it('should multiply green', function () {
convert('rgb(0, 250, 0) green(* .1)', 'rgb(0, 25, 0)');
});
it('should multiply green by percentage', function () {
convert('rgb(0, 250, 0) green(* 10%)', 'rgb(0, 25, 0)');
});
});
describe('blue', function () {
it('should set blue', function () {
convert('blue blue(25)', 'rgb(0, 0, 25)');
});
it('should set blue by percentage', function () {
convert('blue blue(10%)', 'rgb(0, 0, 26)');
});
it('should add blue', function () {
convert('rgb(0, 0, 100) blue(+ 25)', 'rgb(0, 0, 125)');
});
it('should add blue by percentage', function () {
convert('rgb(0, 0, 50) blue(+ 10%)', 'rgb(0, 0, 55)');
});
it('should subtract blue', function () {
convert('rgb(0, 0, 50) blue(- 25)', 'rgb(0, 0, 25)');
});
it('should subtract blue by percentage', function () {
convert('rgb(0, 0, 50) blue(- 10%)', 'rgb(0, 0, 45)');
});
it('should multiply blue', function () {
convert('rgb(0, 0, 250) blue(* .1)', 'rgb(0, 0, 25)');
});
it('should multiply blue by percentage', function () {
convert('rgb(0, 0, 250) blue(* 10%)', 'rgb(0, 0, 25)');
});
});
describe('alpha', function () {
it('should set alpha', function () {
convert('black alpha(.5)', 'rgba(0, 0, 0, 0.5)');
});
it('should set alpha by percentage', function () {
convert('black alpha(42%)', 'rgba(0, 0, 0, 0.42)');
});
it('should add alpha', function () {
convert('rgba(0,0,0,0) alpha(+ .1)', 'rgba(0, 0, 0, 0.1)');
});
it('should add alpha by percentage', function () {
convert('rgba(0,0,0,.5) alpha(+ 10%)', 'rgba(0, 0, 0, 0.55)');
});
it('should subtract alpha', function () {
convert('black alpha(- .1)', 'rgba(0, 0, 0, 0.9)');
});
it('should subtract alpha by percentage', function () {
convert('black alpha(- 10%)', 'rgba(0, 0, 0, 0.9)');
});
it('should multiply alpha', function () {
convert('rgba(0,0,0,.2) alpha(* .5)', 'rgba(0, 0, 0, 0.1)');
});
it('should multiply alpha by percentage', function () {
convert('rgba(0,0,0,.2) alpha(* 50%)', 'rgba(0, 0, 0, 0.1)');
});
});
describe('hue', function () {
it('should set hue', function () {
convert('hsl(34, 50%, 50%) hue(25)', 'rgb(191, 117, 64)');
});
it('should set hue greater than 360', function () {
convert('hsl(34, 50%, 50%) hue(385)', 'rgb(191, 117, 64)');
});
it('should set hue less than 360', function () {
convert('hsl(34, 50%, 50%) hue(-369)', 'rgb(191, 117, 64)');
});
it('should add hue', function () {
convert('hsl(10, 50%, 50%) hue(+ 15)', 'rgb(191, 117, 64)');
});
it('should subtract hue', function () {
convert('hsl(40, 50%, 50%) hue(- 15)', 'rgb(191, 117, 64)');
});
it('should multiply hue', function () {
convert('hsl(10, 50%, 50%) hue(* 2.5)', 'rgb(191, 117, 64)');
});
it('should adjust hue greater than 360', function () {
convert('hsl(240, 50%, 50%) hue(+ 240)', 'rgb(64, 191, 64)');
});
it('should adjust negative hue', function () {
convert('hsl(120, 50%, 50%) hue(- 240)', 'rgb(64, 64, 191)');
});
});
describe('saturation', function () {
it('should set saturation', function () {
convert('hsl(25, 0%, 50%) saturation(50%)', 'rgb(191, 117, 64)');
});
it('should add saturation', function () {
convert('hsl(25, 25%, 50%) saturation(+ 25%)', 'rgb(191, 117, 64)');
});
it('should substract saturation', function () {
convert('hsl(25, 60%, 50%) saturation(- 10%)', 'rgb(191, 117, 64)');
});
it('should multiply saturation', function () {
convert('hsl(25, 25%, 50%) saturation(* 2)', 'rgb(191, 117, 64)');
});
});
describe('lightness', function () {
it('should set lightness', function () {
convert('hsl(25, 50%, 0%) lightness(50%)', 'rgb(191, 117, 64)');
});
it('should add lightness', function () {
convert('hsl(25, 50%, 25%) lightness(+ 25%)', 'rgb(191, 117, 64)');
});
it('should substract lightness', function () {
convert('hsl(25, 50%, 60%) lightness(- 10%)', 'rgb(191, 117, 64)');
});
it('should multiply lightness', function () {
convert('hsl(25, 50%, 25%) lightness(* 2)', 'rgb(191, 117, 64)');
});
});
describe('whiteness', function () {
it('should set whiteness', function () {
convert('hwb(0, 0%, 0%) whiteness(20%)', 'rgb(255, 51, 51)'); // hwb(0, 20%, 0%)
});
it('should add whiteness', function () {
convert('hwb(0, 75%, 0%) whiteness(+25%)', 'rgb(255, 255, 255)'); // hwb(0, 100%, 0%)
});
it('should substract whiteness', function () {
convert('hwb(0, 30%, 0%) whiteness(-10%)', 'rgb(255, 51, 51)'); // hwb(0, 20%, 0%)
});
it('should multiply whiteness', function () {
convert('hwb(0, 50%, 0%) whiteness(*2)', 'rgb(255, 255, 255)'); // hwb(0, 100%, 0%)
});
});
describe('blackness', function () {
it('should set blackness', function () {
convert('hwb(0, 0%, 0%) blackness(20%)', 'rgb(204, 0, 0)'); // hwb(0, 0%, 20%)
});
it('should add blackness', function () {
convert('hwb(0, 0%, 75%) blackness(+25%)', 'rgb(0, 0, 0)'); // hwb(0, 0%, 100%)
});
it('should substract blackness', function () {
convert('hwb(0, 0%, 30%) blackness(-10%)', 'rgb(204, 0, 0)'); // hwb(0, 0%, 20%)
});
it('should multiply blackness', function () {
convert('hwb(0, 0%, 50%) blackness(*2)', 'rgb(0, 0, 0)'); // hwb(0, 0%, 100%)
});
});
describe('blend', function () {
it('should blend two colors', function () {
convert('red blend(black 50%)', 'rgb(128, 0, 0)');
});
});
describe('tint', function () {
it('should blend a color with white', function () {
convert('red tint(50%)', 'rgb(255, 128, 128)');
});
});
describe('tint with alpha', function () {
it('should blend a color with white and adjust the alpha', function () {
convert('red a(40%) tint(50%)', 'rgba(255, 128, 128, 0.4)');
});
it('should blend a color with white and adjust the alpha', function () {
convert('red tint(50%) a(20%)', 'rgba(255, 128, 128, 0.2)');
});
});
describe('shade', function () {
it('should blend a color with black', function () {
convert('red shade(50%)', 'rgb(128, 0, 0)');
});
});
describe('shade with alpha', function () {
it('should blend a color with black and adjust the alpha', function () {
convert('red a(40%) shade(50%)', 'rgba(128, 0, 0, 0.4)');
});
it('should blend a color with black and adjust the alpha', function () {
convert('red shade(50%) a(25%)', 'rgba(128, 0, 0, 0.25)');
});
});
describe('contrast', function () {
it('should darken the same hue with a light color', function () {
convert('hwb(180, 10%, 0%) contrast(0%)', 'rgb(13, 115, 115)'); // hwb(180, 5%, 55%)
});
it('should lighten the same hue with a dark color', function () {
convert('hwb(0, 0%, 10%) contrast(0%)', 'rgb(252, 245, 245)'); // hwb(0, 96%, 1%)
});
it('should go to black with a light color', function () {
convert('hwb(180, 10%, 0%) contrast(100%)', 'rgb(0, 0, 0)'); // hwb(180, 0%, 100%)
});
it('should go to white with a dark color', function () {
convert('hwb(0, 0%, 10%) contrast(100%)', 'rgb(255, 255, 255)'); // hwb(0, 100%, 0%)
});
});
describe('contrast with alpha', function () {
it('should go to white with a dark color and the given alpha', function() {
convert('black a(40%) contrast(99%)', 'rgba(255, 255, 255, 0.4)');
});
it('should go to black with a light color and the given alpha', function() {
convert('white a(50%) contrast(99%)', 'rgba(0, 0, 0, 0.5)');
});
});
describe('nested color functions', function () {
it('should convert nested color functions', function () {
convert('color(rebeccapurple a(-10%)) a(-10%)', 'rgba(102, 51, 153, 0.81)');
convert('color(#4C5859 shade(25%)) blend(color(#4C5859 shade(40%)) 20%)', 'rgb(55, 63, 64)');
});
});
describe('errors', function () {
it('should throw an error is color is unknown', function () {
assert.throws(function () {
convert('wtf');
}, /Unable to parse color from string/);
});
it('should throw an error is modifier is unknown', function () {
assert.throws(function () {
convert('red WTF(+10%)');
}, /Unknown <color-adjuster>/);
});
});
});