364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith<!DOCTYPE HTML>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<html>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<head>
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith<meta charset="utf-8">
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<title>Datatable Tests</title>
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith<link rel="stylesheet" type="text/css" href="/build/cssbase/base-min.css">
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith<script src="/build/yui/yui-debug.js"></script>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<style>
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith html {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith font-family: sans-serif;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith font-size: smaller;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith .message {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith padding: 5px;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith font-size:120%;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith background: #FFFCB6;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith border:1px solid #C9C675;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith #results dt {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith font-weight:bold;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith padding:3px;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith display:block;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith #results dd {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith font-weight:normal;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith color:grey;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith #results dd span {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith color: red;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith font-weight:bold;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra</style>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra</head>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<body class="yui3-skin-sam">
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h1>Datatable Tests</h1>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra<p>To test the performance of various datatables, look at the following sections in the code:
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith <pre>
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra//large or small dataset.
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitradata: large,
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra//---------------------------------------------
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra// Special instructions
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra//---------------------------------------------
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra_should: {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith ignore: {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //ignore following tests (good to do if you are doing a large dataset)
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testBaseDatatable: true,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXYDatatable: true,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXDatatable: true,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testYDatatable_FixedCol: true,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testYDatatable_AutoCol: true,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXYDatatable_BigHeaders: false
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra}
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith </pre>
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Toggle <code>data</code> from <code>large</code> to <code>small</code> to get a different sized dataset. The <code>ignore</code> object determines which table to load. If testing performance, it is recommended that you only enable 1 table at a time.</p>
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith <hr>
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra<p><input type="button" value="Run Tests" id="btnRun" disabled=true></p>
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith <hr>
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra<div id="results">
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith <h3>Test Results</h3>
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra</div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h3>Base Datatable</h3>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<div id="base"></div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h3>Scrolling XY Datatable (Set columnwidths)</h3>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<P>A general XY scrolling datatable. Column widths are provided for all columns, table width and height is provided.</p>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<div id="scrolling-xy"></div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h3>Scrolling X Datatable (Auto Columns)</h3>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<p>A X-scrolling datatable. Column A and B have specified widths. The rest of the columns do not have any widths specified. Only a height of 200px is specified.</p>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<div id="scrolling-x"></div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h3>Scrolling Y Datatable</h3>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<p>A Y-scrolling datatable. Column widths are provided for all columns, table height is provided. Since all cols have specified width, you may see this table overflowing past its container div (the blue div in the background). </p>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<div id="scrolling-y"></div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h3>Scrolling Datatable with no ColumnWidth</h3>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<p>A Y-scrolling datatable, where only the first 2 columns have a specified width. Only the table height is provided.</p>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<div id="scrolling-colwidth"></div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<h3>Scrolling Datatable with Big Headers</h3>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<p>A XY-scrolling datatable, where only the first 2 columns have a specified width. Table height and width is provided. The table headers are of larger width than the table contents</p>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<div id="scrolling-bigcols"></div>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
76c9fe1d50dff2736aa35ed3e81acaf8cdf48588Tilo Mitra<h3>Scrolling Datatable with no width or height set</h3>
76c9fe1d50dff2736aa35ed3e81acaf8cdf48588Tilo Mitra<p>A scrolling datatable with no width or height values passed in will result in a base datatable being created with auto width and height.</p>
76c9fe1d50dff2736aa35ed3e81acaf8cdf48588Tilo Mitra<div id="scrolling-noscroll"></div>
76c9fe1d50dff2736aa35ed3e81acaf8cdf48588Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra<script type="text/javascript">
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra(function() {
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra YUI({
c77d701a41f1b77424b988c2e63f2a8e6829c7e6Luke Smith filter: (window.location.search.match(/[?&]filter=([^&]+)/) || [])[1] || 'min',
c77d701a41f1b77424b988c2e63f2a8e6829c7e6Luke Smith allowRollup: false,
c77d701a41f1b77424b988c2e63f2a8e6829c7e6Luke Smith useBrowserConsole: false
31dc38d003f727e19c61510100f8418658af15d5Tilo Mitra }).use("console", "test", "dump", "datatable", "profiler","node","json-parse", function(Y) {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra // Set up the page
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra var ASSERT = Y.Assert,
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra ARRAYASSERT = Y.ArrayAssert,
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra BTNRUN = Y.one("#btnRun"),
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith TestRunner = Y.Test.Runner;
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra BTNRUN.set("disabled", false);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith TestRunner.subscribe(TestRunner.TEST_CASE_COMPLETE_EVENT, testCompleted);
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra Y.on("click", function(e){
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith TestRunner.run();
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith BTNRUN.set("value", 'Running...');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith BTNRUN.set("disabled", true);
98c7a407991cdb0caa6bce97544759d7d56b39e0Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra }, BTNRUN);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith function testCompleted() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith BTNRUN.set("value", 'Test Completed');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log('Test Completed');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra var myConsole = new Y.Console().render();
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //large data set
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var large = [];
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith for (var i=0; i<500; i++) {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith large[i] = {a: i+1, b:i+2, c:i+3, d: i+4, e: i+5, f: i+6, g:i+7};
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //small data set
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var small = [{a:3, b:2, c:1, d:6, e:7, f:2, g:0}, {a:9, b:8, c:7, d:6, e:7, f:2, g:0}, {a:1, b:2, c:3, d:6, e:7, f:2, g:0},
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {a:3, b:2, c:1, d:6, e:7, f:2, g:0}, {a:9, b:8, c:7, d:6, e:7, f:2, g:0}, {a:1, b:2, c:3, d:6, e:7, f:2, g:0},
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {a:3, b:2, c:1, d:6, e:7, f:2, g:0}, {a:9, b:8, c:7, d:6, e:7, f:2, g:0}, {a:1, b:2, c:3, d:6, e:7, f:2, g:0},
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {a:3, b:2, c:1, d:6, e:7, f:2, g:0}, {a:9, b:8, c:7, d:6, e:7, f:2, g:0}, {a:1, b:2, c:3, d:6, e:7, f:2, g:0}];
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra var testBasic = new Y.Test.Case({
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra name: "API Tests",
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith nestedcols: [
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {label:"Grandparent", children:[
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {key: "a"},
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {label:"Parent", children: [
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {key:"b"},
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith {key:"c"}
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith ]}
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith ]}
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith ],
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith cols: [{key:"a", field:"a", label:"AAA", sortable:true, className: ["oneClass", "anotherClass"], width:'75px'},{key:"b", abbr:"bbb", className:"myClass", width: '120px'},{key:"c", width:'75px'},{key:"d", width:'150px'},{key:"3", width:'75px'},{key:"f", width:'150px'},{key:"g", width:'75px'}],
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith cols2: [{key:"a", field:"a", label:"AAA", sortable:true, className: ["oneClass", "anotherClass"], width:'75px'},{key:"b", abbr:"bbb", className:"myClass", width:'75px'},{key:"c"},{key:"d"},{key:"e"},{key:"f"},{key:"g"}],
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith cols3: [{key:"a", field:"a", label:"Lorem Ipsum Dolor SIt Amet", sortable:true, className: ["oneClass", "anotherClass"], width:'5px'},{key:"b", abbr:"Lorem Ipsum Dolor SIt Amet", className:"myClass", width:'75px'},{key:"Lorem Ipsum Dolor SIt Amet"},{key:"Lorem Ipsum Dolor SIt Amet"},{key:"Lorem Ipsum Dolor SIt Amet"},{key:"Lorem Ipsum Dolor SIt Amet"},{key:"Lorem Ipsum Dolor SIt Amet"}],
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //large or small dataset.
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith data: small,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //---------------------------------------------
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith // Special instructions
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //---------------------------------------------
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith _should: {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith ignore: {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //ignore following tests (good to do if you are doing a large dataset)
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testBaseDatatable: true,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXYDatatable: false,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXDatatable: false,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testYDatatable_FixedCol: false,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testYDatatable_AutoCol: false,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXYDatatable_BigHeaders: false,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testNoScrollDatatablekey: false
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith }
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //---------------------------------------------
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith // Setup and tear down
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //---------------------------------------------
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith setUp : function () {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //create recordset
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //this.rs = new Y.Recordset({records:this.initialData});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //Some Ways to access recordset properties
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //Y.log(rs.getRecordByIndex(0).getValue('a'));
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //Y.log(rs.get('records').length);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith tearDown : function () {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith delete this.dt;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith /////////////////////////////////////////////////////////////////////////////
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith // Displaying Report
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith /////////////////////////////////////////////////////////////////////////////
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith displayReport: function(data) {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var dl = Y.Node.create('<dl></dl>'),
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith results = Y.one('#results');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.each(data, function(v,k,o) {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var dt = Y.Node.create('<dt>'+k+'</dt>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var dd = Y.Node.create('<dd>' + v.calls + ' call(s) at ' + v.avg + ' ms/call = <span>' + Math.round(v.avg*v.calls) + '</span> ms total</dd>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith dt.appendChild(dd);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith dl.appendChild(dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith });
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith results.appendChild(dl);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith reportParser: function(report) {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith return (report.calls > 0 && report.avg > 0.2);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith /////////////////////////////////////////////////////////////////////////////
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith // Tests
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith //
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith /////////////////////////////////////////////////////////////////////////////
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testBaseDatatable: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = "#base";
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtBase');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols, recordset:this.data, caption:"Base"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtBase');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtBase') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, "time");
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXYDatatable: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = '#scrolling-xy';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtXY');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols, recordset:this.data, tdValueTemplate:"plug then render {value}", caption: "ScrollingDataTable"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.plug(Y.Plugin.DataTableScroll, {width:"200px", height:"300px"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtXY');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtXY') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, "time");
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXDatatable: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = "#scrolling-x";
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtX');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols2, recordset:this.data, caption:"ScrollingDataTable"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.plug(Y.Plugin.DataTableScroll, {width:"150px"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtX');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtX') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, "time");
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testYDatatable_FixedCol: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = "#scrolling-y";
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtY1');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols, recordset:this.data, tdValueTemplate:"plug then render {value}", caption:"ScrollingDataTable"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.plug(Y.Plugin.DataTableScroll, {height:"300px"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtY1');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtY1') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, 'time');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testYDatatable_AutoCol: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = "#scrolling-colwidth";
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtY2');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols2, recordset:this.data, tdValueTemplate:"plug then render {value}", caption:"ScrollingDataTable"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.plug(Y.Plugin.DataTableScroll, {height:"250px"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtY2');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtY2') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, 'time');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testXYDatatable_BigHeaders: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = "#scrolling-bigcols";
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtHeaders');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols3, recordset:this.data, tdValueTemplate:"plug then render {value}", caption:"ScrollingDataTable"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.plug(Y.Plugin.DataTableScroll, {height:"250px", width:"400px"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtHeaders');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtHeaders') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, 'time');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith testNoScrollDatatable: function() {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var sel = "#scrolling-noscroll";
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.start('dtNoScroll');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt = new Y.DataTable.Base({columnset:this.cols3, recordset:this.data, tdValueTemplate:"plug then render {value}", caption:"ScrollingDataTable"});
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.registerObject('dt', this.dt);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.plug(Y.Plugin.DataTableScroll);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.render(sel);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.stop('dtNoScroll');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var msg = Y.Profiler.getAverage('dtNoScroll') + 'ms taken to display';
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var report = Y.Profiler.getFullReport(this.reportParser);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.displayReport(report);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Profiler.unregisterObject('dt');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.log(msg, 'time');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.one(sel).appendChild('<p class="message">'+msg+'</p>');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith this.dt.scroll.set('width', '200px');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith test_uniqueRecordset: function () {
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith // Ticket #2529980
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith var a = new Y.DataTable.Base(),
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith b = new Y.DataTable.Base(),
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith aRS = a.get('recordset'),
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith bRS = b.get('recordset');
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith Y.Assert.isTrue(aRS instanceof Y.Recordset);
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith Y.Assert.isTrue(bRS instanceof Y.Recordset);
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith Y.Assert.areNotSame(aRS, bRS);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith },
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith "caption should not be added to the DOM unless set": function () {
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var container = Y.one("#base"),
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table, caption;
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table = new Y.DataTable.Base({
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith columnset: this.cols,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith recordset: this.data,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith caption: "Caption set"
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith });
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table.render(container);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith caption = table.get('boundingBox').one('caption');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Assert.isNotNull(caption);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Assert.areSame("Caption set", caption.get('text'));
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table.destroy();
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith container.empty(true);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table = new Y.DataTable.Base({
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith columnset: this.cols,
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith recordset: this.data
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith });
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table.render(container);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith caption = table.get('boundingBox').one('caption');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Assert.isNull(caption);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith table.set('caption', 'Caption set');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith caption = table.get('boundingBox').one('caption');
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Assert.isNotNull(caption);
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith Y.Assert.areSame('Caption set', caption.get('text'));
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith },
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith "test table.datasource.load() updates UI": function () {
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith var data = [ {a:1,b:1,c:1}, {a:2,b:2,c:2}, {a:3,b:3,c:3} ],
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith container = Y.one('#base'),
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith recordset,
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith source, table;
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith container.empty(true);
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith source = new Y.DataSource.Local({ source: data });
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith source.plug(Y.Plugin.DataSourceArraySchema, {
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith resultFields: ['a','b','c']
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith });
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith table = new Y.DataTable.Base({
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith columnset: [ { key: 'a', sortable: true }, 'b', 'c' ]
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith });
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith table.plug(Y.Plugin.DataTableDataSource, {
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith datasource: source
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith });
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith table.render(container);
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith Y.Assert.areSame(0, container.all('tbody tr').size());
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith table.datasource.load();
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith Y.Assert.areSame(3, container.all('tbody tr').size());
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith Y.Assert.areSame('1', container.one('tbody td').get('text'));
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith data[0].a = 'NEW';
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith table.datasource.load();
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith Y.Assert.areSame(3, container.all('tbody tr').size());
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith Y.Assert.areSame('NEW', container.one('tbody td').get('text'));
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith },
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith "test Recordset does not lose plugins on load": function () {
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith var data = [ {a:1,b:1,c:1}, {a:2,b:2,c:2}, {a:3,b:3,c:3} ],
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith container = Y.one('#base'),
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith recordset,
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith source, table;
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith container.empty(true);
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith source = new Y.DataSource.Local({ source: data });
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith source.plug(Y.Plugin.DataSourceArraySchema, {
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith resultFields: ['a','b','c']
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith });
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith table = new Y.DataTable.Base({
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith columnset: [ { key: 'a', sortable: true }, 'b', 'c' ]
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith });
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith table.plug(Y.Plugin.DataTableDataSource, {
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith datasource: source
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith });
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith table.plug(Y.Plugin.DataTableSort);
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith
290b5481ab152cfd458486efb552b3f20cacb31fLuke Smith table.render(container);
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith table.datasource.load();
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith recordset = table.get("recordset");
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith Y.Assert.isObject(recordset);
364b3f41370b5853ec58ed0f094565f69ab7c7fdLuke Smith Y.Assert.isObject(recordset.sort);
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith },
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith "header rows should not have {placeholders}": function () {
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith // Ticket #2530026
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith var data = [ {a:1,b:1,c:1}, {a:2,b:2,c:2}, {a:3,b:3,c:3} ],
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith container = Y.one('#base'),
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith recordset,
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith source, table, html;
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith container.empty(true);
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith table = new Y.DataTable.Base({
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith recordset: data,
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith columnset: [ 'a', 'b', 'c' ]
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith });
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith table.render(container);
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith html = table._theadNode.getContent();
dc2e4d465cdefe2663fc35e35162eab1b817af9eLuke Smith Y.Assert.isNull(html.match(/\{\s*\w+\s*\}/));
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith },
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith "cells should default content from column.emptyCellValue": function () {
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith // Ticket #2529921
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith var data = [ {b:1,c:1,d:1},
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith {a:2,c:2,d:2},
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith {a:3,b:3,d:3},
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith {a:4,b:4,c:4} ],
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith container = Y.one('#base'),
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith recordset,
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith source, table;
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith container.empty(true);
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith table = new Y.DataTable.Base({
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith recordset: data,
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith columnset: [
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith 'a',
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith { key: 'b', emptyCellValue: "(NO B)" },
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith { key: 'c', formatter: "<em>C: {value}</em>",
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith emptyCellValue: "(NO C)" },
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith { key: 'd', formatter: function (o) {
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith return o.value && (o.value + .5);
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith },
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith emptyCellValue: "(NO D)" }]
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith });
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith table.render(container);
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith Y.Assert.isNull(table._tbodyNode
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith .getContent().match(/\{\s*\w+\s*\}/));
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith Y.Assert.areSame('', table._tbodyNode.all('tr').item(0)
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith .all('.yui3-datatable-liner').item(0).getContent());
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith Y.Assert.areSame('(NO B)', table._tbodyNode.all('tr').item(1)
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith .all('.yui3-datatable-liner').item(1).getContent());
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.Assert.areSame('<EM>C: (NO C)</EM>',
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith table._tbodyNode.all('tr').item(2)
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith .all('.yui3-datatable-liner').item(2).getContent()
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith .toUpperCase()); // <-- account for IE UC tags
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith Y.Assert.areSame('(NO D)', table._tbodyNode.all('tr').item(3)
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith .all('.yui3-datatable-liner').item(3).getContent());
ef820a2b98579b004dc187276f739fd5774a791fLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith },
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith "setting the recordset should update the UI": function () {
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith // Ticket #2529920 (comment 18)
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith // http://yuilibrary.com/projects/yui3/ticket/2529920#comment:18
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith var data = [ {a:1,b:1,c:1}, {a:2,b:2,c:2}, {a:3,b:3,c:3} ],
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith container = Y.one('#base'),
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith table, cell;
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith container.empty(true);
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith table = new Y.DataTable.Base({
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith recordset: data,
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith columnset: [ 'a', 'b', 'c' ]
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith });
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith table.render(container);
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith cell = table._tbodyNode.one('.yui3-datatable-liner');
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith Y.Assert.areSame('1', cell.get('text'));
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith table.set('recordset', [
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith { a: 10,b: 10,c: 10 },
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith { a: 20,b: 20,c: 20 },
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith { a: 30,b: 30,c: 30 }
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith ]);
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith cell = table._tbodyNode.one('.yui3-datatable-liner');
75365cf641880c18abb494d5a5aa6c4dedde96beLuke Smith Y.Assert.areSame('10', cell.get('text'));
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith },
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith "formatters should not have access to o.td by default": function () {
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith var table, cells;
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith table = new Y.DataTable.Base({
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith columnset: [
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith {
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith key: 'a',
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith formatter: function (o) {
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.Assert.isUndefined(o.td);
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith return o.value.toUpperCase();
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith }
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith },
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith 'b',
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith { key: 'c', formatter: "({value})" }
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith ],
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith recordset: [
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith { a: "a1", b: 53, c: "c1" },
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith { a: "a2", b: 35, c: "c2" },
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith { a: "a3", b: 42, c: "c3" }
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith ]
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith });
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.one('#base').empty();
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith table.render('#base');
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith cells = table._tbodyNode.one('tr').all('td');
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.ArrayAssert.itemsAreSame(
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith ['A1', '53', '(c1)'],
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith cells.get('text'));
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith },
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith "createCell should populate o.td in formatters": function () {
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith var table, cells, i = 0;
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith table = new Y.DataTable.Base({
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith columnset: [
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith {
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith key: 'a',
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith formatter: function (o) {
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.Assert.isUndefined(o.td);
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith this.createCell(o)
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith .setContent(
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith "<strong>???" + (++i) + "</strong>");
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.Assert.isObject(o.td);
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith }
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith }
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith ],
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith recordset: [{ a: "a1" }, { a: "a2" }, { a: "a3" }]
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith });
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.one('#base').empty();
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith table.render('#base');
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith cells = table._tbodyNode.all('td');
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith Y.ArrayAssert.itemsAreSame(
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith ['???1', '???2', '???3'],
a190c7847c26f8cc5529e8860137e531e3015f8cLuke Smith cells.get('text'));
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith }
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra });
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
a9469f39cbc0ff8977226a5e0469330341c5186eLuke Smith var suite = new Y.Test.Suite("Datatable Test Suite");
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra suite.add(testBasic);
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra Y.Test.Runner.setName("Datatable Test Runner");
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra Y.Test.Runner.add(suite);
82dcdf72033580e7e6d2a7e634effec6e8753980Luke Smith Y.Test.Runner.run();
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra });
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra})();
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra</script>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra</body>
28ab732ad7743763a94f34d018067c184e17de96Tilo Mitra</html>