datasource.html revision 350839d3f8c71a522972265f77a8b5a3fbf6c82f
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync<script type="text/javascript" src="/build/yui/yui.js"></script>
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync<script type="text/javascript" src="/build/datasource/datasource-debug.js"></script>
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync<p><input type="button" value="Run Tests" id="btnRun" disabled="true" /></p>
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync(function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync //filter: "debug",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync logInclude:{"TestRunner":true,"datasource":true},
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync useConsole: true
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync }).use("dump", "test", "console", "io-base", "cache", "base", "plugin", "json", "datatype", "dataschema", "datasource", function(Y) {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ASSERT = Y.Assert,
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ARRAYASSERT = Y.ArrayAssert,
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync OBJECTASSERT = Y.ObjectAssert,
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync BTNRUN = Y.get("#btnRun"),
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync WAITTIMEOUT = 5000; // On a slow connection set to 5000
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync // Set up the page
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync BTNRUN.set("disabled", false);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync Y.on("click", function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync }, BTNRUN);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var myConsole = new Y.Console().render();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var testClass = new Y.Test.Case({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync name: "Class Tests",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testConstructor: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ds = new Y.DataSource.Local();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame((ds instanceof Y.Base), true, "Expected DataSource.Base instance.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame((ds instanceof Y.DataSource.Local), true, "Expected DataSource.Local instance.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testConstructorIO: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ds = new Y.DataSource.IO();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame((ds instanceof Y.Base), true, "Expected Base instance.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame((ds instanceof Y.DataSource.Local), true, "Expected DataSource.Local instance.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame((ds instanceof Y.DataSource.IO), true, "Expected DataSource.IO instance.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var testLocal = new Y.Test.Case({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync name: "DataSource.Local Tests",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testLocalDefaults: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync source: ["a","b","c","d"]
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleSuccess",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ARRAYASSERT.itemsAreSame(["a","b","c","d"], e.response.results, "Expected live array.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync failure: function(e) {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.fail("IO failure case.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testLocalEvents: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync source: ["a","b","c","d"]
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleRequest",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "request: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("a", e.request, "request: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "request: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleData",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "data: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("a", e.request, "data: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "data: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isArray(e.data, "data: Expected raw data.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleResponse",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "response: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("a", e.request, "response: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "response: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isArray(e.data, "response: Expected raw data.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.response, "response: Expected normalized response object.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isArray(e.response.results, "response: Expected parsed results.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.response.meta, "response: Expected parsed meta data.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ds.sendRequest("a", "callback");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testLocalError: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync source: ["a","b","c","d"]
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleError",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "error: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("a", e.request, "error: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "error: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isUndefined(e.response, "error: Expected undefined response.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.error, "error: Expected error.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ds.set("source", undefined);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ds.sendRequest("a", "callback");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync this.wait(function(){Y.Mock.verify(handler);}, WAITTIMEOUT);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var testIO = new Y.Test.Case({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync name: "DataSource.IO Tests",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testIODefaults: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ds = new Y.DataSource.IO({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleSuccess",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNull(e.request, "Expected null request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.response, "Expected response object.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync OBJECTASSERT.ownsKeys({tId:null,request:null,data:null,response:null,callback:null}, e, "Expected all properties.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync failure: function(e) {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.fail("IO failure case.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync this.wait(function(){Y.Mock.verify(handler);}, WAITTIMEOUT);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testIOPost: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ds = new Y.DataSource.IO({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleSuccess",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNull(e.request, "Expected null request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.response, "Expected response object.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync OBJECTASSERT.ownsKeys({tId:null,request:null,data:null,response:null,callback:null}, e, "Expected all properties.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync failure: function(e) {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.fail("IO failure case.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "POST",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync data: "foo=bar"
a0a9f39e8864357c2e1e61106958411240f5bf6bvboxsync this.wait(function(){Y.Mock.verify(handler);}, WAITTIMEOUT);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testIOEvents: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ds = new Y.DataSource.IO({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync resultListLocator: "ResultSet.Result",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync resultFields: ["Title"]
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleRequest",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "request: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame(null, e.request, "request: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "request: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleData",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "data: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame(null, e.request, "data: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "data: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.data, "data: Expected raw data.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleResponse",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "response: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame(null, e.request, "response: Expected request.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("callback", e.callback, "response: Expected callback.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.data, "response: Expected raw data.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.response, "response: Expected normalized response object.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isArray(e.response.results, "response: Expected parsed results.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isObject(e.response.meta, "response: Expected parsed meta data.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ds.sendRequest(null, "callback");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync this.wait(function(){Y.Mock.verify(handler);}, WAITTIMEOUT);
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync testIOError: function() {
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var ds = new Y.DataSource.IO({
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync resultListLocator: "ResultSet.Result",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync resultFields: ["Title"]
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync var handler = Y.Mock();
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync method: "handleError",
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync args: [Y.Mock.Value(function(e){
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.isNumber(e.tId, "error: Expected transaction ID.");
19a258565a4d24e5a0af62f626943ac9b898d957vboxsync ASSERT.areSame("a", e.request, "error: Expected request.");
ds.set("source", "foo");
ds.sendRequest("a", "callback");
var testGet = new Y.Test.Case({
name: "DataSource.Get Tests",
var ds = new Y.DataSource.Get({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ASSERT.areSame("q=select%20*%20from%20search.web%20where%20query%3D%22pizza%22", e.request, "Expected same request.");
OBJECTASSERT.ownsKeys({tId:null,request:null,data:null,response:null,callback:null}, e, "Expected all properties.");
success: handler.handleSuccess,
ASSERT.fail("Get failure case.");
var ds = new Y.DataSource.Get({
resultListLocator: "query.results.result",
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ASSERT.areSame("q=select%20*%20from%20search.web%20where%20query%3D%22pizza%22", e.request, "Expected same request.");
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ASSERT.areSame("q=select%20*%20from%20search.web%20where%20query%3D%22pizza%22", e.request, "Expected same request.");
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ASSERT.areSame("q=select%20*%20from%20search.web%20where%20query%3D%22pizza%22", e.request, "Expected same request.");
testGetError: (Y.UA.gecko) ? function() {
var ds = new Y.DataSource.Get({
resultListLocator: "query.results.result",
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.set("source", "foo");
ds.sendRequest("a", "callback");
var testFunction = new Y.Test.Case({
name: "DataSource.Function Tests",
var ds = new Y.DataSource.Function({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
OBJECTASSERT.ownsKeys({tId:null,request:null,data:null,response:null,callback:null}, e, "Expected all properties.");
ds.sendRequest("foo", {
success: handler.handleSuccess,
ASSERT.fail("Function failure case.");
var ds = new Y.DataSource.Function({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.sendRequest("foo", "callback");
var ds = new Y.DataSource.Function({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.sendRequest("a", "callback");
var testDataSchemaPlugin = new Y.Test.Case({
var ds = new Y.DataSource.IO({
resultListLocator: "ResultSet.Result",
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.sendRequest(null, {
failure: Y.bind(function(e) {
ASSERT.fail("IO failure case.");
var ds = new Y.DataSource.IO({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.sendRequest(null, {
failure: Y.bind(function(e) {
ASSERT.fail("IO failure case.");
var ds = new Y.DataSource.Local({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.sendRequest(null, {
failure: Y.bind(function(e) {
ASSERT.fail("Local failure case.");
var ds = new Y.DataSource.Local({
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value(function(e){
ds.sendRequest(null, {
failure: Y.bind(function(e) {
ASSERT.fail("Local failure case.");
var testCaching = new Y.Test.Case({
var ds = new Y.DataSource.Local();
var ds = new Y.DataSource.Local();
var ds = new Y.DataSource.Local();
ds.cache.set("max", 5);
var ds = new Y.DataSource.Local({
ds.sendRequest("a");
ds.sendRequest("b");
ds.sendRequest("c");
ds.on("data", function(e) {
ASSERT.fail("Entry should be cached -- 'data' event is unexpected");
ds.sendRequest("a");
ds.sendRequest("b");
ds.sendRequest("c");
var ds = new Y.DataSource.Local({
ds.sendRequest("a");
ds.cache.on("retrieve", function(e) {
ASSERT.fail("Cache is unset -- 'retrieve' event is unexpected");
ds.unplug("cache");
ds.sendRequest("a");
var testPolling = new Y.Test.Case({
var ds = new Y.DataSource.Local();
ds = new Y.DataSource.IO();
var ds = new Y.DataSource.Local();
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value.Any],
var id = ds.setInterval(500, null, {
success: handler.handleSuccess,
ASSERT.fail("IO failure case.");
ASSERT.isNumber(id, "Expected interval id.");
this.wait(function(){
ds.clearInterval(id);
this.wait(function(){
Y.Mock.verify(handler);
var ds = new Y.DataSource.Local();
var handler = Y.Mock();
Y.Mock.expect(handler,{
args: [Y.Mock.Value.Any],
ds.setInterval(500, null, {
success: handler.handleSuccess,
ASSERT.fail("IO failure case.");
ds.setInterval(500, null, {
success: handler.handleSuccess,
ASSERT.fail("IO failure case.");
ds.setInterval(500, null, {
success: handler.handleSuccess,
ASSERT.fail("IO failure case.");
this.wait(function(){
this.wait(function(){
Y.Mock.verify(handler);
Y.Test.Runner.add(testClass);
Y.Test.Runner.add(testLocal);
Y.Test.Runner.add(testIO);
Y.Test.Runner.add(testGet);
Y.Test.Runner.add(testFunction);
Y.Test.Runner.add(testDataSchemaPlugin);
Y.Test.Runner.add(testCaching);
Y.Test.Runner.add(testPolling);