UNPKG

dojox

Version:

Dojo eXtensions, a rollup of many useful sub-projects and varying states of maturity – from very stable and robust, to alpha and experimental. See individual projects contain README files for details.

167 lines (156 loc) 5.01 kB
dojo.provide("dojox.data.tests.performance.CsvStore"); dojo.require("dojox.data.CsvStore"); dojo.require("dojo.data.util.sorter"); dojox.data.tests.performance.CsvStore.getData = function(size){ // summary: // This function generates a psuedorandom dataset collected // from some templated entries. // returns: // A 2000 'row' CSV dataset. var header = "Title, Year, Producer\n"; var templateData = [ "City of God, 2002, Katia Lund\n", "Rain,, Christine Jeffs\n", "2001: A Space Odyssey, 1968, Stanley Kubrick\n", '"This is a ""fake"" movie title", 1957, Sidney Lumet\n', "Alien, 1979 , Ridley Scott\n", '"The Sequel to ""Dances With Wolves.""", 1982, Ridley Scott\n', '"Caine Mutiny, The", 1954, "Dymtryk ""the King"", Edward"\n' ]; var data = header; var i; for(i = 0; i < size; i++){ var idx =Math.floor(Math.random()*7); data += templateData[idx]; } return data; }; doh.register("dojox.data.tests.performance.CsvStore",[ { name: "Initial Parse and First Fetch", testType: "perf", trialDuration: 100, trialDelay: 50, trialIterations: 50, runTest: function(){ store = new dojox.data.CsvStore({ data: dojox.data.tests.performance.CsvStore.getData(2000) }); var def = new doh.Deferred(); var complete = function(items, request){ try{ doh.assertEqual(2000, items.length); def.callback(true); }catch(e){ def.errback(e); } }; var err = function(error, request){ def.errback(error); }; store.fetch({onComplete: complete, onError: err}); return def; } }, { name: "Fetch All Data", testType: "perf", trialDuration: 100, trialDelay: 50, trialIterations: 50, setUp: function(){ dojox.data.tests.performance.CsvStore.store = new dojox.data.CsvStore({ data: dojox.data.tests.performance.CsvStore.getData(2000) }); //Since the store is fed this way, it prettymuch acts sync //and we can force a fill data load and parse. //This gets the parse time out of the fetch. dojox.data.tests.performance.CsvStore.store.fetch({}); }, tearDown: function(){ delete dojox.data.tests.performance.CsvStore.store; }, runTest: function(){ var store = dojox.data.tests.performance.CsvStore.store; var def = new doh.Deferred(); var complete = function(items, request){ try{ doh.assertEqual(2000, items.length); def.callback(true); }catch(e){ def.errback(e); } }; var err = function(error, request){ def.errback(error); }; store.fetch({onComplete: complete, onError: err}); if(!dojo.isSafari){ //Well, realistically this is all sync so we don't *have* to //pass back a deferred. I think safari is blowing stack again. //Need to look more at DOH once more. return def; } return null; } }, { name: "getValue", testType: "perf", trialDuration: 100, trialDelay: 50, trialIterations: 50, setUp: function(){ dojox.data.tests.performance.CsvStore.store = new dojox.data.CsvStore({ data: dojox.data.tests.performance.CsvStore.getData(2000) }); //Since the store is fed this way, it prettymuch acts sync //and we can force a fill data load and parse. //This gets the parse time out of the fetch. dojox.data.tests.performance.CsvStore.store.fetch({}); }, tearDown: function(){ delete dojox.data.tests.performance.CsvStore.store; }, runTest: function(){ //Yes, this is bad, I'm accessing internal data, but I don't care //about the fetch time, only the getValue processing. So, //I just gab the first item. var value = dojox.data.tests.performance.CsvStore.store.getValue( dojox.data.tests.performance.CsvStore.store._arrayOfAllItems[0], "Title"); } }, { name: "sort (500 rows)", testType: "perf", trialDuration: 100, trialDelay: 50, trialIterations: 50, setUp: function(){ dojox.data.tests.performance.CsvStore.store = new dojox.data.CsvStore({ data: dojox.data.tests.performance.CsvStore.getData(500) }); //Since the store is fed this way, it prettymuch acts sync //and we can force a fill data load and parse. //This gets the parse time out of the fetch. dojox.data.tests.performance.CsvStore.store.fetch(); }, tearDown: function(){ delete dojox.data.tests.performance.CsvStore.store; }, runTest: function(){ //Yes, this is bad, I'm accessing internal data, but I don't care //about the fetch time, only the getValue processing. So, //I just gab the first item. var sort = [{attribute: "Title"}]; //Create a clone array of all the data. Yes, this accesses internals, but my goal here //is to test the sorter code with respect to the store. var data = dojox.data.tests.performance.CsvStore.store._arrayOfAllItems.slice(0, dojox.data.tests.performance.CsvStore.store._arrayOfAllItems.length); //Sort it using the generic sorter.. data.sort(dojo.data.util.sorter.createSortFunction(sort, dojox.data.tests.performance.CsvStore.store)); } } ]);