mirror of https://github.com/vitalif/dimple
commit
2e3a06aeb3
|
@ -3,4 +3,5 @@ node_modules
|
|||
.idea
|
||||
*.komodo*
|
||||
help
|
||||
image_creator
|
||||
image_creator
|
||||
tmp
|
||||
|
|
58
Gruntfile.js
58
Gruntfile.js
|
@ -32,6 +32,10 @@ module.exports = function(grunt) {
|
|||
"src/end.js"
|
||||
],
|
||||
dest: 'dist/<%= pkg.name %>.v<%= pkg.version %>.js'
|
||||
},
|
||||
test: {
|
||||
src: '<%= concat.dist.src %>',
|
||||
dest: 'tmp/<%= pkg.name %>.js'
|
||||
}
|
||||
},
|
||||
uglify: {
|
||||
|
@ -49,17 +53,6 @@ module.exports = function(grunt) {
|
|||
}
|
||||
}
|
||||
},
|
||||
qunit: {
|
||||
all: {
|
||||
options: {
|
||||
urls: [
|
||||
'http://localhost:3001/test/methods/_getOrderedList.html',
|
||||
'http://localhost:3001/test/methods/_rollUp.html',
|
||||
'http://localhost:3001/test/methods/newSvg.html'
|
||||
]
|
||||
}
|
||||
}
|
||||
},
|
||||
jslint: {
|
||||
files: [
|
||||
'Gruntfile.js',
|
||||
|
@ -89,6 +82,43 @@ module.exports = function(grunt) {
|
|||
"<!-- AUTOMATICALLY GENERATED CODE - PLEASE EDIT TEMPLATE INSTEAD -->\n" +
|
||||
"<!----------------------------------------------------------------->\n"
|
||||
}
|
||||
},
|
||||
karma: {
|
||||
options: {
|
||||
basepath: '',
|
||||
frameworks: ['jasmine'],
|
||||
files: [
|
||||
'lib/d3.v3.min.js',
|
||||
'tmp/*.js',
|
||||
'test/**/*.spec.js',
|
||||
'test/*.spec.js'
|
||||
],
|
||||
reporters: ['progress'],
|
||||
port: 9876,
|
||||
colors: true,
|
||||
browsers: ['PhantomJS']
|
||||
},
|
||||
unit: {
|
||||
singleRun: true
|
||||
},
|
||||
continuous: {
|
||||
background: true
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
src: {
|
||||
files: [
|
||||
'<%= concat.test.src %>'
|
||||
],
|
||||
tasks: ['concat:test', 'karma:continuous:run']
|
||||
},
|
||||
test: {
|
||||
files: [
|
||||
'test/**/*.spec.js',
|
||||
'test/*.spec.js'
|
||||
],
|
||||
tasks: ['karma:continuous:run']
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
@ -98,6 +128,8 @@ module.exports = function(grunt) {
|
|||
grunt.loadNpmTasks('grunt-contrib-connect');
|
||||
grunt.loadNpmTasks('grunt-contrib-qunit');
|
||||
grunt.loadNpmTasks('grunt-jslint');
|
||||
grunt.loadNpmTasks('grunt-contrib-watch');
|
||||
grunt.loadNpmTasks('grunt-karma');
|
||||
|
||||
// Propogate version into relevant files
|
||||
grunt.registerMultiTask('prop', 'Propagate Versions.', function() {
|
||||
|
@ -130,6 +162,8 @@ module.exports = function(grunt) {
|
|||
});
|
||||
|
||||
// Default tasks
|
||||
grunt.registerTask('default', ['concat', 'jslint', 'uglify', 'connect', 'qunit', 'prop']);
|
||||
grunt.registerTask('default', ['concat', 'jslint', 'uglify', 'connect', 'prop']);
|
||||
grunt.registerTask('test:unit', ['concat:test', 'karma:unit']);
|
||||
grunt.registerTask('test', ['karma:continuous:start', 'watch']);
|
||||
|
||||
};
|
18
package.json
18
package.json
|
@ -12,10 +12,22 @@
|
|||
"express": "3.x",
|
||||
"grunt": "~0.4.1",
|
||||
"grunt-jslint": "~0.2.6",
|
||||
"grunt-contrib-nodeunit": "~0.1.2",
|
||||
"grunt-contrib-concat": "~0.2.0",
|
||||
"grunt-contrib-uglify": "~0.2.0",
|
||||
"grunt-contrib-connect": "~0.3.0",
|
||||
"grunt-contrib-qunit": "~0.2.2"
|
||||
"grunt-contrib-connect": "~0.3.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"karma-script-launcher": "~0.1.0",
|
||||
"karma-chrome-launcher": "~0.1.2",
|
||||
"karma-firefox-launcher": "~0.1.3",
|
||||
"karma-html2js-preprocessor": "~0.1.0",
|
||||
"karma-jasmine": "~0.1.5",
|
||||
"karma-coffee-preprocessor": "~0.1.2",
|
||||
"requirejs": "~2.1.10",
|
||||
"karma-requirejs": "~0.2.1",
|
||||
"karma-phantomjs-launcher": "~0.1.1",
|
||||
"karma": "~0.10.9",
|
||||
"grunt-contrib-watch": "~0.5.3",
|
||||
"grunt-karma": "~0.6.2"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,77 @@
|
|||
describe("_getOrderedList", function() {
|
||||
var data;
|
||||
var getResults
|
||||
|
||||
beforeEach(function() {
|
||||
data = [
|
||||
{ "Int": 1, "Float":234, "Text":"XFBGR", "Date":"12/5/99", "Group":"A"},
|
||||
{ "Int": 2, "Float":54.35, "Text":"YTREB", "Date":"1/1/00", "Group":"A"},
|
||||
{ "Int": 3, "Float":-453, "Text":"XGFDY", "Date":"2 February 2007", "Group":"B"},
|
||||
{ "Int": 4, "Float":5436546, "Text":"XGFDE", "Date":"2000-03-01", "Group":"B"},
|
||||
{ "Int": 5, "Float":4323, "Text":"YTREB", "Date":"10/10/2000", "Group":"C"},
|
||||
{ "Int": 6, "Float":0, "Text":"GFDHN", "Date":"11/10/2000", "Group":"C"},
|
||||
{ "Int": 7, "Float":-453, "Text":"TRET", "Date":"10/9/2000", "Group":"D"},
|
||||
{ "Int": 1, "Float":5436546, "Text":"GFDGFDHG", "Date":"10/10/2000", "Group":"E"}
|
||||
];
|
||||
|
||||
getResults = function(data, field, levelDefinitions) {
|
||||
var ordered = dimple._getOrderedList(data, field, levelDefinitions);
|
||||
var retString = "";
|
||||
ordered.forEach(function (d, i) {
|
||||
retString += (i > 0 ? ", " : "") + d;
|
||||
});
|
||||
return retString;
|
||||
}
|
||||
});
|
||||
|
||||
it("Implicit Single Dimension Ordering", function() {
|
||||
expect(getResults(data, "Int")).toEqual( "1, 2, 3, 4, 5, 6, 7");
|
||||
expect(getResults(data, "Float")).toEqual( "-453, 0, 54.35, 234, 4323, 5436546");
|
||||
expect(getResults(data, "Text")).toEqual( "GFDGFDHG, GFDHN, TRET, XFBGR, XGFDE, XGFDY, YTREB");
|
||||
expect(getResults(data, "Date")).toEqual( "12/5/99, 1/1/00, 2000-03-01, 10/9/2000, 10/10/2000, 11/10/2000, 2 February 2007");
|
||||
});
|
||||
|
||||
it("Explicit Single Dimension Ordering", function() {
|
||||
expect(getResults(data, "Int", { ordering : "Int" })).toEqual( "1, 2, 3, 4, 5, 6, 7");
|
||||
expect(getResults(data, "Float", { ordering : "Float" })).toEqual( "-453, 0, 54.35, 234, 4323, 5436546");
|
||||
expect(getResults(data, "Text", { ordering : "Text" })).toEqual( "GFDGFDHG, GFDHN, TRET, XFBGR, XGFDE, XGFDY, YTREB");
|
||||
expect(getResults(data, "Date", { ordering : "Date" })).toEqual( "12/5/99, 1/1/00, 2000-03-01, 10/9/2000, 10/10/2000, 11/10/2000, 2 February 2007");
|
||||
});
|
||||
|
||||
it("Descending Single Dimension Ordering", function() {
|
||||
expect(getResults(data, "Int", { ordering : "Int", desc : true })).toEqual( "7, 6, 5, 4, 3, 2, 1");
|
||||
expect(getResults(data, "Float", { ordering : "Float", desc : true })).toEqual( "5436546, 4323, 234, 54.35, 0, -453");
|
||||
expect(getResults(data, "Text", { ordering : "Text", desc : true })).toEqual( "YTREB, XGFDY, XGFDE, XFBGR, TRET, GFDHN, GFDGFDHG");
|
||||
expect(getResults(data, "Date", { ordering : "Date", desc : true })).toEqual( "2 February 2007, 11/10/2000, 10/10/2000, 10/9/2000, 2000-03-01, 1/1/00, 12/5/99");
|
||||
});
|
||||
|
||||
it("List Ordering", function() {
|
||||
expect(getResults(data, "Int", { ordering : [3, 7, 4, 5, 2, 1, 6] })).toEqual( "3, 7, 4, 5, 2, 1, 6");
|
||||
expect(getResults(data, "Int", { ordering : [3, 7, 4, 5, 2, 1, 6], desc : true })).toEqual( "6, 1, 2, 5, 4, 7, 3");
|
||||
expect(getResults(data, "Int", { ordering : [3, 7, 4] })).toEqual( "3, 7, 4, 1, 2, 5, 6");
|
||||
expect(getResults(data, "Int", { ordering : [3, 7, 4], desc : true })).toEqual( "4, 7, 3, 1, 2, 5, 6");
|
||||
expect(getResults(data, "Int", { ordering : ["3", "7", "4", "5", "2", "1", "6"] })).toEqual( "3, 7, 4, 5, 2, 1, 6");
|
||||
expect(getResults(data, "Int", { ordering : ["3", "7", "4", "5", "2", "1", "6"], desc : true })).toEqual( "6, 1, 2, 5, 4, 7, 3");
|
||||
expect(getResults(data, "Int", { ordering : ["3", "7", "4"] })).toEqual( "3, 7, 4, 1, 2, 5, 6");
|
||||
expect(getResults(data, "Int", { ordering : ["3", "7", "4"], desc : true })).toEqual( "4, 7, 3, 1, 2, 5, 6");
|
||||
});
|
||||
|
||||
it("Functional Ordering", function() {
|
||||
expect(getResults(data, "Text", { ordering : function (a, b) { return a.Text.length - b.Text.length; } })).toEqual( "TRET, GFDHN, XFBGR, XGFDE, XGFDY, YTREB, GFDGFDHG");
|
||||
expect(getResults(data, "Text", { ordering : function (a, b) { return a.Text.length - b.Text.length; }, desc : true })).toEqual( "GFDGFDHG, GFDHN, XFBGR, XGFDE, XGFDY, YTREB, TRET");
|
||||
});
|
||||
|
||||
it("Secondary Category Ordering", function() {
|
||||
expect(getResults(data, "Int", { ordering : "Text" })).toEqual( "6, 7, 1, 4, 3, 2, 5");
|
||||
expect(getResults(data, "Int", { ordering : "Text", desc : true } )).toEqual( "2, 5, 3, 4, 1, 7, 6");
|
||||
expect(getResults(data, "Group", { ordering : "Float" } )).toEqual( "D, A, C, B, E");
|
||||
expect(getResults(data, "Group", { ordering : "Float", desc : true } )).toEqual( "E, B, C, A, D");
|
||||
});
|
||||
|
||||
it("Tertiary Category Ordering", function() {
|
||||
expect(getResults(data, "Int", [{ ordering : "Group" }, { ordering : "Float" }])).toEqual( "2, 1, 3, 4, 6, 5, 7");
|
||||
expect(getResults(data, "Int", [{ ordering : "Group", desc : true}, { ordering : "Float" }])).toEqual( "7, 6, 5, 3, 4, 2, 1");
|
||||
expect(getResults(data, "Int", [{ ordering : "Group"}, { ordering : "Float", desc : true }])).toEqual( "1, 2, 4, 3, 5, 6, 7");
|
||||
expect(getResults(data, "Int", [{ ordering : "Group", desc : true}, { ordering : "Float", desc : true }])).toEqual( "7, 5, 6, 4, 3, 1, 2");
|
||||
});
|
||||
});
|
|
@ -1,91 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test dimple.js</title>
|
||||
<link rel="stylesheet" href="/lib/qunit/qunit-1.11.0.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
<script src="/dist/dimple.v1.js"></script>
|
||||
<script src="/lib/d3.v3.min.js"></script>
|
||||
<script src="/lib/qunit/qunit-1.11.0.js"></script>
|
||||
<script>
|
||||
|
||||
// Test data
|
||||
var data = [
|
||||
{ "Int": 1, "Float":234, "Text":"XFBGR", "Date":"12/5/99", "Group":"A"},
|
||||
{ "Int": 2, "Float":54.35, "Text":"YTREB", "Date":"1/1/00", "Group":"A"},
|
||||
{ "Int": 3, "Float":-453, "Text":"XGFDY", "Date":"2 February 2007", "Group":"B"},
|
||||
{ "Int": 4, "Float":5436546, "Text":"XGFDE", "Date":"2000-03-01", "Group":"B"},
|
||||
{ "Int": 5, "Float":4323, "Text":"YTREB", "Date":"10/10/2000", "Group":"C"},
|
||||
{ "Int": 6, "Float":0, "Text":"GFDHN", "Date":"11/10/2000", "Group":"C"},
|
||||
{ "Int": 7, "Float":-453, "Text":"TRET", "Date":"10/9/2000", "Group":"D"},
|
||||
{ "Int": 1, "Float":5436546, "Text":"GFDGFDHG", "Date":"10/10/2000", "Group":"E"}
|
||||
];
|
||||
|
||||
// Flatten the ordered resultset for easy comparison
|
||||
function getResults(data, field, levelDefinitions) {
|
||||
var ordered = dimple._getOrderedList(data, field, levelDefinitions);
|
||||
var retString = "";
|
||||
ordered.forEach(function (d, i) {
|
||||
retString += (i > 0 ? ", " : "") + d;
|
||||
});
|
||||
return retString;
|
||||
}
|
||||
|
||||
test("Implicit Single Dimension Ordering", function() {
|
||||
equal(getResults(data, "Int"), "1, 2, 3, 4, 5, 6, 7");
|
||||
equal(getResults(data, "Float"), "-453, 0, 54.35, 234, 4323, 5436546");
|
||||
equal(getResults(data, "Text"), "GFDGFDHG, GFDHN, TRET, XFBGR, XGFDE, XGFDY, YTREB");
|
||||
equal(getResults(data, "Date"), "12/5/99, 1/1/00, 2000-03-01, 10/9/2000, 10/10/2000, 11/10/2000, 2 February 2007");
|
||||
});
|
||||
|
||||
test("Explicit Single Dimension Ordering", function() {
|
||||
equal(getResults(data, "Int", { ordering : "Int" }), "1, 2, 3, 4, 5, 6, 7");
|
||||
equal(getResults(data, "Float", { ordering : "Float" }), "-453, 0, 54.35, 234, 4323, 5436546");
|
||||
equal(getResults(data, "Text", { ordering : "Text" }), "GFDGFDHG, GFDHN, TRET, XFBGR, XGFDE, XGFDY, YTREB");
|
||||
equal(getResults(data, "Date", { ordering : "Date" }), "12/5/99, 1/1/00, 2000-03-01, 10/9/2000, 10/10/2000, 11/10/2000, 2 February 2007");
|
||||
});
|
||||
|
||||
test("Descending Single Dimension Ordering", function() {
|
||||
equal(getResults(data, "Int", { ordering : "Int", desc : true }), "7, 6, 5, 4, 3, 2, 1");
|
||||
equal(getResults(data, "Float", { ordering : "Float", desc : true }), "5436546, 4323, 234, 54.35, 0, -453");
|
||||
equal(getResults(data, "Text", { ordering : "Text", desc : true }), "YTREB, XGFDY, XGFDE, XFBGR, TRET, GFDHN, GFDGFDHG");
|
||||
equal(getResults(data, "Date", { ordering : "Date", desc : true }), "2 February 2007, 11/10/2000, 10/10/2000, 10/9/2000, 2000-03-01, 1/1/00, 12/5/99");
|
||||
});
|
||||
|
||||
test("List Ordering", function() {
|
||||
equal(getResults(data, "Int", { ordering : [3, 7, 4, 5, 2, 1, 6] }), "3, 7, 4, 5, 2, 1, 6");
|
||||
equal(getResults(data, "Int", { ordering : [3, 7, 4, 5, 2, 1, 6], desc : true }), "6, 1, 2, 5, 4, 7, 3");
|
||||
equal(getResults(data, "Int", { ordering : [3, 7, 4] }), "3, 7, 4, 1, 2, 5, 6");
|
||||
equal(getResults(data, "Int", { ordering : [3, 7, 4], desc : true }), "4, 7, 3, 1, 2, 5, 6");
|
||||
equal(getResults(data, "Int", { ordering : ["3", "7", "4", "5", "2", "1", "6"] }), "3, 7, 4, 5, 2, 1, 6");
|
||||
equal(getResults(data, "Int", { ordering : ["3", "7", "4", "5", "2", "1", "6"], desc : true }), "6, 1, 2, 5, 4, 7, 3");
|
||||
equal(getResults(data, "Int", { ordering : ["3", "7", "4"] }), "3, 7, 4, 1, 2, 5, 6");
|
||||
equal(getResults(data, "Int", { ordering : ["3", "7", "4"], desc : true }), "4, 7, 3, 1, 2, 5, 6");
|
||||
});
|
||||
|
||||
test("Functional Ordering", function() {
|
||||
equal(getResults(data, "Text", { ordering : function (a, b) { return a.Text.length - b.Text.length; } }), "TRET, GFDHN, XFBGR, XGFDE, XGFDY, YTREB, GFDGFDHG");
|
||||
equal(getResults(data, "Text", { ordering : function (a, b) { return a.Text.length - b.Text.length; }, desc : true }), "GFDGFDHG, GFDHN, XFBGR, XGFDE, XGFDY, YTREB, TRET");
|
||||
});
|
||||
|
||||
test("Secondary Category Ordering", function() {
|
||||
equal(getResults(data, "Int", { ordering : "Text" }), "6, 7, 1, 4, 3, 2, 5");
|
||||
equal(getResults(data, "Int", { ordering : "Text", desc : true } ), "2, 5, 3, 4, 1, 7, 6");
|
||||
equal(getResults(data, "Group", { ordering : "Float" } ), "D, A, C, B, E");
|
||||
equal(getResults(data, "Group", { ordering : "Float", desc : true } ), "E, B, C, A, D");
|
||||
});
|
||||
|
||||
test("Tertiary Category Ordering", function() {
|
||||
equal(getResults(data, "Int", [{ ordering : "Group" }, { ordering : "Float" }]), "2, 1, 3, 4, 6, 5, 7");
|
||||
equal(getResults(data, "Int", [{ ordering : "Group", desc : true}, { ordering : "Float" }]), "7, 6, 5, 3, 4, 2, 1");
|
||||
equal(getResults(data, "Int", [{ ordering : "Group"}, { ordering : "Float", desc : true }]), "1, 2, 4, 3, 5, 6, 7");
|
||||
equal(getResults(data, "Int", [{ ordering : "Group", desc : true}, { ordering : "Float", desc : true }]), "7, 5, 6, 4, 3, 1, 2");
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -1,120 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test dimple.js</title>
|
||||
<link rel="stylesheet" href="/lib/qunit/qunit-1.11.0.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
<script src="/dist/dimple.v1.js"></script>
|
||||
<script src="/lib/d3.v3.min.js"></script>
|
||||
<script src="/lib/qunit/qunit-1.11.0.js"></script>
|
||||
<script>
|
||||
|
||||
// Test data
|
||||
var 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
|
||||
function getResults(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;
|
||||
}
|
||||
|
||||
test("Single Dimension Squash", function() {
|
||||
equal(getResults(data, "Field 1"),
|
||||
"{'Field 1':'a','Field 2':['x','y','z'],'Field 3':['s','s','t'],'Field 4':['13','14','15']}");
|
||||
equal(getResults(data, "Field 2"),
|
||||
"{'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']}");
|
||||
equal(getResults(data, "Field 3"),
|
||||
"{'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']}");
|
||||
equal(getResults(data, "Field 4"),
|
||||
"{'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'}");
|
||||
|
||||
});
|
||||
|
||||
test("Double Dimension Squash", function() {
|
||||
equal(getResults(data, ["Field 1", "Field 2"]),
|
||||
"{'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']}");
|
||||
equal(getResults(data, ["Field 1", "Field 3"]),
|
||||
"{'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']}");
|
||||
equal(getResults(data, ["Field 1", "Field 4"]),
|
||||
"{'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'}");
|
||||
equal(getResults(data, ["Field 2", "Field 3"]),
|
||||
"{'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']}");
|
||||
equal(getResults(data, ["Field 2", "Field 4"]),
|
||||
"{'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'}");
|
||||
equal(getResults(data, ["Field 3", "Field 4"]),
|
||||
"{'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'}");
|
||||
});
|
||||
|
||||
test("Triple Dimension Squash", function() {
|
||||
equal(getResults(data, ["Field 1", "Field 2", "Field 3"]),
|
||||
"{'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']}");
|
||||
equal(getResults(data, ["Field 1", "Field 2", "Field 4"]),
|
||||
"{'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'}");
|
||||
equal(getResults(data, ["Field 1", "Field 3", "Field 4"]),
|
||||
"{'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'}");
|
||||
equal(getResults(data, ["Field 2", "Field 3", "Field 4"]),
|
||||
"{'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'}");
|
||||
});
|
||||
|
||||
test("Full Dimension Squash", function() {
|
||||
equal(getResults(data, ["Field 1", "Field 2", "Field 3", "Field 4"]),
|
||||
"{'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'}");
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,125 @@
|
|||
describe("_rollUp", function() {
|
||||
var data;
|
||||
var 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("Single Dimension Squash", 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("Double Dimension Squash", 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("Triple Dimension Squash", 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("Full Dimension Squash", 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'}"
|
||||
);
|
||||
});
|
||||
});
|
||||
/*
|
||||
|
||||
*/
|
|
@ -1,71 +0,0 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<title>Test dimple.js</title>
|
||||
<link rel="stylesheet" href="/lib/qunit/qunit-1.11.0.css">
|
||||
</head>
|
||||
<body>
|
||||
<div id="testDiv"></div>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
<script src="/dist/dimple.v1.js"></script>
|
||||
<script src="/lib/d3.v3.min.js"></script>
|
||||
<script src="/lib/qunit/qunit-1.11.0.js"></script>
|
||||
<script>
|
||||
|
||||
// Flatten the ordered resultset for easy comparison
|
||||
function getResults(selector, width, height) {
|
||||
var retString = "";
|
||||
return retString;
|
||||
}
|
||||
|
||||
test("Add by tag", function() {
|
||||
var svg;
|
||||
dimple.newSvg("body", 200, 100)
|
||||
svg = document.getElementsByTagName("svg");
|
||||
equal(svg.length, 1);
|
||||
equal(document.getElementsByTagName("svg")[0].parentNode.tagName, "BODY");
|
||||
equal(d3.select(svg[0]).attr("width"), "200");
|
||||
equal(d3.select(svg[0]).attr("height"), "100");
|
||||
d3.select(svg[0]).remove();
|
||||
equal(svg.length, 0);
|
||||
});
|
||||
|
||||
test("Add by id", function() {
|
||||
var svg;
|
||||
dimple.newSvg("#testDiv", 200, 100)
|
||||
svg = document.getElementsByTagName("svg");
|
||||
equal(svg.length, 1);
|
||||
equal(document.getElementsByTagName("svg")[0].parentNode.tagName, "DIV");
|
||||
equal(d3.select(svg[0]).attr("width"), "200");
|
||||
equal(d3.select(svg[0]).attr("height"), "100");
|
||||
d3.select(svg[0]).remove();
|
||||
});
|
||||
|
||||
test("Add default parameter", function() {
|
||||
var svg;
|
||||
dimple.newSvg(null, 200, 100)
|
||||
svg = document.getElementsByTagName("svg");
|
||||
equal(svg.length, 1);
|
||||
equal(document.getElementsByTagName("svg")[0].parentNode.tagName, "BODY");
|
||||
equal(d3.select(svg[0]).attr("width"), "200");
|
||||
equal(d3.select(svg[0]).attr("height"), "100");
|
||||
d3.select(svg[0]).remove();
|
||||
});
|
||||
|
||||
test("Check selection exceptions", function() {
|
||||
var svg;
|
||||
raises(function () { dimple.newSvg("random string", 200, 100) });
|
||||
try {
|
||||
dimple.newSvg("random string", 200, 100);
|
||||
} catch(e) {
|
||||
equal(e, "The 'random string' selector did not match any elements. Please prefix with '#' to select by id or '.' to select by class");
|
||||
}
|
||||
svg = document.getElementsByTagName("svg");
|
||||
equal(svg.length, 0);
|
||||
});
|
||||
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,61 @@
|
|||
describe("newSvg", function() {
|
||||
var getResults;
|
||||
|
||||
beforeEach(function() {
|
||||
getResults = function(selector, width, height) {
|
||||
var retString = "";
|
||||
return retString;
|
||||
};
|
||||
|
||||
d3.select("body").append("div").attr("id", "itDiv");
|
||||
});
|
||||
|
||||
it("should add by tag", function() {
|
||||
var svg;
|
||||
dimple.newSvg("body", 200, 100);
|
||||
svg = document.getElementsByTagName("svg");
|
||||
expect(svg.length).toEqual(1);
|
||||
expect(document.getElementsByTagName("svg")[0].parentNode.tagName).toEqual("BODY");
|
||||
expect(d3.select(svg[0]).attr("width")).toEqual("200");
|
||||
expect(d3.select(svg[0]).attr("height")).toEqual("100");
|
||||
d3.select(svg[0]).remove();
|
||||
expect(svg.length).toEqual(0);
|
||||
});
|
||||
|
||||
it("should add by id", function() {
|
||||
var svg;
|
||||
dimple.newSvg("#itDiv", 200, 100);
|
||||
svg = document.getElementsByTagName("svg");
|
||||
expect(svg.length).toEqual(1);
|
||||
expect(document.getElementsByTagName("svg")[0].parentNode.tagName).toEqual("DIV");
|
||||
expect(d3.select(svg[0]).attr("width")).toEqual("200");
|
||||
expect(d3.select(svg[0]).attr("height")).toEqual("100");
|
||||
d3.select(svg[0]).remove();
|
||||
});
|
||||
|
||||
it("should add by default parameter", function() {
|
||||
var svg;
|
||||
dimple.newSvg(null, 200, 100);
|
||||
svg = document.getElementsByTagName("svg");
|
||||
expect(svg.length).toEqual(1);
|
||||
expect(document.getElementsByTagName("svg")[0].parentNode.tagName).toEqual("BODY");
|
||||
expect(d3.select(svg[0]).attr("width")).toEqual("200");
|
||||
expect(d3.select(svg[0]).attr("height")).toEqual("100");
|
||||
d3.select(svg[0]).remove();
|
||||
});
|
||||
|
||||
it("should check selection exceptions", function() {
|
||||
var svg;
|
||||
var random = function() {
|
||||
dimple.newSvg("random string", 200, 100);
|
||||
};
|
||||
expect(random).toThrow("The 'random string' selector did not match any elements. Please prefix with '#' to select by id or '.' to select by class");
|
||||
svg = document.getElementsByTagName("svg");
|
||||
expect(svg.length).toEqual(0);
|
||||
});
|
||||
});
|
||||
/*
|
||||
|
||||
|
||||
|
||||
*/
|
Loading…
Reference in New Issue