Current state
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
var Rickshaw = require('../rickshaw');
|
||||
|
||||
exports.load = function(test) {
|
||||
|
||||
test.equal(typeof Rickshaw.Class, 'object', 'Rickshaw.Class is a function');
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.instantiation = function(test) {
|
||||
|
||||
Rickshaw.namespace('Rickshaw.Sample.Class');
|
||||
|
||||
Rickshaw.Sample.Class = Rickshaw.Class.create({
|
||||
name: 'sample',
|
||||
concat: function(suffix) {
|
||||
return [this.name, suffix].join(' ');
|
||||
}
|
||||
});
|
||||
|
||||
var sample = new Rickshaw.Sample.Class();
|
||||
test.equal(sample.concat('polka'), 'sample polka');
|
||||
|
||||
Rickshaw.namespace('Rickshaw.Sample.Class.Prefix');
|
||||
|
||||
Rickshaw.Sample.Subclass = Rickshaw.Class.create( Rickshaw.Sample.Class, {
|
||||
name: 'sampler'
|
||||
});
|
||||
|
||||
var sampler = new Rickshaw.Sample.Subclass();
|
||||
test.equal(sampler.concat('polka'), 'sampler polka');
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.array = function(test) {
|
||||
|
||||
Rickshaw.namespace('Rickshaw.Sample.Array');
|
||||
|
||||
Rickshaw.Sample.Array = Rickshaw.Class.create(Array, {
|
||||
second: function() {
|
||||
return this[1];
|
||||
}
|
||||
});
|
||||
|
||||
var array = new Rickshaw.Sample.Array();
|
||||
array.push('red');
|
||||
array.push('blue');
|
||||
|
||||
test.equal(array.second(), 'blue');
|
||||
|
||||
test.done();
|
||||
};
|
||||
@@ -0,0 +1,66 @@
|
||||
process.env.TZ = 'America/New_York';
|
||||
|
||||
var Rickshaw = require('../rickshaw');
|
||||
|
||||
var time = new Rickshaw.Fixtures.Time.Local;
|
||||
|
||||
exports.monthBoundary = function(test) {
|
||||
|
||||
var february = 1359694800;
|
||||
var ceil = time.ceil(february, time.unit('month'));
|
||||
|
||||
test.equal(ceil, february, "february resolves to itself");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.monthMinus = function(test) {
|
||||
|
||||
var february = 1359694800;
|
||||
var ceil = time.ceil(february - 1, time.unit('month'));
|
||||
|
||||
test.equal(ceil, february, "just before february resolves up to february");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.month = function(test) {
|
||||
|
||||
var february = 1359694800;
|
||||
var march = 1362114000;
|
||||
|
||||
var ceil = time.ceil(february + 1, time.unit('month'));
|
||||
|
||||
test.equal(ceil, march, "february plus a bit resolves to march");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.decemberMonthWrap = function(test) {
|
||||
|
||||
var december2013 = 1385874000;
|
||||
var january2014 = 1388552400;
|
||||
|
||||
var ceil = time.ceil(december2013 + 1, time.unit('month'));
|
||||
|
||||
test.equal(ceil, january2014, "december wraps to next year");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.yearBoundary = function(test) {
|
||||
|
||||
var year2013 = 1357016400;
|
||||
var ceil = time.ceil(year2013, time.unit('year'));
|
||||
|
||||
test.equal(ceil, year2013, "midnight new year resolves to itself");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.year = function(test) {
|
||||
|
||||
var year2013 = 1357016400;
|
||||
var year2014 = 1388552400;
|
||||
|
||||
var ceil = time.ceil(year2013 + 1, time.unit('year'));
|
||||
|
||||
test.equal(ceil, year2014, "midnight new year plus a bit resolves to next year");
|
||||
test.done();
|
||||
};
|
||||
|
||||
@@ -0,0 +1,64 @@
|
||||
var Rickshaw = require('../rickshaw');
|
||||
|
||||
var time = new Rickshaw.Fixtures.Time;
|
||||
|
||||
exports.monthBoundary = function(test) {
|
||||
|
||||
var february = 1359676800;
|
||||
var ceil = time.ceil(february, time.unit('month'));
|
||||
|
||||
test.equal(ceil, february, "february resolves to itself");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.monthMinus = function(test) {
|
||||
|
||||
var february = 1359676800;
|
||||
var ceil = time.ceil(february - 1, time.unit('month'));
|
||||
|
||||
test.equal(ceil, february, "just before february resolves up to february");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.month = function(test) {
|
||||
|
||||
var february = 1359676800;
|
||||
var march = 1362096000;
|
||||
|
||||
var ceil = time.ceil(february + 1, time.unit('month'));
|
||||
|
||||
test.equal(ceil, march, "february plus a bit resolves to march");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.decemberMonthWrap = function(test) {
|
||||
|
||||
var december2013 = 1385856000;
|
||||
var january2014 = 1388534400;
|
||||
|
||||
var ceil = time.ceil(december2013 + 1, time.unit('month'));
|
||||
|
||||
test.equal(ceil, january2014, "december wraps to next year");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.yearBoundary = function(test) {
|
||||
|
||||
var year2013 = 1356998400;
|
||||
var ceil = time.ceil(year2013, time.unit('year'));
|
||||
|
||||
test.equal(ceil, year2013, "midnight new year resolves to itself");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.year = function(test) {
|
||||
|
||||
var year2013 = 1356998400;
|
||||
var year2014 = 1388534400;
|
||||
|
||||
var ceil = time.ceil(year2013 + 1, time.unit('year'));
|
||||
|
||||
test.equal(ceil, year2014, "midnight new year plus a bit resolves to next year");
|
||||
test.done();
|
||||
};
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
var Rickshaw;
|
||||
|
||||
exports.setUp = function(callback) {
|
||||
|
||||
Rickshaw = require('../rickshaw');
|
||||
|
||||
global.document = d3.select('html')[0][0].parentNode;
|
||||
global.window = document.defaultView;
|
||||
|
||||
new Rickshaw.Compat.ClassList();
|
||||
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.tearDown = function(callback) {
|
||||
|
||||
delete require.cache.d3;
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.axis = function(test) {
|
||||
|
||||
var element = document.createElement('div');
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
width: 900,
|
||||
element: element,
|
||||
series: [ { data: [ { x: 4, y: 32 }, { x: 16, y: 100 } ] } ]
|
||||
});
|
||||
|
||||
var xAxis = new Rickshaw.Graph.Axis.X({
|
||||
graph: graph
|
||||
});
|
||||
|
||||
xAxis.render();
|
||||
|
||||
var ticks = d3.select(element).selectAll('.x_grid_d3 .tick')
|
||||
|
||||
test.equal(ticks[0].length, 13, "we have some ticks");
|
||||
test.equal(ticks[0][0].getAttribute('data-x-value'), '4');
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
var Rickshaw;
|
||||
|
||||
exports.setUp = function(callback) {
|
||||
|
||||
Rickshaw = require('../rickshaw');
|
||||
|
||||
global.document = d3.select('html')[0][0].parentNode;
|
||||
global.window = document.defaultView;
|
||||
|
||||
new Rickshaw.Compat.ClassList();
|
||||
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.tearDown = function(callback) {
|
||||
|
||||
delete require.cache.d3;
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.axis = function(test) {
|
||||
|
||||
var element = document.createElement('div');
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
width: 900,
|
||||
height: 600,
|
||||
element: element,
|
||||
series: [ { data: [ { x: 4, y: 32 }, { x: 16, y: 100 } ] } ]
|
||||
});
|
||||
|
||||
var yAxis = new Rickshaw.Graph.Axis.Y({
|
||||
graph: graph
|
||||
});
|
||||
|
||||
yAxis.render();
|
||||
|
||||
var ticks = d3.select(element).selectAll('.y_grid .tick')
|
||||
|
||||
test.equal(ticks[0].length, 11, "we have some ticks");
|
||||
test.equal(ticks[0][0].getAttribute('data-y-value'), '0');
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
var Rickshaw;
|
||||
|
||||
exports.setUp = function(callback) {
|
||||
|
||||
Rickshaw = require('../rickshaw');
|
||||
|
||||
global.document = d3.select('html')[0][0].parentNode;
|
||||
global.window = document.defaultView;
|
||||
|
||||
new Rickshaw.Compat.ClassList();
|
||||
|
||||
var el = document.createElement("div");
|
||||
this.graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'stack',
|
||||
series: [
|
||||
{
|
||||
name: 'foo',
|
||||
data: [
|
||||
{ x: 4, y: 32 }
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'bar',
|
||||
data: [
|
||||
{ x: 4, y: 32 }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
this.legendEl = document.createElement("div");
|
||||
|
||||
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.tearDown = function(callback) {
|
||||
|
||||
delete require.cache.d3;
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.rendersLegend = function(test) {
|
||||
var legend = new Rickshaw.Graph.Legend({
|
||||
graph: this.graph,
|
||||
element: this.legendEl
|
||||
});
|
||||
|
||||
var items = this.legendEl.getElementsByTagName('li')
|
||||
test.equal(items.length, 2, "legend count")
|
||||
test.equal(items[1].getElementsByClassName('label')[0].innerHTML, "foo")
|
||||
test.equal(items[0].getElementsByClassName('label')[0].innerHTML, "bar")
|
||||
|
||||
test.done();
|
||||
|
||||
};
|
||||
|
||||
exports.hasDefaultClassName = function(test) {
|
||||
var legend = new Rickshaw.Graph.Legend({
|
||||
graph: this.graph,
|
||||
element: this.legendEl
|
||||
});
|
||||
|
||||
test.equal(this.legendEl.className, "rickshaw_legend")
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.canOverrideClassName = function(test) {
|
||||
var MyLegend = Rickshaw.Class.create( Rickshaw.Graph.Legend, {
|
||||
className: 'fnord'
|
||||
});
|
||||
var legend = new MyLegend({
|
||||
graph: this.graph,
|
||||
element: this.legendEl
|
||||
});
|
||||
|
||||
test.equal(this.legendEl.className, "fnord")
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports['should put series classes on legend elements'] = function(test) {
|
||||
this.graph.series[0].className = 'fnord-series-0';
|
||||
this.graph.series[1].className = 'fnord-series-1';
|
||||
|
||||
var legend = new Rickshaw.Graph.Legend({
|
||||
graph: this.graph,
|
||||
element: this.legendEl
|
||||
});
|
||||
test.equal(d3.select(this.legendEl).selectAll('.line').size(), 2);
|
||||
test.equal(d3.select(this.legendEl).selectAll('.fnord-series-0').size(), 1);
|
||||
test.equal(d3.select(this.legendEl).selectAll('.fnord-series-1').size(), 1);
|
||||
test.done();
|
||||
};
|
||||
@@ -0,0 +1,53 @@
|
||||
exports.setUp = function(callback) {
|
||||
|
||||
Rickshaw = require('../rickshaw');
|
||||
|
||||
global.document = d3.select('html')[0][0].parentNode;
|
||||
global.window = document.defaultView;
|
||||
|
||||
new Rickshaw.Compat.ClassList();
|
||||
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.tearDown = function(callback) {
|
||||
|
||||
delete require.cache.d3;
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.basic = function(test) {
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element : el,
|
||||
width : 960,
|
||||
height : 500,
|
||||
renderer : 'scatterplot',
|
||||
series : [{
|
||||
color : 'steelblue',
|
||||
data : [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 },
|
||||
{ x: 2, y: 38 },
|
||||
{ x: 3, y: 30 },
|
||||
{ x: 4, y: 32 } ]
|
||||
}]
|
||||
} );
|
||||
|
||||
graph.renderer.dotSize = 6;
|
||||
graph.render();
|
||||
|
||||
var previewElement = document.createElement("div");
|
||||
|
||||
var preview = new Rickshaw.Graph.RangeSlider.Preview({
|
||||
element: previewElement,
|
||||
graph: graph
|
||||
});
|
||||
|
||||
test.equal(graph.renderer.name, preview.previews[0].renderer.name);
|
||||
test.done();
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,51 @@
|
||||
var Rickshaw = require("../rickshaw");
|
||||
|
||||
exports['should determine domain from subrenderers'] = function(test) {
|
||||
|
||||
// document comes from jsdom
|
||||
var el = document.createElement("div");
|
||||
|
||||
Rickshaw.namespace('Rickshaw.Graph.Renderer.DomainSubrenderer');
|
||||
Rickshaw.Graph.Renderer.DomainSubrenderer = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
|
||||
name: 'domain',
|
||||
domain: function(data) {
|
||||
return {x: [-10, 20], y: [-15, 30]};
|
||||
}
|
||||
});
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el, width: 960, height: 500,
|
||||
padding: { top: 0, right: 0, bottom: 0, left: 0 },
|
||||
renderer: 'domain',
|
||||
series: [
|
||||
{
|
||||
color: 'steelblue',
|
||||
data: [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
test.deepEqual(graph.renderer.domain(), {x: [-10, 20], y: [-15, 30]});
|
||||
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el, width: 960, height: 500,
|
||||
padding: { top: 0, right: 0, bottom: 0, left: 0 },
|
||||
renderer: 'multi',
|
||||
series: [
|
||||
{
|
||||
renderer: 'domain',
|
||||
data: [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
test.deepEqual(graph.renderer.domain(), {x: [-10, 20], y: [-15, 30]});
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
@@ -0,0 +1,29 @@
|
||||
var Rickshaw = require("../rickshaw");
|
||||
|
||||
exports["should add the series className to all scatterplot points"] = function(test) {
|
||||
var el = document.createElement("div");
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
stroke: true,
|
||||
width: 10,
|
||||
height: 10,
|
||||
renderer: 'scatterplot',
|
||||
series: [
|
||||
{
|
||||
className: 'fnord',
|
||||
data: [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 },
|
||||
{ x: 2, y: 38 },
|
||||
{ x: 3, y: 30 },
|
||||
{ x: 4, y: 32 }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
graph.render()
|
||||
|
||||
var path = graph.vis.selectAll('circle.fnord')
|
||||
test.equals(5, path.size())
|
||||
test.done()
|
||||
}
|
||||
@@ -0,0 +1,153 @@
|
||||
var Rickshaw = require("../rickshaw");
|
||||
|
||||
exports.domain = function(test) {
|
||||
|
||||
// document comes from jsdom
|
||||
var el = document.createElement("div");
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
padding: { top: 0, right: 0, bottom: 0, left: 0 },
|
||||
renderer: 'scatterplot',
|
||||
series: [
|
||||
{
|
||||
color: 'steelblue',
|
||||
data: [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 },
|
||||
{ x: 2, y: 38 },
|
||||
{ x: 3, y: 30 },
|
||||
{ x: 4, y: 32 }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
var domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ 0, 4 ], y: [ 0, 49 ] }, 'domain matches');
|
||||
|
||||
// with padding
|
||||
|
||||
graph.configure({ padding: { top: 0.1, right: 0.1, bottom: 0.1, left: 0.1 }});
|
||||
|
||||
domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ -0.4, 4.44 ], y: [ 0, 49 + 4.9 ] }, 'domain matches with padding');
|
||||
|
||||
// negative y-values minus auto
|
||||
|
||||
graph.series[0].data[2].y = -72;
|
||||
graph.configure({ padding: { top: 0, right: 0, bottom: 0, left: 0 }});
|
||||
|
||||
domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ 0, 4 ], y: [ 0, 49 ] }, 'domain matches with negative numbers and no auto');
|
||||
|
||||
// negative y-values w/ auto
|
||||
|
||||
graph.series[0].data[2].y = -72;
|
||||
graph.configure({ padding: { top: 0, right: 0, bottom: 0, left: 0 }, min: 'auto'});
|
||||
|
||||
domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ 0, 4 ], y: [ -72, 49 ] }, 'domain matches with negative numbers and min auto');
|
||||
|
||||
// different series lengths
|
||||
|
||||
graph.series.push({
|
||||
color: 'lightblue',
|
||||
data: [ { x: 1, y: 20 }, { x: 2, y: 38 }, { x: 3, y: 30 }, { x: 4, y: 32 }, { x: 5, y: 32 } ]
|
||||
});
|
||||
|
||||
graph.stackData();
|
||||
domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ 0, 5 ], y: [ -72, 49 ] }, 'multiple length series extents match');
|
||||
|
||||
// null values and auto
|
||||
|
||||
graph.series.splice(0, graph.series.length);
|
||||
graph.series.push({ data: [ { x: 1, y: 27 }, { x: 2, y: 49 }, { x: 3, y: 14 } ] });
|
||||
graph.series.push({ data: [ { x: 1, y: null }, { x: 2, y: 9 }, { x: 3, y: 3 } ] });
|
||||
|
||||
graph.configure({ min: 'auto' });
|
||||
graph.stackData();
|
||||
|
||||
domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ 1, 3 ], y: [ 3, 49 ] }, "null values don't set min to zero");
|
||||
|
||||
// max of zero
|
||||
|
||||
graph.series.push({ data: [ { x: 1, y: -29 }, { x: 2, y: -9 }, { x: 3, y: -3 } ] });
|
||||
|
||||
graph.configure({ max: 0 });
|
||||
graph.stackData();
|
||||
|
||||
domain = graph.renderer.domain();
|
||||
test.deepEqual(domain, { x: [ 1, 3 ], y: [ -29, 0 ] }, "explicit zero max doesn't fall through");
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
|
||||
exports.respectStrokeFactory = function(test) {
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
Rickshaw.Graph.Renderer.RespectStrokeFactory = Rickshaw.Class.create( Rickshaw.Graph.Renderer, {
|
||||
|
||||
name: 'respectStrokeFactory',
|
||||
|
||||
seriesPathFactory: function() {
|
||||
var graph = this.graph;
|
||||
var factory = d3.svg.line()
|
||||
.x( function(d) { return graph.x(d.x) } )
|
||||
.y( function(d) { return graph.y(d.y + d.y0) } )
|
||||
.interpolate(graph.interpolation).tension(this.tension);
|
||||
factory.defined && factory.defined( function(d) { return d.y !== null } );
|
||||
return factory;
|
||||
},
|
||||
|
||||
seriesStrokeFactory: function() {
|
||||
var graph = this.graph;
|
||||
var factory = d3.svg.line()
|
||||
.x( function(d) { return graph.x(d.x) } )
|
||||
.y( function(d) { return graph.y(d.y + d.y0) } )
|
||||
.interpolate(graph.interpolation).tension(this.tension);
|
||||
factory.defined && factory.defined( function(d) { return d.y !== null } );
|
||||
return factory;
|
||||
}
|
||||
});
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
stroke: true,
|
||||
width: 10,
|
||||
height: 10,
|
||||
renderer: 'respectStrokeFactory',
|
||||
series: [
|
||||
{
|
||||
className: 'fnord',
|
||||
data: [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 },
|
||||
{ x: 2, y: 38 },
|
||||
{ x: 3, y: 30 },
|
||||
{ x: 4, y: 32 }
|
||||
]
|
||||
}
|
||||
]
|
||||
});
|
||||
graph.render();
|
||||
|
||||
var path = graph.vis.select('path.path.fnord');
|
||||
test.equals(path.size(), 1, "we have a fnord path");
|
||||
|
||||
var stroke = graph.vis.select('path.stroke.fnord');
|
||||
test.equals(stroke.size(), 1, "we have a fnord stroke");
|
||||
|
||||
// should also be availeable via series
|
||||
var firstSeries = graph.series[0];
|
||||
test.ok(d3.select(firstSeries.path).classed('path'), "selectable path");
|
||||
test.ok(d3.select(firstSeries.stroke).classed('stroke', "selectable stroke"));
|
||||
|
||||
test.done();
|
||||
};
|
||||
301
public/assets/plugins/charts-rickshaw/tests/Rickshaw.Graph.js
Normal file
301
public/assets/plugins/charts-rickshaw/tests/Rickshaw.Graph.js
Normal file
@@ -0,0 +1,301 @@
|
||||
var fs = require('fs');
|
||||
var Rickshaw;
|
||||
|
||||
exports.setUp = function(callback) {
|
||||
|
||||
Rickshaw = require('../rickshaw');
|
||||
|
||||
global.document = d3.select('html')[0][0].parentNode;
|
||||
global.window = document.defaultView;
|
||||
|
||||
new Rickshaw.Compat.ClassList();
|
||||
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.tearDown = function(callback) {
|
||||
|
||||
delete require.cache.d3;
|
||||
callback();
|
||||
};
|
||||
|
||||
exports.svg = function(test) {
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element : el,
|
||||
width : 960,
|
||||
height : 500,
|
||||
renderer : 'scatterplot',
|
||||
series : [{
|
||||
color : 'steelblue',
|
||||
data : [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 1, y: 49 },
|
||||
{ x: 2, y: 38 },
|
||||
{ x: 3, y: 30 },
|
||||
{ x: 4, y: 32 } ]
|
||||
}]
|
||||
} );
|
||||
|
||||
graph.renderer.dotSize = 6;
|
||||
graph.render();
|
||||
|
||||
var generatedSVG = el.innerHTML;
|
||||
|
||||
var exampleSVGFilename = __dirname + '/data/simple.svg';
|
||||
var exampleSVG = fs.readFileSync(exampleSVGFilename, 'utf8').trim();
|
||||
|
||||
test.equal(generatedSVG, exampleSVG, "simple graph svg content matches");
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.validate = function(test) {
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
test.throws( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
series: [{
|
||||
color : 'steelblue',
|
||||
data : [
|
||||
{ x: 0, y: 40 },
|
||||
{ x: 5, y: 49 },
|
||||
{ x: 2, y: 38 },
|
||||
{ x: 3, y: 30 },
|
||||
{ x: 4, y: 32 } ]
|
||||
}]
|
||||
} );
|
||||
|
||||
}, null, "out of order data points throws an error" );
|
||||
|
||||
test.done();
|
||||
|
||||
};
|
||||
|
||||
exports.scales = function(test) {
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
var times = [1380000000000, 1390000000000];
|
||||
|
||||
var series = [
|
||||
{
|
||||
color: 'steelblue',
|
||||
data: [ { x: times[0], y: 40 }, { x: times[1], y: 49 } ]
|
||||
}
|
||||
];
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
xScale: d3.time.scale(),
|
||||
yScale: d3.scale.sqrt(),
|
||||
series: series
|
||||
});
|
||||
|
||||
graph.render();
|
||||
|
||||
var xAxis = new Rickshaw.Graph.Axis.X({
|
||||
graph: graph,
|
||||
tickFormat: graph.x.tickFormat()
|
||||
});
|
||||
|
||||
xAxis.render();
|
||||
|
||||
var yAxis = new Rickshaw.Graph.Axis.Y({
|
||||
graph: graph
|
||||
});
|
||||
|
||||
yAxis.render();
|
||||
|
||||
test.ok(graph.x.ticks()[0] instanceof Date);
|
||||
|
||||
var xTicks = el.getElementsByClassName('x_ticks_d3')[0].getElementsByTagName('text');
|
||||
test.equal(xTicks[0].innerHTML, 'Sep 29');
|
||||
test.equal(xTicks[1].innerHTML, 'Oct 06');
|
||||
test.equal(xTicks[8].innerHTML, 'Nov 24');
|
||||
|
||||
var yTicks = el.getElementsByClassName('y_ticks')[0].getElementsByTagName('g');
|
||||
test.equal(yTicks[0].getAttribute('transform'), 'translate(0,500)');
|
||||
test.equal(yTicks[1].getAttribute('transform'), 'translate(0,275.24400874015976)');
|
||||
test.equal(yTicks[2].getAttribute('transform'), 'translate(0,182.14702893572513)');
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.inconsistent = function(test) {
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
var series = [
|
||||
{
|
||||
color: 'steelblue',
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 } ]
|
||||
}, {
|
||||
color: 'red',
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 } ]
|
||||
}
|
||||
];
|
||||
|
||||
test.doesNotThrow( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'stack',
|
||||
series: series
|
||||
});
|
||||
|
||||
}, "create basic graph okay" );
|
||||
|
||||
series[0].data.push( { x: 3, y: 88 } );
|
||||
|
||||
test.doesNotThrow( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'line',
|
||||
series: series
|
||||
});
|
||||
|
||||
}, "we don't throw for inconsistent length series for lines" );
|
||||
|
||||
test.throws( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'stack',
|
||||
series: series
|
||||
});
|
||||
|
||||
}, null, "throw for inconsistent stacked series for stack renderer" );
|
||||
|
||||
test.throws( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: null,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'stack',
|
||||
series: series
|
||||
});
|
||||
|
||||
}, null, "throw an error for undefined element reference" );
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.configure = function(test) {
|
||||
|
||||
var el = document.createElement('div');
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
padding: { top: 0.2 },
|
||||
renderer: 'stack',
|
||||
series: [ { data: [ { x: 1, y: 40 } ] } ]
|
||||
});
|
||||
|
||||
test.deepEqual(graph.renderer.padding, { bottom: 0.01, right: 0, left: 0, top: 0.2 },
|
||||
"padding makes it through to renderer from constructor");
|
||||
|
||||
test.strictEqual(typeof graph.padding, "undefined",
|
||||
"padding not set on graph from constructor");
|
||||
|
||||
graph.configure({ padding: { top: 0.25, bottom: 0.25, right: 0.25, left: 0.25 } });
|
||||
|
||||
test.deepEqual(graph.renderer.padding, { bottom: 0.25, right: 0.25, left: 0.25, top: 0.25 },
|
||||
"padding makes it through to renderer from configure");
|
||||
|
||||
test.strictEqual(typeof graph.padding, "undefined",
|
||||
"padding not set on graph from configure");
|
||||
|
||||
var callback = function(args) {
|
||||
if (callback.called) return;
|
||||
test.deepEqual(args, { interpolation: 'step-after' }, "configure args match");
|
||||
callback.called = true;
|
||||
};
|
||||
|
||||
graph.onConfigure(callback);
|
||||
graph.configure({ interpolation: 'step-after' });
|
||||
|
||||
test.equal(graph.interpolation, 'step-after', "interpolation set on graph");
|
||||
test.ok(callback.called, "configure callback was called");
|
||||
test.equal(graph.config.interpolation, 'step-after', "configuration object has interpolation set");
|
||||
|
||||
graph.configure({ width: 900, height: 100 });
|
||||
|
||||
test.deepEqual([ graph.width, graph.height ], [ 900, 100 ], "graph dimensions take");
|
||||
test.deepEqual(graph.vis[0][0].getAttribute('width'), 900, "width set on svg");
|
||||
test.deepEqual(graph.vis[0][0].getAttribute('height'), 100, "height set on svg");
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.rendererAutodiscover = function(test) {
|
||||
|
||||
var Rickshaw = require('../rickshaw');
|
||||
new Rickshaw.Compat.ClassList();
|
||||
|
||||
var el = document.createElement("div");
|
||||
|
||||
var series = [
|
||||
{
|
||||
color: 'steelblue',
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 } ]
|
||||
}, {
|
||||
color: 'red',
|
||||
data: [ { x: 0, y: 40 }, { x: 1, y: 49 }, { x: 2, y: 38 } ]
|
||||
}
|
||||
];
|
||||
|
||||
test.throws( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'testline',
|
||||
series: series
|
||||
});
|
||||
|
||||
}, null, "throw for unknown renderer" );
|
||||
|
||||
Rickshaw.namespace('Rickshaw.Graph.Renderer.TestLine');
|
||||
|
||||
Rickshaw.Graph.Renderer.TestLine = Rickshaw.Class.create( Rickshaw.Graph.Renderer.Line, {
|
||||
name: 'testline'
|
||||
} );
|
||||
|
||||
test.doesNotThrow( function() {
|
||||
|
||||
var graph = new Rickshaw.Graph({
|
||||
element: el,
|
||||
width: 960,
|
||||
height: 500,
|
||||
renderer: 'testline',
|
||||
series: series
|
||||
});
|
||||
|
||||
}, "new render autodiscovered ok" );
|
||||
|
||||
delete Rickshaw.Graph.Renderer.TestLine;
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
@@ -0,0 +1,75 @@
|
||||
var Rickshaw = require("../rickshaw");
|
||||
|
||||
function seriesData() {
|
||||
return {
|
||||
name: 'series1',
|
||||
data: [ {x: 0, y: 20}, {x: 1, y: 21}, { x: 2, y: 15} ],
|
||||
color: 'red'
|
||||
};
|
||||
}
|
||||
|
||||
exports.basic = function(test) {
|
||||
|
||||
test.equal(typeof Rickshaw.Series.FixedDuration, 'function', 'Rickshaw.Series.FixedDuration is a function');
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.initialize = function(test) {
|
||||
|
||||
function instantiateMalformed() {
|
||||
|
||||
var series = new Rickshaw.Series.FixedDuration(
|
||||
[seriesData()],
|
||||
'spectrum2001',
|
||||
{ timeBase: 0, maxDataPoints: 2000 }
|
||||
);
|
||||
}
|
||||
|
||||
test.throws(instantiateMalformed, 'FixedDuration series requires timeInterval', 'we die without a timeInterval');
|
||||
|
||||
function instantiateMalformed2() {
|
||||
|
||||
var series = new Rickshaw.Series.FixedDuration(
|
||||
[seriesData()],
|
||||
'spectrum2001',
|
||||
{ timeBase: 0, timeInterval: 30 }
|
||||
);
|
||||
}
|
||||
|
||||
test.throws(instantiateMalformed2, 'FixedDuration series requires maxDataPoints', 'we die without maxDataPoints');
|
||||
|
||||
var series = new Rickshaw.Series.FixedDuration(
|
||||
[seriesData()],
|
||||
'spectrum2001',
|
||||
{
|
||||
timeBase: 0,
|
||||
timeInterval: 30,
|
||||
maxDataPoints: 2000
|
||||
}
|
||||
);
|
||||
|
||||
test.ok(series instanceof Rickshaw.Series.FixedDuration);
|
||||
test.ok(series instanceof Array);
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.addData = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series.FixedDuration(
|
||||
[seriesData()],
|
||||
'spectrum2001',
|
||||
{
|
||||
timeBase: 0,
|
||||
timeInterval: 1,
|
||||
maxDataPoints: 20
|
||||
}
|
||||
);
|
||||
|
||||
for (var i = 0; i < 300; i++) {
|
||||
series.addData({series1: 42});
|
||||
}
|
||||
|
||||
test.equal(series[0].data.length, 20 + 2, 'series length stuck around maxDataPoints');
|
||||
test.equal(series.currentSize, 20, 'series.currentSize is stuck at maxDataPoints');
|
||||
test.done();
|
||||
};
|
||||
171
public/assets/plugins/charts-rickshaw/tests/Rickshaw.Series.js
Normal file
171
public/assets/plugins/charts-rickshaw/tests/Rickshaw.Series.js
Normal file
@@ -0,0 +1,171 @@
|
||||
var Rickshaw = require("../rickshaw");
|
||||
|
||||
function seriesData() {
|
||||
return {
|
||||
name: 'series1',
|
||||
data: [ {x: 0, y: 20}, {x: 1, y: 21}, { x: 2, y: 15} ],
|
||||
color: 'red'
|
||||
};
|
||||
}
|
||||
|
||||
exports.basic = function(test) {
|
||||
|
||||
test.equal(typeof Rickshaw.Series, 'function', 'Rickshaw.Series is a function');
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.initialize = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([seriesData()], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
test.ok(series instanceof Rickshaw.Series);
|
||||
test.ok(series instanceof Array);
|
||||
|
||||
test.deepEqual(
|
||||
series[0].data,
|
||||
[ { x: 0, y: 20 },
|
||||
{ x: 1, y: 21 },
|
||||
{ x: 2, y: 15 } ],
|
||||
'data made it in as we expect'
|
||||
);
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.addItem = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([seriesData()], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
series.addItem( {
|
||||
name: 'series2',
|
||||
data: [ {x: 0, y: 10}, {x: 1, y: 13}, {x: 2, y: 12} ]
|
||||
} );
|
||||
|
||||
test.equal(series.length, 2, 'series has two items');
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.addData = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([seriesData()], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
series.addData( { series1: 22 } );
|
||||
|
||||
test.equal(series[0].data.length, 4, 'first series has four data points');
|
||||
test.equal(series[0].data[3].y, 22, 'first series last data point made it in');
|
||||
|
||||
series.addData( { series1: 29, series2: 57 } );
|
||||
|
||||
test.equal(series[0].data[4].y, 29, 'first series has a new data point');
|
||||
|
||||
test.equal(series[1].data.length, 5, 'second series has five data points');
|
||||
test.equal(series[1].data[4].y, 57, 'second series last data point made it in');
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.addDataWithXAxisValue = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([seriesData()], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
series.addData({ series1: 22 }, 5);
|
||||
|
||||
test.equal(series[0].data.length, 4, 'first series has four data points');
|
||||
test.equal(series[0].data[3].y, 22, 'first series last data point made it in');
|
||||
test.equal(series[0].data[3].x, 5, 'first series last data point made it in with the correct x');
|
||||
|
||||
series.addData({ series1: 29, series2: 57 }, 7);
|
||||
|
||||
test.equal(series[0].data[4].y, 29, 'first series has a new data point');
|
||||
test.equal(series[0].data[4].x, 7, 'first series has a new data point with the correct x');
|
||||
|
||||
test.equal(series[1].data.length, 5, 'second series has five data points');
|
||||
test.equal(series[1].data[4].y, 57, 'second series last data point made it in');
|
||||
test.equal(series[1].data[4].x, 7, 'second series last data point made it in with the correct x');
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.itemByName = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([seriesData()], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
test.strictEqual(series.itemByName('series1'), series[0], 'we get the right item');
|
||||
test.strictEqual(series.itemByName('series1').name, 'series1', 'item by name is right');
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.dump = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([seriesData()], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
test.deepEqual(
|
||||
series.dump(),
|
||||
{
|
||||
"timeBase":0,
|
||||
"timeInterval": 1,
|
||||
"items":[{
|
||||
"color":"red",
|
||||
"name":"series1",
|
||||
"data":[{"x":0,"y":20},{"x":1,"y":21},{"x":2,"y":15}]
|
||||
}]
|
||||
},
|
||||
'dumped series matches'
|
||||
);
|
||||
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.zeroFill = function(test) {
|
||||
|
||||
var series = [
|
||||
{ name: "series1", data: [{ x: 1, y: 22 }, { x: 3, y: 29 }] },
|
||||
{ name: "series2", data: [{ x: 2, y: 49 }] }
|
||||
];
|
||||
|
||||
Rickshaw.Series.zeroFill(series);
|
||||
|
||||
var expectedSeries = [
|
||||
{ name: "series1", data: [{ x: 1, y: 22 }, { x: 2, y: 0 }, { x: 3, y: 29 }] },
|
||||
{ name: "series2", data: [{ x: 1, y: 0}, { x: 2, y: 49 }, { x: 3, y: 0 }] }
|
||||
];
|
||||
|
||||
test.deepEqual(series, expectedSeries, "zero fill fills in zeros");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.nullFill = function(test) {
|
||||
|
||||
var series = [
|
||||
{ name: "series1", data: [{ x: 1, y: 22 }, { x: 3, y: 29 }] },
|
||||
{ name: "series2", data: [{ x: 2, y: 49 }] }
|
||||
];
|
||||
|
||||
Rickshaw.Series.fill(series, null);
|
||||
|
||||
var expectedSeries = [
|
||||
{ name: "series1", data: [{ x: 1, y: 22 }, { x: 2, y: null }, { x: 3, y: 29 }] },
|
||||
{ name: "series2", data: [{ x: 1, y: null}, { x: 2, y: 49 }, { x: 3, y: null }] }
|
||||
];
|
||||
|
||||
test.deepEqual(series, expectedSeries, "null fill fills in nulls");
|
||||
test.done();
|
||||
};
|
||||
|
||||
exports.load = function(test) {
|
||||
|
||||
var series = new Rickshaw.Series([], 'spectrum2001', {timeBase: 0});
|
||||
|
||||
series.load({
|
||||
items: [ seriesData() ],
|
||||
timeInterval: 3,
|
||||
timeBase: 0
|
||||
});
|
||||
|
||||
delete series.palette;
|
||||
|
||||
test.equal(series.timeBase, 0, 'time base made it in');
|
||||
test.equal(series.timeInterval, 3, 'time interval made it in');
|
||||
test.equal(series[0].data.length, 3, 'series data made it in');
|
||||
test.done();
|
||||
};
|
||||
@@ -0,0 +1 @@
|
||||
<svg width="960" height="500"><circle cx="9.41084207430644" cy="95.87795514245306" r="6" fill="steelblue"></circle><circle cx="244.68189393196744" cy="4.950495049505037" r="6" fill="steelblue"></circle><circle cx="479.9529457896284" cy="116.08405738533042" r="6" fill="steelblue"></circle><circle cx="715.2239976472895" cy="196.90846635683977" r="6" fill="steelblue"></circle><circle cx="950.4950495049504" cy="176.70236411396246" r="6" fill="steelblue"></circle></svg>
|
||||
|
After Width: | Height: | Size: 470 B |
Reference in New Issue
Block a user