html2canvas/tests/qunit/unit/css.js

267 lines
8.6 KiB
JavaScript
Raw Normal View History

2012-03-04 19:02:03 +04:00
// declare vars (preventing JSHint messages)
2012-03-04 23:16:18 +04:00
/* this breaks the testing for IE<9, haven't really looked into why
2012-03-04 19:02:03 +04:00
var test = test || function(){},
QUnit = QUnit || {},
_html2canvas = _html2canvas || {};
2012-03-04 23:16:18 +04:00
*/
2012-03-04 19:02:03 +04:00
2012-03-03 18:38:05 +04:00
module("CSS");
2012-03-04 20:59:00 +04:00
$(function() {
var propsToTest = {},
numDivs = {};
2012-03-03 18:38:05 +04:00
2012-03-04 20:59:00 +04:00
propsToTest['border-width'] = ["borderTopWidth", "borderRightWidth", "borderBottomWidth", "borderLeftWidth"],
numDivs['border-width'] = $('#borders div').length;
2012-03-03 18:38:05 +04:00
/*
expecting = [
// #1
"1px",
"0px",
"1px",
"0px",
// #2
"16px",
"0px",
"16px",
"0px",
// #3
"1px",
"3px",
"5px",
"3px",
// #4
"3px",
"3px",
"3px",
"3px",
// #5
"80px",
"35px",
"480px",
"188px",
// #6
"3904px",
"3500px",
"2944px",
"2513px",
// #7
"18px",
"6px",
"80px",
"5px",
// #8
"1889px",
"666px",
"3904px",
"500px"
];
*/
2012-03-04 20:59:00 +04:00
test('border-width', propsToTest['border-width'].length * numDivs['border-width'], function() {
2012-03-03 18:38:05 +04:00
$('#borders div').each(function(i, el) {
2012-03-04 20:59:00 +04:00
$.each(propsToTest['border-width'], function(s, prop) {
2012-03-03 18:38:05 +04:00
var expect = $(el).css(prop);
// older IE's don't necessarily return px even with jQuery
if (expect === "thin") {
expect = "1px";
} else if (expect === "medium") {
expect = "3px";
} else if (expect === "thick") {
expect = "5px";
}
QUnit.equal( _html2canvas.Util.getCSS(el, prop), expect, "div #" + (i + 1) + " property " + prop + " equals " + expect );
2012-03-03 18:38:05 +04:00
});
});
});
2012-03-04 20:59:00 +04:00
propsToTest['padding width'] = ["paddingTop", "paddingRight", "paddingBottom", "paddingLeft"];
numDivs['padding width'] = $('#padding div').length;
2012-03-03 18:38:05 +04:00
2012-03-04 20:59:00 +04:00
test('padding width', propsToTest['padding width'].length * numDivs['padding width'] * 2, function() {
2012-03-03 18:38:05 +04:00
$('#padding div').each(function(i, el) {
2012-03-04 20:59:00 +04:00
$.each(propsToTest['padding width'], function(s, prop) {
2012-03-03 18:56:31 +04:00
var isPx = _html2canvas.Util.getCSS(el, prop).indexOf("px");
QUnit.notEqual( isPx, -1, "div #" + (i + 1) + " property " + prop + " is in pixels" );
2012-03-03 18:38:05 +04:00
QUnit.equal( _html2canvas.Util.getCSS(el, prop), $(el).css(prop), "div #" + (i + 1) + " property " + prop + " equals " + $(el).css(prop) );
});
});
2012-03-04 20:59:00 +04:00
});
2012-03-03 18:38:05 +04:00
2012-03-04 20:59:00 +04:00
propsToTest['background-position'] = ["backgroundPosition"];
numDivs['background-position'] = $('#backgroundPosition div').length;
2012-03-03 18:38:05 +04:00
2012-03-04 20:59:00 +04:00
test('background-position', propsToTest['background-position'].length * numDivs['background-position'] * 2, function() {
2012-03-03 18:38:05 +04:00
$('#backgroundPosition div').each(function(i, el) {
2012-03-04 20:59:00 +04:00
$.each(propsToTest['background-position'], function(s, prop) {
2012-03-03 18:38:05 +04:00
var img = new Image();
img.width = 50;
img.height = 50;
2012-03-03 18:38:05 +04:00
var item = _html2canvas.Util.getCSS(el, prop),
pos = _html2canvas.Util.BackgroundPosition(el, _html2canvas.Util.Bounds(el), img),
split;
if ( window.getComputedStyle ) {
split = $(el).css(prop).split(" ");
} else {
2012-03-04 19:02:03 +04:00
split = [$(el).css(prop+"X"),$(el).css(prop+"Y")];
}
2012-03-03 18:38:05 +04:00
var testEl = $('<div />').css({
'position': 'absolute',
'left': split[0],
'top': split[1]
});
testEl.appendTo(el);
QUnit.equal( pos.left, Math.round(parseFloat(testEl.css('left'), 10)), "div #" + (i + 1) + " background-position-x equals " + pos.left + " from " + item );
QUnit.equal( pos.top, Math.round(parseFloat(testEl.css('top'), 10)), "div #" + (i + 1) + " background-position-y equals " + pos.top );
2012-03-03 18:38:05 +04:00
testEl.remove();
});
});
2013-06-19 10:47:08 +04:00
});
test('text-shadow', function() {
$('#textShadows div').each(function(i, el) {
var index = i+1;
var value = _html2canvas.Util.getCSS(el, 'textShadow'),
shadows = _html2canvas.Util.parseTextShadows(value);
if (i == 0) {
QUnit.equal(shadows.length, 0, 'div #' + index);
} else {
QUnit.equal(shadows.length, (i >= 6 ? 2 : 1), 'div #' + index);
QUnit.equal(shadows[0].offsetX, i, 'div #' + index + ' offsetX');
QUnit.equal(shadows[0].offsetY, i, 'div #' + index + ' offsetY');
if (i < 2) {
QUnit.equal(shadows[0].color, 'rgba(0, 0, 0, 0)', 'div #' + index + ' color');
} else if (i % 2 == 0) {
QUnit.equal(shadows[0].color, 'rgb(2, 2, 2)', 'div #' + index + ' color');
} else {
var opacity = '0.199219';
QUnit.equal(shadows[0].color, 'rgba(2, 2, 2, '+opacity+')', 'div #' + index + ' color');
}
// only testing blur once
if (i == 1) {
QUnit.equal(shadows[0].blur, '1', 'div #' + index + ' blur');
}
}
});
});
2012-03-03 18:38:05 +04:00
test('background-image', function () {
test_parse_background_image(
'url("te)st")',
{ prefix: '', method: 'url', value: 'url("te)st")', args: ['te)st'] },
'test quoted'
);
test_parse_background_image(
'url("te,st")',
{ prefix: '', method: 'url', value: 'url("te,st")', args: ['te,st'] },
'test quoted'
);
test_parse_background_image(
'url(te,st)',
{ prefix: '', method: 'url', value: 'url(te,st)', args: ['te,st'] },
'test quoted'
);
test_parse_background_image(
'url(test)',
{ prefix: '', method: 'url', value: 'url(test)', args: ['test'] },
'basic url'
);
test_parse_background_image(
'url("test")',
{ prefix: '', method: 'url', value: 'url("test")', args: ['test'] },
'quoted url'
);
test_parse_background_image(
'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)',
{
2012-12-28 22:54:58 +04:00
prefix: '', method: 'url',
value: 'url(data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7)',
args: ['data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7']
},
'data url'
);
test_parse_background_image(
'linear-gradient(red,black)',
{ prefix: '', method: 'linear-gradient', value: 'linear-gradient(red,black)', args: ['red','black'] },
2012-12-28 22:54:58 +04:00
'linear-gradient'
);
test_parse_background_image(
'linear-gradient(top,rgb(255,0,0),rgb(0,0,0))',
{
prefix: '', method: 'linear-gradient',
value: 'linear-gradient(top,rgb(255,0,0),rgb(0,0,0))',
args: ['top', 'rgb(255,0,0)', 'rgb(0,0,0)']
},
2012-12-30 21:22:47 +04:00
'linear-gradient w/ rgb()'
);
2012-12-28 22:54:58 +04:00
test_parse_background_image(
'-webkit-linear-gradient(red,black)',
{
prefix: '-webkit-', method: 'linear-gradient',
value: '-webkit-linear-gradient(red,black)',
args: ['red','black']
},
2012-12-30 21:22:47 +04:00
'prefixed linear-gradient'
);
test_parse_background_image(
'linear-gradient(red,black), url(test), url("test"),\n none, ', [
{ prefix: '', method: 'linear-gradient', value: 'linear-gradient(red,black)', args: ['red','black'] },
{ prefix: '', method: 'url', value: 'url(test)', args: ['test'] },
{ prefix: '', method: 'url', value: 'url("test")', args: ['test'] },
{ prefix: '', method: 'none', value: 'none', args: [] }
],
'multiple backgrounds'
);
});
function test_parse_background_image(value, expected, name) {
deepEqual(
_html2canvas.Util.parseBackgroundImage(value),
Array.isArray(expected) ? expected : [expected],
name
);
}
// TODO add backgroundPosition % tests
2012-03-04 20:59:00 +04:00
2012-03-03 18:38:05 +04:00
});