Skip to content

Commit

Permalink
Better tests for svg.line.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Aug 17, 2011
1 parent 559394b commit 8f78f5e
Showing 1 changed file with 164 additions and 65 deletions.
229 changes: 164 additions & 65 deletions test/svg/line-test.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,71 +11,170 @@ suite.addBatch({
topic: function() {
return d3.svg.line;
},
"default accessors assume tuple input": function(line) {
var a = line();
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0L1,1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0L1,1L2,0");
},
"can specify x-accessor as a function": function(line) {
var i = 0, a = line().x(function() { return ++i; });
assert.pathEqual(a([[0, 0]]), "M1,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M2,0L3,1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M4,0L5,1L6,0");
},
"can specify y-accessor as a function": function(line) {
var i = 0, a = line().y(function() { return ++i; });
assert.pathEqual(a([[0, 0]]), "M0,1");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,2L1,3");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,4L1,5L2,6");
},
"can specify y-accessor as a constant": function(line) {
var a = line().y(-1);
assert.pathEqual(a([[0, 0]]), "M0,-1");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,-1L1,-1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,-1L1,-1L2,-1");
},
"supports step-before interpolation": function(line) {
var a = line().interpolate("step-before");
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0V1H1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0V1H1V0H2");
},
"supports step-after interpolation": function(line) {
var a = line().interpolate("step-after");
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0H1V1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0H1V1H2V0");
},
"supports basis interpolation": function(line) {
var a = line().interpolate("basis");
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0L1,1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0C0,0,0,0,0.16666666666666666,0.16666666666666666C0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,1,0.6666666666666666C1.3333333333333333,0.6666666666666666,1.6666666666666665,0.3333333333333333,1.8333333333333333,0.16666666666666666C2,0,2,0,1.9999999999999998,0");
},
"supports basis-closed interpolation": function(line) {
var a = line().interpolate("basis-closed");
assert.pathEqual(a([[0, 0]]), "M0,0C0,0,0,0,0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0.3333333333333333,0.3333333333333333C0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,0.6666666666666666,0.6666666666666666C0.6666666666666666,0.6666666666666666,0.3333333333333333,0.3333333333333333,0.3333333333333333,0.3333333333333333");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M1.5,0.16666666666666666C1.3333333333333333,0,0.6666666666666666,0,0.5,0.16666666666666666C0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,1,0.6666666666666666C1.3333333333333333,0.6666666666666666,1.6666666666666665,0.3333333333333333,1.5,0.16666666666666666");
},
"supports cardinal interpolation": function(line) {
var a = line().interpolate("cardinal");
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0L1,1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0Q0.7999999999999999,1,1,1Q1.2,1,2,0");
},
"supports cardinal-closed interpolation": function(line) {
var a = line().interpolate("cardinal-closed");
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0L1,1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0C-0.15000000000000002,0.15000000000000002,0.7,1,1,1S2.15,0.15000000000000002,2,0S0.15000000000000002,-0.15000000000000002,0,0");
},
"supports monotone interpolation": function(line) {
var a = line().interpolate("monotone");
assert.pathEqual(a([[0, 0]]), "M0,0");
assert.pathEqual(a([[0, 0], [1, 1]]), "M0,0L1,1");
assert.pathEqual(a([[0, 0], [1, 1], [2, 0]]), "M0,0C0.08333333333333333,0.08333333333333333,0.6666666666666667,1,1,1S1.9166666666666667,0.08333333333333333,2,0");

"x defaults to a function accessor": function(line) {
var l = line();
assert.pathEqual(l([[1, 2], [4, 3]]), "M1,2L4,3");
assert.typeOf(l.x(), "function");
},
"x can be defined as a constant": function(line) {
var l = line().x(0);
assert.pathEqual(l([[1, 2], [4, 3]]), "M0,2L0,3");
assert.equal(l.x(), 0);
},
"x can be defined as a function": function(line) {
var l = line().x(f), t = {}, dd = [], ii = [], tt = [];
function f(d, i) { dd.push(d); ii.push(i); tt.push(this); return 0; }
assert.pathEqual(l.call(t, [[1, 2], [4, 3]]), "M0,2L0,3");
assert.deepEqual(dd, [[1, 2], [4, 3]], "expected data, got {actual}");
assert.deepEqual(ii, [0, 1], "expected index, got {actual}");
assert.deepEqual(tt, [t, t], "expected this, got {actual}");
},

"y defaults to a function accessor": function(line) {
var l = line();
assert.pathEqual(l([[1, 2], [4, 3]]), "M1,2L4,3");
assert.typeOf(l.y(), "function");
},
"y can be defined as a constant": function(line) {
var l = line().y(0);
assert.pathEqual(l([[1, 2], [4, 3]]), "M1,0L4,0");
assert.equal(l.y(), 0);
},
"y can be defined as a function": function(line) {
var l = line().y(f), t = {}, dd = [], ii = [], tt = [];
function f(d, i) { dd.push(d); ii.push(i); tt.push(this); return 0; }
assert.pathEqual(l.call(t, [[1, 2], [4, 3]]), "M1,0L4,0");
assert.deepEqual(dd, [[1, 2], [4, 3]], "expected data, got {actual}");
assert.deepEqual(ii, [0, 1], "expected index, got {actual}");
assert.deepEqual(tt, [t, t], "expected this, got {actual}");
},

"interpolate defaults to linear": function(line) {
assert.equal(line().interpolate(), "linear");
},
"interpolate can be defined as a constant": function(line) {
var l = line().interpolate("step-before");
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0V1H1");
assert.equal(l.interpolate(), "step-before");
},

"tension defaults to .7": function(line) {
assert.equal(line().tension(), .7);
},
"tension can be specified as a constant": function(line) {
var l = line().tension(.5);
assert.equal(l.tension(), .5);
},

"returns null if input points array is empty": function(line) {
assert.isNull(line()([]));
},

"interpolate(step)": {
"supports step-before interpolation": function(line) {
var l = line().interpolate("step-before");
assert.pathEqual(l([[0, 0]]), "M0,0");
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0V1H1");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0]]), "M0,0V1H1V0H2");
},
"supports step-after interpolation": function(line) {
var l = line().interpolate("step-after");
assert.pathEqual(l([[0, 0]]), "M0,0");
assert.pathEqual(l([[0, 0], [1, 1]]), "M0,0H1V1");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0]]), "M0,0H1V1H2V0");
}
},

"interpolate(basis)": {
"supports basis interpolation": function(line) {
var l = line().interpolate("basis");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M0,0C0,0,0,0,0.16666666666666666,0.16666666666666666C0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,1,0.6666666666666666C1.3333333333333333,0.6666666666666666,1.6666666666666665,0.3333333333333333,2,0.3333333333333333C2.333333333333333,0.3333333333333333,2.6666666666666665,0.6666666666666666,3,0.6666666666666666C3.333333333333333,0.6666666666666666,3.6666666666666665,0.3333333333333333,3.833333333333333,0.16666666666666666C4,0,4,0,3.9999999999999996,0");
},
"supports basis-open interpolation": function(line) {
var l = line().interpolate("basis-open");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M1,0.6666666666666666C1.3333333333333333,0.6666666666666666,1.6666666666666665,0.3333333333333333,2,0.3333333333333333C2.333333333333333,0.3333333333333333,2.6666666666666665,0.6666666666666666,3,0.6666666666666666");
},
"supports basis-closed interpolation": function(line) {
var l = line().interpolate("basis-closed");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M2,0.3333333333333333C2.333333333333333,0.3333333333333333,2.6666666666666665,0.6666666666666666,3,0.6666666666666666C3.333333333333333,0.6666666666666666,3.6666666666666665,0.3333333333333333,3.1666666666666665,0.16666666666666666C2.6666666666666665,0,1.3333333333333333,0,0.8333333333333333,0.16666666666666666C0.3333333333333333,0.3333333333333333,0.6666666666666666,0.6666666666666666,1,0.6666666666666666C1.3333333333333333,0.6666666666666666,1.6666666666666665,0.3333333333333333,2,0.3333333333333333");
},
"basis interpolation reverts to linear with fewer than three points": function(line) {
var l = line().interpolate("basis"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
},
"basis-open interpolation reverts to linear with fewer than four points": function(line) {
var l = line().interpolate("basis-open"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
assert.pathEqual(l([[0, 0], [1, 1], [2, 0]]), d([[0, 0], [1, 1], [2, 0]]));
},
"basis-closed interpolation reverts to linear with fewer than three points": function(line) {
var l = line().interpolate("basis-open"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
}
},

"interpolate(bundle)": {
"supports bundle interpolation": function(line) {
var l = line().interpolate("bundle");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M0,0C0,0,0,0,0.16666666666666666,0.11666666666666665C0.3333333333333333,0.2333333333333333,0.6666666666666666,0.4666666666666666,1,0.4666666666666666C1.3333333333333333,0.4666666666666666,1.6666666666666665,0.2333333333333333,2,0.2333333333333333C2.333333333333333,0.2333333333333333,2.6666666666666665,0.4666666666666666,3,0.4666666666666666C3.333333333333333,0.4666666666666666,3.6666666666666665,0.2333333333333333,3.833333333333333,0.11666666666666665C4,0,4,0,4,0");
},
"observes the specified tension": function(line) {
var l = line().interpolate("bundle").tension(1);
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), line().interpolate("basis")([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]));
}
},

"interpolate(cardinal)": {
"supports cardinal interpolation": function(line) {
var l = line().interpolate("cardinal");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M0,0Q0.8,1,1,1C1.3,1,1.7,0,2,0S2.7,1,3,1Q3.2,1,4,0");
},
"supports cardinal-open interpolation": function(line) {
var l = line().interpolate("cardinal-open");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M1,1C1.3,1,1.7,0,2,0S2.7,1,3,1");
},
"supports cardinal-closed interpolation": function(line) {
var l = line().interpolate("cardinal-closed");
assert.pathEqual(l([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M0,0C-0.45,0.15,0.7,1,1,1S1.7,0,2,0S2.7,1,3,1S4.45,0.15,4,0S0.45,-0.15,0,0");
},
"cardinal interpolation reverts to linear with fewer than three points": function(line) {
var l = line().interpolate("cardinal"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
},
"cardinal-open interpolation reverts to linear with fewer than four points": function(line) {
var l = line().interpolate("cardinal-open"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
assert.pathEqual(l([[0, 0], [1, 1], [2, 0]]), d([[0, 0], [1, 1], [2, 0]]));
},
"cardinal-closed interpolation reverts to linear with fewer than three points": function(line) {
var l = line().interpolate("cardinal-open"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
},
"observes the specified tension": function(line) {
var l = line().tension(.5);
assert.pathEqual(l.interpolate("cardinal")([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M0,0Q0.6666666666666667,1,1,1C1.5,1,1.5,0,2,0S2.5,1,3,1Q3.3333333333333335,1,4,0");
assert.pathEqual(l.interpolate("cardinal-open")([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M1,1C1.5,1,1.5,0,2,0S2.5,1,3,1");
assert.pathEqual(l.interpolate("cardinal-closed")([[0, 0], [1, 1], [2, 0], [3, 1], [4, 0]]), "M0,0C-0.75,0.25,0.5,1,1,1S1.5,0,2,0S2.5,1,3,1S4.75,0.25,4,0S0.75,-0.25,0,0");
}
},

"interpolate(monotone)": {
"supports monotone interpolation": function(line) {
var l = line().interpolate("monotone");
assert.pathEqual(l([[0, 0], [1, 1], [2, 1], [3, 0], [4, 0]]), "M0,0C0.08333333333333333,0.08333333333333333,0.6666666666666667,1,1,1S1.6666666666666667,1,2,1S2.6666666666666665,0,3,0S3.8333333333333335,0,4,0");
},
"monotone interpolation reverts to linear with fewer than three points": function(line) {
var l = line().interpolate("monotone"), d = line();
assert.pathEqual(l([[0, 0]]), d([[0, 0]]));
assert.pathEqual(l([[0, 0], [1, 1]]), d([[0, 0], [1, 1]]));
}
}
}
});
Expand Down

0 comments on commit 8f78f5e

Please sign in to comment.