dimple-js
Version:
Dimple is an object-oriented API allowing you to create flexible axis-based charts using [d3.js](http://d3js.org "d3.js").
86 lines (78 loc) • 6.03 kB
JavaScript
/*global expect, describe, it, beforeEach */
define(["dimple"], function (dimple) {
"use strict";
describe("_rollUp", function () {
var data,
getResults;
beforeEach(function () {
data = [
{ "Field 1": "a", "Field 2": "x", "Field 3": "s", "Field 4": 13 },
{ "Field 1": "a", "Field 2": "y", "Field 3": "s", "Field 4": 14 },
{ "Field 1": "a", "Field 2": "z", "Field 3": "t", "Field 4": 15 }
];
// Flatten the ordered resultset for easy comparison
getResults = function(data, fields) {
var rolledUp = dimple._rollUp(data, fields, ["Field 1", "Field 2", "Field 3", "Field 4"]),
retString = "";
rolledUp.forEach(function (d, i) {
var addField = function (field) {
retString += "'" + field + "':";
if (d[field] instanceof Array) {
retString += "['" + d[field].join("','") + "']";
} else {
retString += "'" + d[field] + "'";
}
};
retString += (i > 0 ? "," : "") + "{";
addField("Field 1");
retString += ",";
addField("Field 2");
retString += ",";
addField("Field 3");
retString += ",";
addField("Field 4");
retString += "}";
});
return retString;
};
});
it("Rolls up grouped by a single field", function () {
expect(getResults(data, "Field 1"))
.toEqual("{'Field 1':'a','Field 2':['x','y','z'],'Field 3':['s','s','t'],'Field 4':['13','14','15']}");
expect(getResults(data, "Field 2"))
.toEqual("{'Field 1':['a'],'Field 2':'x','Field 3':['s'],'Field 4':['13']},{'Field 1':['a'],'Field 2':'y','Field 3':['s'],'Field 4':['14']},{'Field 1':['a'],'Field 2':'z','Field 3':['t'],'Field 4':['15']}");
expect(getResults(data, "Field 3"))
.toEqual("{'Field 1':['a','a'],'Field 2':['x','y'],'Field 3':'s','Field 4':['13','14']},{'Field 1':['a'],'Field 2':['z'],'Field 3':'t','Field 4':['15']}");
expect(getResults(data, "Field 4"))
.toEqual("{'Field 1':['a'],'Field 2':['x'],'Field 3':['s'],'Field 4':'13'},{'Field 1':['a'],'Field 2':['y'],'Field 3':['s'],'Field 4':'14'},{'Field 1':['a'],'Field 2':['z'],'Field 3':['t'],'Field 4':'15'}");
});
it("Rolls up grouped by two fields", function () {
expect(getResults(data, ["Field 1", "Field 2"]))
.toEqual("{'Field 1':'a','Field 2':'x','Field 3':['s'],'Field 4':['13']},{'Field 1':'a','Field 2':'y','Field 3':['s'],'Field 4':['14']},{'Field 1':'a','Field 2':'z','Field 3':['t'],'Field 4':['15']}");
expect(getResults(data, ["Field 1", "Field 3"]))
.toEqual("{'Field 1':'a','Field 2':['x','y'],'Field 3':'s','Field 4':['13','14']},{'Field 1':'a','Field 2':['z'],'Field 3':'t','Field 4':['15']}");
expect(getResults(data, ["Field 1", "Field 4"]))
.toEqual("{'Field 1':'a','Field 2':['x'],'Field 3':['s'],'Field 4':'13'},{'Field 1':'a','Field 2':['y'],'Field 3':['s'],'Field 4':'14'},{'Field 1':'a','Field 2':['z'],'Field 3':['t'],'Field 4':'15'}");
expect(getResults(data, ["Field 2", "Field 3"]))
.toEqual("{'Field 1':['a'],'Field 2':'x','Field 3':'s','Field 4':['13']},{'Field 1':['a'],'Field 2':'y','Field 3':'s','Field 4':['14']},{'Field 1':['a'],'Field 2':'z','Field 3':'t','Field 4':['15']}");
expect(getResults(data, ["Field 2", "Field 4"]))
.toEqual("{'Field 1':['a'],'Field 2':'x','Field 3':['s'],'Field 4':'13'},{'Field 1':['a'],'Field 2':'y','Field 3':['s'],'Field 4':'14'},{'Field 1':['a'],'Field 2':'z','Field 3':['t'],'Field 4':'15'}");
expect(getResults(data, ["Field 3", "Field 4"]))
.toEqual("{'Field 1':['a'],'Field 2':['x'],'Field 3':'s','Field 4':'13'},{'Field 1':['a'],'Field 2':['y'],'Field 3':'s','Field 4':'14'},{'Field 1':['a'],'Field 2':['z'],'Field 3':'t','Field 4':'15'}");
});
it("Rolls up grouped by three fields", function () {
expect(getResults(data, ["Field 1", "Field 2", "Field 3"]))
.toEqual("{'Field 1':'a','Field 2':'x','Field 3':'s','Field 4':['13']},{'Field 1':'a','Field 2':'y','Field 3':'s','Field 4':['14']},{'Field 1':'a','Field 2':'z','Field 3':'t','Field 4':['15']}");
expect(getResults(data, ["Field 1", "Field 2", "Field 4"]))
.toEqual("{'Field 1':'a','Field 2':'x','Field 3':['s'],'Field 4':'13'},{'Field 1':'a','Field 2':'y','Field 3':['s'],'Field 4':'14'},{'Field 1':'a','Field 2':'z','Field 3':['t'],'Field 4':'15'}");
expect(getResults(data, ["Field 1", "Field 3", "Field 4"]))
.toEqual("{'Field 1':'a','Field 2':['x'],'Field 3':'s','Field 4':'13'},{'Field 1':'a','Field 2':['y'],'Field 3':'s','Field 4':'14'},{'Field 1':'a','Field 2':['z'],'Field 3':'t','Field 4':'15'}");
expect(getResults(data, ["Field 2", "Field 3", "Field 4"]))
.toEqual("{'Field 1':['a'],'Field 2':'x','Field 3':'s','Field 4':'13'},{'Field 1':['a'],'Field 2':'y','Field 3':'s','Field 4':'14'},{'Field 1':['a'],'Field 2':'z','Field 3':'t','Field 4':'15'}");
});
it("Rolls up grouped by all fields", function () {
expect(getResults(data, ["Field 1", "Field 2", "Field 3", "Field 4"]))
.toEqual("{'Field 1':'a','Field 2':'x','Field 3':'s','Field 4':'13'},{'Field 1':'a','Field 2':'y','Field 3':'s','Field 4':'14'},{'Field 1':'a','Field 2':'z','Field 3':'t','Field 4':'15'}");
});
});
});