recordset.html revision b41c27a66cb2271249d8117d3d5395ab17594f86
18f4388f9909487b198704745e4b61f884df1e81Dav Glass<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
18f4388f9909487b198704745e4b61f884df1e81Dav Glass<script type="text/javascript" src="/build/yui/yui-debug.js"></script>
18f4388f9909487b198704745e4b61f884df1e81Dav Glass<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>
18f4388f9909487b198704745e4b61f884df1e81Dav Glass(function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass filter: "debug",
18f4388f9909487b198704745e4b61f884df1e81Dav Glass logInclude:{"TestRunner":true},
18f4388f9909487b198704745e4b61f884df1e81Dav Glass useConsole: true
18f4388f9909487b198704745e4b61f884df1e81Dav Glass }).use("console", "test", "dump", "recordset", function(Y) {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass // Set up the page
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var ASSERT = Y.Assert,
18f4388f9909487b198704745e4b61f884df1e81Dav Glass ARRAYASSERT = Y.ArrayAssert,
18f4388f9909487b198704745e4b61f884df1e81Dav Glass BTNRUN = Y.get("#btnRun");
18f4388f9909487b198704745e4b61f884df1e81Dav Glass BTNRUN.set("disabled", false);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.on("click", function(e){
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var myConsole = new Y.Console().render();
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var testBasic = new Y.Test.Case({
18f4388f9909487b198704745e4b61f884df1e81Dav Glass name: "API Tests",
18f4388f9909487b198704745e4b61f884df1e81Dav Glass initialData: [{a:3, b:2, c:1}, {a:9, b:8, c:7}, {a:1, b:2, c:3}],
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass // Setup and tear down
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass setUp : function () {
5c5f5643ee2dfbf7de92a5beb9d3de882cebdbf9Dav Glass //create recordset
cf8d258dad6b67aaddce8ebdc54e9ae70e7b2b9cDav Glass this.rs = new Y.Recordset({records:this.initialData});
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //Some Ways to access recordset properties
18f4388f9909487b198704745e4b61f884df1e81Dav Glass tearDown : function () {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass // Event Helpers
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass changeTest: function(i) {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass this.rs.on('change', function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass emptyTest: function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var flag = false;
18f4388f9909487b198704745e4b61f884df1e81Dav Glass this.rs.on('empty', function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass flag = true;
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass // Get Records
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass testGetRecords: function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var newRecord,newRecord1, newRecord2, id;
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //Single Record
18f4388f9909487b198704745e4b61f884df1e81Dav Glass newRecord2 = this.rs.getRecord(1);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(newRecord1.getValue(), this.initialData[1]);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(newRecord1, newRecord2);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //Multiple Records
18f4388f9909487b198704745e4b61f884df1e81Dav Glass newRecord = this.rs.getRecordsByIndex(1,2);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(newRecord[0].getValue(), this.initialData[1]);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(newRecord[1].getValue(), this.initialData[2]);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass id = this.rs.getRecordByIndex(0).getValue('id');
18f4388f9909487b198704745e4b61f884df1e81Dav Glass newRecord = this.rs.getRecord(id);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(newRecord, this.rs.getRecordByIndex(0));
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass // Add Records
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //---------------------------------------------
18f4388f9909487b198704745e4b61f884df1e81Dav Glass testAddSingleRecordToEnd: function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var recToAdd = {a:'8', b:'9', c:'10'}, retval;
18f4388f9909487b198704745e4b61f884df1e81Dav Glass retval = this.rs.add(recToAdd);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //Test Recordset Length
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.Assert.areEqual(4, this.rs.get('records').length, "Array lengths not equal.");
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //Assert on last object
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //This is indirectly checking to make sure that the record that got added has the identical data as the object literal that was passed in.
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(recToAdd, this.rs.getRecordByIndex(3).getValue());
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(retval.getRecordByIndex(3).getValue(3), recToAdd);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass testAddSingleRecordToIndex: function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var recToAdd, i=2;
18f4388f9909487b198704745e4b61f884df1e81Dav Glass recToAdd = {a:'8', b:'9', c:'10'};
18f4388f9909487b198704745e4b61f884df1e81Dav Glass retval = this.rs.add(recToAdd,i);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.Assert.areEqual(recToAdd, this.rs.getRecordByIndex(i).getValue());
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //assertion with output
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(retval.getRecordByIndex(i).getValue(), recToAdd);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass testAddMultipleRecordsToEnd: function() {
18f4388f9909487b198704745e4b61f884df1e81Dav Glass var recsToAdd = [{a:'11', b:'22', c:'33'}, {a:'44', b:'55', c:'66'}];
18f4388f9909487b198704745e4b61f884df1e81Dav Glass retval = this.rs.add(recsToAdd);
18f4388f9909487b198704745e4b61f884df1e81Dav Glass //Assertions with recordset
18f4388f9909487b198704745e4b61f884df1e81Dav Glass Y.ObjectAssert.areEqual(recsToAdd[0], this.rs.getRecordByIndex(3).getValue());
this.changeTest(3);
retval = this.rs.add(recsToAdd, i);
this.changeTest(i);
this.rs.on('remove', function(e) {
this.changeTest(2);
this.changeTest(1);
this.rs.on('remove', function(e) {
this.rs.remove(1);
this.rs.on('remove', function(e) {
this.changeTest(1);
this.rs.remove(1,2);
this.emptyTest(0);
retval = this.rs.getValuesByKey(key);
Y.Assert.isUndefined(retval[i]);
newRecord = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
oldRecord = this.rs.getRecordByIndex(index);
this.rs.on('update', function(e) {
Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record is != to old record');
this.rs.update(newRecord, index);
oldRecord = this.rs.getRecordByIndex(index);
a = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
b = new Y.Record({data:{a:'newD', b:'newE', c:'newF'}});
newRecords.push(a);
newRecords.push(b);
this.rs.on('update', function(e) {
Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record is != to old record');
this.rs.update(newRecords, index);
newRecord = new Y.Record({data: {a:'newG', b:'newH', c:'newI'}});
oldRecord = this.rs.getRecordByIndex(index);
this.rs.on('update', function(e) {
Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record is != to old record');
this.rs.update(newRecord, index, true);
oldRecords = this.rs.getRecordsByIndex(index,3);
//console.log(oldRecords);
a = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
b = new Y.Record({data:{a:'newD', b:'newE', c:'newF'}});
c = new Y.Record({data:{a:'newG', b:'newH', c:'newI'}});
newRecords.push(a);
newRecords.push(b);
newRecords.push(c);
this.rs.on('update', function(e) {
//Y.ObjectAssert.areEqual(oldRecords[i].getValue(), e.data.overwritten[i].getValue(), 'Overwritten record is != to old record');
Y.ObjectAssert.areEqual(oData, e.data.updated[0].getValue(), 'Updated record != equal to new record');
Y.ObjectAssert.areEqual(oldRecord, e.data.overwritten[0], 'Overwritten record != equal to old record');
newRecord = new Y.Record({data:o});
oldRecord = this.rs.getRecordByIndex(index);
this.rs.on('update', function(e) {
this.rs.update(newRecord, index);
oldRecord = this.rs.getRecordsByIndex(index,2);
a = new Y.Record({data:{a:'newA', b:'newB', c:'newC'}});
b = new Y.Record({data:{a:'newD', b:'newE', c:'newF'}});
newRecords.push(a);
newRecords.push(b);
this.rs.on('update', function(e) {
this.rs.update(newRecords, index);
var hashTable = this.rs.get('table');
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(0).get('id')], this.rs.getRecordByIndex(0));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(1).get('id')], this.rs.getRecordByIndex(1));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(2).get('id')], this.rs.getRecordByIndex(2));
this.rs.add({a:'hello', b:'hey', c:'yo!'});
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(0).get('id')], this.rs.getRecordByIndex(0));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(1).get('id')], this.rs.getRecordByIndex(1));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(2).get('id')], this.rs.getRecordByIndex(2));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(3).get('id')], this.rs.getRecordByIndex(3));
this.rs.remove(1);
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(0).get('id')], this.rs.getRecordByIndex(0));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(1).get('id')], this.rs.getRecordByIndex(1));
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(2).get('id')], this.rs.getRecordByIndex(2));
this.rs.remove(0,2);
Y.ObjectAssert.areEqual(hashTable[this.rs.getRecordByIndex(0).get('id')], this.rs.getRecordByIndex(0));
console.log(hashTable);
this.rs.sort.sort('a',false);
this.rs.sort.sort('c',true);
this.rs.sort.sort('b',true);
this.rs.sort.sort('a',false);
this.rs.add({a:6,b:5,c:8});
this.rs.add([d,c,b,a]);
this.rs.add([d,c,b,a]);
this.rs.sort.sort('a',true);
//This is just a copy of Y.ArraySort.compare
if(!Y.Lang.isValue(a)) {
if(!Y.Lang.isValue(b)) {
else if(!Y.Lang.isValue(b)) {
if(Y.Lang.isString(a)) {
if(Y.Lang.isString(b)) {
this.rs.add([a,b,c,d]);
this.rs.sort.sort('a',false,customsort);
this.rs.each(function() {
recs[i] = this.getValue();
Y.ObjectAssert.areEqual({a:3, b:2, c:1}, recs[0]);
Y.ObjectAssert.areEqual({a:9, b:8, c:7}, recs[1]);
Y.ObjectAssert.areEqual({a:1, b:2, c:3}, recs[2]);
this.rs.some(function() {
v = this.getValue();
if (v.a !== 1) {
Y.ObjectAssert.areEqual({a:3, b:2, c:1}, recs[0]);
Y.ObjectAssert.areEqual({a:9, b:8, c:7}, recs[1]);
if (item.getValue('b') === 2) {
rs = this.rs.filter.filter(validator);
if (item.getValue('c') === 2) {
rs = this.rs.filter.filter(validator);
rs = this.rs.filter.filter('b',2);
if (item.getValue('b') === 2) {
rs = this.rs.filter.reject(validator);
if (item.getValue('c') === 2) {
rs = this.rs.filter.reject(validator);
//Map is tested on the actual array because it returns an array of booleans typically (atleast that's the use case I can think of)
if (item.getValue('b') === 2) {
Y.Assert.areEqual(true, rs[0]);
Y.Assert.areEqual(false, rs[1]);
Y.Assert.areEqual(true, rs[2]);
var hashA = this.rs.indexer.createTable('a');
var hashTables = this.rs.indexer.get('hashTables');
Y.ObjectAssert.areEqual(hashA[3].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashA[9].getValue(), {a:9, b:8, c:7});
Y.ObjectAssert.areEqual(hashA[1].getValue(), {a:1, b:2, c:3});
var hashB = this.rs.indexer.createTable('b');
Y.ObjectAssert.areEqual(hashB[2].getValue(), {a:1, b:2, c:3});
Y.ObjectAssert.areEqual(hashB[8].getValue(), {a:9, b:8, c:7});
var hashA = this.rs.indexer.createTable('a'),
hashC = this.rs.indexer.createTable('c'),
hashTables = this.rs.indexer.get('hashTables');
this.rs.add({a:'adding', b:'this', c:'record'});
Y.ObjectAssert.areEqual(hashA[3].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashA[9].getValue(), {a:9, b:8, c:7});
Y.ObjectAssert.areEqual(hashA[1].getValue(), {a:1, b:2, c:3});
Y.ObjectAssert.areEqual(hashA['adding'].getValue(), {a:'adding', b:'this', c:'record'});
Y.ObjectAssert.areEqual(hashC[1].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashC[7].getValue(), {a:9, b:8, c:7});
Y.ObjectAssert.areEqual(hashC[3].getValue(), {a:1, b:2, c:3});
Y.ObjectAssert.areEqual(hashC['record'].getValue(), {a:'adding', b:'this', c:'record'});
this.rs.add({a:'another', b:'new', c:'record'}, 0);
Y.ObjectAssert.areEqual(hashA[3].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashA[9].getValue(), {a:9, b:8, c:7});
Y.ObjectAssert.areEqual(hashA[1].getValue(), {a:1, b:2, c:3});
Y.ObjectAssert.areEqual(hashA['adding'].getValue(), {a:'adding', b:'this', c:'record'});
Y.ObjectAssert.areEqual(hashA['another'].getValue(), {a:'another', b:'new', c:'record'});
Y.ObjectAssert.areEqual(hashC[1].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashC[7].getValue(), {a:9, b:8, c:7});
Y.ObjectAssert.areEqual(hashC[3].getValue(), {a:1, b:2, c:3});
Y.ObjectAssert.areEqual(hashC['record'].getValue(), {a:'another', b:'new', c:'record'});
var hashA = this.rs.indexer.createTable('a'),
hashC = this.rs.indexer.createTable('c'),
hashTables = this.rs.indexer.get('hashTables');
this.rs.remove(2);
Y.ObjectAssert.areEqual(hashA[3].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashA[9].getValue(), {a:9, b:8, c:7});
Y.ObjectAssert.areEqual(hashC[1].getValue(), {a:3, b:2, c:1});
Y.ObjectAssert.areEqual(hashC[7].getValue(), {a:9, b:8, c:7});
this.rs.add({a:1, b:2, c:3});
this.rs.remove(0,2);
Y.ObjectAssert.areEqual(hashA[1].getValue(), {a:1, b:2, c:3});
Y.ObjectAssert.areEqual(hashC[3].getValue(), {a:1, b:2, c:3});
// var hashA = this.rs.indexer.createTable('a'),
// hashC = this.rs.indexer.createTable('c'),
// hashTables = this.rs.indexer.get('hashTables');
// // this.rs.update({a:'adding', b:'this', c:'record'}, 1);
// // Y.ObjectAssert.areEqual(hashA[3].getValue(), {a:3, b:2, c:1});
// // Y.ObjectAssert.areEqual(hashA[1].getValue(), {a:1, b:2, c:3});
// // Y.ObjectAssert.areEqual(hashA['adding'].getValue(), {a:'adding', b:'this', c:'record'});
// // Y.ObjectAssert.areEqual(hashC[1].getValue(), {a:3, b:2, c:1});
// // Y.ObjectAssert.areEqual(hashC[3].getValue(), {a:1, b:2, c:3});
// // Y.ObjectAssert.areEqual(hashC['record'].getValue(), {a:'adding', b:'this', c:'record'});
// this.rs.update([{a:'adding', b:'this', c:'record'}, {a:'heres', b:'another', c:'one'}, {a:'three', b:'in', c:'a row'}], 1);
// Y.ObjectAssert.areEqual(hashA[3].getValue(), {a:3, b:2, c:1});
// Y.ObjectAssert.areEqual(hashA['adding'].getValue(), {a:'adding', b:'this', c:'record'});
// Y.ObjectAssert.areEqual(hashA['heres'].getValue(), {a:'heres', b:'another', c:'one'});
// Y.ObjectAssert.areEqual(hashA['three'].getValue(), {a:'three', b:'in', c:'a row'});
// Y.ObjectAssert.areEqual(hashC[1].getValue(), {a:3, b:2, c:1});
// Y.ObjectAssert.areEqual(hashC['record'].getValue(), {a:'adding', b:'this', c:'record'});
// Y.ObjectAssert.areEqual(hashA['one'].getValue(), {a:'heres', b:'another', c:'one'});
// Y.ObjectAssert.areEqual(hashA['a row'].getValue(), {a:'three', b:'in', c:'a row'});
var suite = new Y.Test.Suite({name:"Recordset Test Suite"});
suite.add(testBasic);
Y.Test.Runner.setName("Recordset Test Runner");
Y.Test.Runner.add(suite);