(function() {
var gCount = -1;
var Dom=YAHOO.util.Dom,
Assert=YAHOO.util.Assert,
ObjectAssert=YAHOO.util.ObjectAssert,
ArrayAssert=YAHOO.util.ArrayAssert,
DateAssert=YAHOO.util.DateAssert,
UserAction=YAHOO.util.UserAction,
TestCase = YAHOO.tool.TestCase,
TestLogger = YAHOO.tool.TestLogger,
TestRunner = YAHOO.tool.TestRunner,
TestSuite = YAHOO.tool.TestSuite,
DataSource = YAHOO.util.DataSource,
DataTable = YAHOO.widget.DataTable,
ColumnSet = YAHOO.widget.ColumnSet,
RecordSet = YAHOO.widget.RecordSet;
/**
*
*
* Base DataTable test template. Sets up values for a DataTable instance.
*
*
*/
var dtBaseTemplate = {
name: "DataTable Base Tests",
dsData: [
{a:"0a",b:"0b",c:"0c"},
{a:"1a",b:"1b",c:"1c"},
{a:"2a",b:"2b",c:"2c"},
{a:"3a",b:"3b",c:"3c"}
],
dsConfig: {
responseType:YAHOO.util.DataSource.TYPE_JSARRAY,
responseSchema:{fields:["a","b","c"]}
},
columns: [{key:"a"},{key:"b"},{key:"c"}]
};
/**
*
*
* Base DataTable test case.
*
*
*/
function DataTableTestCase(template) {
DataTableTestCase.superclass.constructor.call(this, template);
};
YAHOO.lang.extend(DataTableTestCase, TestCase);
DataTableTestCase.prototype.setUp = function() {
// Create container anew
this.container = document.createElement("div");
///this.container.id = "testDTContainer"; // Is this necessary?
document.body.appendChild(this.container);
// Create DataSource anew
this.datasource = new YAHOO.util.DataSource(this.dsData, this.dsConfig);
};
DataTableTestCase.prototype.tearDown = function() {
// Destroy DataTable
this.datatable.destroy();
this.datatable = null;
// Destroy container
if(this.container !== null) {
YAHOO.util.Event.purgeElement(this.container, true);
document.body.removeChild(this.container);
this.container = null;
}
// TODO: need a destroy method
this.datasource = null;
};
DataTableTestCase.prototype.createInstance = function(oDT, oConfig) {
oDT = oDT || DataTable;
this.datatable = new oDT(this.container, this.columns, this.datasource, oConfig);
gCount++;
return this.datatable;
};
/**
*
*
* Tests RecordSet APIs.
*
*
*/
var rsRecordSetTemplate = YAHOO.lang.merge(dtBaseTemplate, {
name: "DataTable RecordSet Tests",
testGetRecordSet: function() {
var dt = this.createInstance();
var rs = dt.getRecordSet();
Assert.isInstanceOf(RecordSet, rs, "Expected a RecordSet");
},
testGetRecord: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var rs = dt.getRecordSet();
var oRecord = rs._records[3];
var sRecordId = oRecord.getId();
var el = dt.getTbodyEl().rows[3];
var oTestRecord = dt.getRecord(el);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by el reference");
var el = dt.getTbodyEl().rows[3].cells[2];
oTestRecord = dt.getRecord(el);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by el reference child");
el = Dom.get(oTestRecord.getId());
oTestRecord = null;
oTestRecord = dt.getRecord(el);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by DOM ID");
oTestRecord = dt.getRecord(3);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by position index");
oTestRecord = dt.getRecord(sRecordId);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record ID");
oTestRecord = dt.getRecord(oRecord);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record instance");
oTestRecord = rs.getRecord(3);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by position index (RecordSet method)");
oTestRecord = rs.getRecord(sRecordId);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record ID (RecordSet method)");
oTestRecord = rs.getRecord(oRecord);
Assert.areSame(oRecord, oTestRecord, "Expected to get Record by Record instance (RecordSet method)");
//});
},
testGetInvalidRecord: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var rs = dt.getRecordSet();
var oRecord = rs._records[3];
dt.deleteRow(3);
oTestRecord = dt.getRecord(oRecord);
Assert.areSame(null, oTestRecord, "Expected not to get Record by invalid Record instance");
oTestRecord = rs.getRecord(oRecord);
Assert.areSame(null, oTestRecord, "Expected not to get Record by invalid Record instance (RecordSet method)");
//});
},
testUpdateKey: function() {
var dt = this.createInstance();
//dt.subscribe("initEvent", function() {
var rs = dt.getRecordSet();
var oTestRecord = rs._records[0];
rs.updateKey(0, "b", "xxx");
Assert.areSame("xxx", oTestRecord.getData("b"), "Failed to update key b of Record 0 by position index");
rs.updateKey(oTestRecord, "b", "zzz");
Assert.areSame("zzz", oTestRecord.getData("b"), "Failed to update key b of Record 0 by instance");
rs.updateKey(oTestRecord.getId(), "b", "yyy");
Assert.areSame("yyy", oTestRecord.getData("b"), "Failed to update key b of Record 0 by ID");
//});
}
//TODO: More RecordSet APIs
});
var rsRecordSetTest = new DataTableTestCase(rsRecordSetTemplate);
/**
*
*
* Runs tests.
*
*
*/
YAHOO.util.Event.addListener(window, "load", function() {
var recordsetsuite = new TestSuite("RecordSet Test Suite");
recordsetsuite.add(rsRecordSetTest);
TestRunner.add(recordsetsuite);
});
})();