diff --git a/test/unit/gradient.js b/test/unit/gradient.js index 0cb2da7b..32107702 100644 --- a/test/unit/gradient.js +++ b/test/unit/gradient.js @@ -2,8 +2,9 @@ QUnit.module('fabric.Gradient'); - function createGradient() { + function createLinearGradient() { return new fabric.Gradient({ + type: 'linear', coords: { x1: 0, y1: 10, @@ -11,36 +12,86 @@ y2: 200, }, colorStops: [ - { offset: 0, color: 'red' }, + { offset: 0, color: 'red', opacity: 0 }, { offset: 1, color: 'green' } ] }); } - test('constructor', function() { + function createRadialGradient() { + return new fabric.Gradient({ + type: 'radial', + coords: { + x1: 0, + y1: 10, + x2: 100, + y2: 200, + r1: 0, + r2: 50 + }, + colorStops: [ + { offset: 0, color: 'red' }, + { offset: 1, color: 'green', opacity: 0 } + ] + }); + } + + test('constructor linearGradient', function() { ok(fabric.Gradient); - var gradient = createGradient(); + var gradient = createLinearGradient(); ok(gradient instanceof fabric.Gradient, 'should inherit from fabric.Gradient'); }); - test('properties', function() { - var gradient = createGradient(); + test('constructor radialGradient', function() { + ok(fabric.Gradient); + + var gradient = createRadialGradient(); + ok(gradient instanceof fabric.Gradient, 'should inherit from fabric.Gradient'); + }); + + test('properties linearGradient', function() { + var gradient = createLinearGradient(); equal(gradient.coords.x1, 0); equal(gradient.coords.y1, 10); equal(gradient.coords.x2, 100); equal(gradient.coords.y2, 200); + equal(gradient.type, 'linear'); + equal(gradient.colorStops[0].offset, 0); equal(gradient.colorStops[0].color, 'red'); + equal(gradient.colorStops[0].opacity, 0); equal(gradient.colorStops[1].offset, 1); equal(gradient.colorStops[1].color, 'green'); + ok(!('opacity' in gradient.colorStops[1])); }); - test('toObject', function() { - var gradient = createGradient(); + test('properties radialGradient', function() { + var gradient = createRadialGradient(); + + equal(gradient.coords.x1, 0); + equal(gradient.coords.y1, 10); + equal(gradient.coords.x2, 100); + equal(gradient.coords.y2, 200); + equal(gradient.coords.r1, 0); + equal(gradient.coords.r2, 50); + + equal(gradient.type, 'radial'); + + equal(gradient.colorStops[0].offset, 0); + equal(gradient.colorStops[0].color, 'red'); + ok(!('opacity' in gradient.colorStops[0])); + + equal(gradient.colorStops[1].offset, 1); + equal(gradient.colorStops[1].color, 'green'); + equal(gradient.colorStops[1].opacity, 0); + }); + + test('toObject linearGradient', function() { + var gradient = createLinearGradient(); ok(typeof gradient.toObject == 'function'); @@ -51,16 +102,43 @@ equal(object.coords.y1, gradient.coords.y1); equal(object.coords.y2, gradient.coords.y2); + equal(object.type, gradient.type); + equal(object.colorStops, gradient.colorStops); }); - test('toLive', function() { - var gradient = createGradient(); + test('toObject radialGradient', function() { + var gradient = createRadialGradient(); + + ok(typeof gradient.toObject == 'function'); + + var object = gradient.toObject(); + + equal(object.coords.x1, gradient.coords.x1); + equal(object.coords.x2, gradient.coords.x2); + equal(object.coords.y1, gradient.coords.y1); + equal(object.coords.y2, gradient.coords.y2); + equal(object.coords.r1, gradient.coords.r1); + equal(object.coords.r2, gradient.coords.r2); + + equal(object.type, gradient.type); + + equal(object.colorStops, gradient.colorStops); + }); + + test('toLive linearGradient', function() { + var gradient = createLinearGradient(); ok(typeof gradient.toLive == 'function'); }); - test('fromElement', function() { + test('toLive radialGradient', function() { + var gradient = createRadialGradient(); + + ok(typeof gradient.toLive == 'function'); + }); + + test('fromElement linearGradient', function() { ok(typeof fabric.Gradient.fromElement == 'function'); var element = fabric.document.createElement('linearGradient'); @@ -70,6 +148,45 @@ stop1.setAttribute('offset', '0%'); stop1.setAttribute('stop-color', 'white'); + stop2.setAttribute('offset', '100%'); + stop2.setAttribute('stop-color', 'black'); + stop2.setAttribute('stop-opacity', '0'); + + element.appendChild(stop1); + element.appendChild(stop2); + + var object = new fabric.Object({ width: 100, height: 100 }); + var gradient = fabric.Gradient.fromElement(element, object); + + ok(gradient instanceof fabric.Gradient); + + // TODO: need to double check these values + + equal(gradient.coords.x1, 0); + equal(gradient.coords.y1, 0); + + //equal(gradient.coords.x2, 100); + //equal(gradient.coords.y2, 100); + + equal(gradient.colorStops[0].offset, 1); + equal(gradient.colorStops[1].offset, 0); + + equal(gradient.colorStops[0].color, 'rgb(0,0,0)'); + equal(gradient.colorStops[1].color, 'rgb(255,255,255)'); + + equal(gradient.colorStops[0].opacity, 0); + }); + + test('fromElement radialGradient', function() { + ok(typeof fabric.Gradient.fromElement == 'function'); + + var element = fabric.document.createElement('radialGradient'); + var stop1 = fabric.document.createElement('stop'); + var stop2 = fabric.document.createElement('stop'); + + stop1.setAttribute('offset', '0%'); + stop1.setAttribute('stop-color', 'white'); + stop2.setAttribute('offset', '100%'); stop2.setAttribute('stop-color', 'black'); @@ -96,7 +213,7 @@ equal(gradient.colorStops[1].color, 'rgb(255,255,255)'); }); - test('forObject', function() { + test('forObject linearCradient', function() { ok(typeof fabric.Gradient.forObject == 'function'); var object = new fabric.Object({ width: 50, height: 50 }); @@ -109,14 +226,16 @@ y2: 20, }, colorStops: [ - { offset: 0, color: 'red' }, - { offset: 0.5, color: 'green' }, - { offset: 1, color: 'blue' } + { offset: 0, color: 'red', opacity: 1 }, + { offset: 0.5, color: 'green', opacity: 0}, + { offset: 1, color: 'blue', opacity: 0.5 } ] }); ok(gradient instanceof fabric.Gradient); + equal(gradient.type, 'linear'); + // TODO: need to double check these values equal(gradient.coords.x1, 10); @@ -124,6 +243,68 @@ equal(gradient.coords.x2, 20); equal(gradient.coords.y2, 20); + + equal(gradient.colorStops[0].offset, 0); + equal(gradient.colorStops[1].offset, 0.5); + equal(gradient.colorStops[2].offset, 1); + + equal(gradient.colorStops[0].color, 'red'); + equal(gradient.colorStops[1].color, 'green'); + equal(gradient.colorStops[2].color, 'blue'); + + equal(gradient.colorStops[0].opacity, 1); + equal(gradient.colorStops[1].opacity, 0); + equal(gradient.colorStops[2].opacity, 0.5); + }); + + test('forObject radialGradient', function() { + ok(typeof fabric.Gradient.forObject == 'function'); + + var object = new fabric.Object({ width: 50, height: 50 }); + + var gradient = fabric.Gradient.forObject(object, { + type: 'radial', + coords: { + x1: 10, + y1: 10, + x2: 20, + y2: 20, + r1: 0, + r2: 10 + }, + colorStops: [ + { offset: 0, color: 'red', opacity: 1 }, + { offset: 0.5, color: 'green', opacity: 0}, + { offset: 1, color: 'blue', opacity: 0.5 } + ] + }); + + ok(gradient instanceof fabric.Gradient); + + equal(gradient.type, 'radial'); + + // TODO: need to double check these values + + equal(gradient.coords.x1, 10); + equal(gradient.coords.y1, 10); + + equal(gradient.coords.x2, 20); + equal(gradient.coords.y2, 20); + + equal(gradient.coords.r1, 0); + equal(gradient.coords.r2, 10); + + equal(gradient.colorStops[0].offset, 0); + equal(gradient.colorStops[1].offset, 0.5); + equal(gradient.colorStops[2].offset, 1); + + equal(gradient.colorStops[0].color, 'red'); + equal(gradient.colorStops[1].color, 'green'); + equal(gradient.colorStops[2].color, 'blue'); + + equal(gradient.colorStops[0].opacity, 1); + equal(gradient.colorStops[1].opacity, 0); + equal(gradient.colorStops[2].opacity, 0.5); }); })(); \ No newline at end of file