10 changed files with 194 additions and 51 deletions
@ -1,3 +1,9 @@ |
|||||
[submodule "support/expresso"] |
[submodule "support/expresso"] |
||||
path = support/expresso |
path = support/expresso |
||||
url = git://github.com/visionmedia/expresso.git |
url = git://github.com/visionmedia/expresso.git |
||||
|
[submodule "support/express"] |
||||
|
path = support/express |
||||
|
url = git://github.com/visionmedia/express.git |
||||
|
[submodule "support/jade"] |
||||
|
path = support/jade |
||||
|
url = git://github.com/visionmedia/jade.git |
||||
|
@ -0,0 +1,64 @@ |
|||||
|
|
||||
|
window.onload = runTests; |
||||
|
|
||||
|
function get(id) { |
||||
|
return document.getElementById(id); |
||||
|
} |
||||
|
|
||||
|
function create(type) { |
||||
|
return document.createElement(type); |
||||
|
} |
||||
|
|
||||
|
function runTests() { |
||||
|
var table = get('tests'); |
||||
|
for (var name in tests) { |
||||
|
var canvas = create('canvas') |
||||
|
, tr = create('tr') |
||||
|
, tds = [create('td'), create('td')]; |
||||
|
canvas.width = 200; |
||||
|
canvas.height = 200; |
||||
|
tds[1].appendChild(canvas); |
||||
|
tr.appendChild(tds[0]); |
||||
|
tr.appendChild(tds[1]); |
||||
|
table.appendChild(tr); |
||||
|
runTest(name, canvas, tds[0]); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
function runTest(name, canvas, dest) { |
||||
|
var fn = tests[name]; |
||||
|
fn(canvas.getContext('2d')); |
||||
|
renderOnServer(name, canvas, function(res){ |
||||
|
if (res.error) { |
||||
|
var p = create('p'); |
||||
|
p.innerText = res.error; |
||||
|
dest.appendChild(p); |
||||
|
} else if (res.data) { |
||||
|
var img = create('image'); |
||||
|
img.src = res.data; |
||||
|
img.alt = name; |
||||
|
dest.appendChild(img); |
||||
|
} |
||||
|
}); |
||||
|
} |
||||
|
|
||||
|
function renderOnServer(name, canvas, fn) { |
||||
|
var req = new XMLHttpRequest |
||||
|
, json = JSON.stringify({ |
||||
|
fn: tests[name].toString() |
||||
|
, width: canvas.width |
||||
|
, height: canvas.height |
||||
|
}); |
||||
|
req.open('POST', '/render'); |
||||
|
req.setRequestHeader('Content-Type', 'application/json'); |
||||
|
req.onreadystatechange = function(){ |
||||
|
if (4 == req.readyState) { |
||||
|
try { |
||||
|
fn(JSON.parse(req.responseText)); |
||||
|
} catch (err) { |
||||
|
fn({ error: err }); |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
req.send(json); |
||||
|
} |
@ -0,0 +1,23 @@ |
|||||
|
body { |
||||
|
padding: 40px 50px; |
||||
|
font: 13px/1.4 "Helvetica Neue", Helvetica, Arial, sans-serif; |
||||
|
} |
||||
|
p { |
||||
|
margin: 5px; |
||||
|
} |
||||
|
em { |
||||
|
color: #00C5F7; |
||||
|
} |
||||
|
a { |
||||
|
color: #00C5F7; |
||||
|
} |
||||
|
canvas, img { |
||||
|
padding: 5px; |
||||
|
border: 1px solid #eee; |
||||
|
} |
||||
|
#primary { |
||||
|
width: 600px; |
||||
|
} |
||||
|
#tests { |
||||
|
margin-top: 35px; |
||||
|
} |
@ -0,0 +1,33 @@ |
|||||
|
|
||||
|
var tests = {}; |
||||
|
|
||||
|
tests['linear gradients'] = function(ctx){ |
||||
|
var lingrad = ctx.createLinearGradient(0,0,0,150); |
||||
|
lingrad.addColorStop(0, '#00ABEB'); |
||||
|
lingrad.addColorStop(0.5, '#fff'); |
||||
|
lingrad.addColorStop(0.5, '#26C000'); |
||||
|
lingrad.addColorStop(1, '#fff'); |
||||
|
|
||||
|
var lingrad2 = ctx.createLinearGradient(0,50,0,95); |
||||
|
lingrad2.addColorStop(0.5, '#000'); |
||||
|
lingrad2.addColorStop(1, 'rgba(0,0,0,0)'); |
||||
|
|
||||
|
ctx.fillStyle = lingrad; |
||||
|
ctx.strokeStyle = lingrad2; |
||||
|
|
||||
|
ctx.fillRect(10,10,130,130); |
||||
|
ctx.strokeRect(50,50,50,50); |
||||
|
}; |
||||
|
|
||||
|
tests['global alpha'] = function(ctx){ |
||||
|
ctx.globalAlpha = 0.5; |
||||
|
ctx.fillStyle = 'rgba(0,0,0,0.5)'; |
||||
|
ctx.strokeRect(0,0,50,50); |
||||
|
|
||||
|
ctx.globalAlpha = 0.8; |
||||
|
ctx.fillRect(20,20,20,20); |
||||
|
|
||||
|
ctx.fillStyle = 'black'; |
||||
|
ctx.globalAlpha = 1; |
||||
|
ctx.fillRect(25,25,10,10); |
||||
|
}; |
@ -0,0 +1,9 @@ |
|||||
|
!!! |
||||
|
html |
||||
|
head |
||||
|
title node-canvas |
||||
|
link(href='/style.css', rel='stylesheet') |
||||
|
script(src='/tests.js') |
||||
|
script(src='/app.js') |
||||
|
body |
||||
|
#primary!= body |
@ -0,0 +1,12 @@ |
|||||
|
h1 node-canvas |
||||
|
|
||||
|
p.msg |
||||
|
| The tests below assert visual and api integrity by running the |
||||
|
em exact |
||||
|
| same code utilizing the client canvas api, as well as node-canvas. |
||||
|
|
||||
|
table#tests |
||||
|
thead |
||||
|
th node-canvas |
||||
|
th target |
||||
|
tbody |
Loading…
Reference in new issue