Merge pull request #42 from hxu/karma

Setup Karma testing framework
master
John Kiernander 2014-01-20 02:00:03 -08:00
commit 2e3a06aeb3
9 changed files with 326 additions and 298 deletions

3
.gitignore vendored
View File

@ -3,4 +3,5 @@ node_modules
.idea
*.komodo*
help
image_creator
image_creator
tmp

View File

@ -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']);
};

View File

@ -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"
}
}

View File

@ -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");
});
});

View File

@ -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>

View File

@ -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>

View File

@ -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'}"
);
});
});
/*
*/

View File

@ -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>

View File

@ -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);
});
});
/*
*/