blob: cb479820c14f9f1ab100f503841a5f3eee5bdbf2 [file] [log] [blame]
/// <reference path="../src/datajs.js" />
/// <reference path="../src/odata-utils.js" />
/// <reference path="../src/cache.js" />
/// <reference path="common/djstest.js" />
/// <reference path="common/ODataReadOracle.js" />
/// <reference path="common/rx.js" />
(function (window, undefined) {
OData.defaultHandler.accept = "application/json;q=0.9, application/atomsvc+xml;q=0.8, */*;q=0.1";
var feeds = [
{ uri: "./endpoints/FoodStoreDataServiceV4.svc/Foods" }
];
var itemsInCollection = 16;
var pageSizes = [
1,
4, // factor of total, <= server page size
5, // non-factor of total, <= server page size
6, // non-factor of total, > server page size
8, // factor of total, > server page size
itemsInCollection,
itemsInCollection + 1
];
var operatorTests = [
function (observable) { return observable.Take(0); },
function (observable) { return observable.Take(1); },
function (observable) { return observable.Skip(1); },
function (observable) { return observable.Skip(2).Take(4); },
function (observable) { return observable.Select(function (item) { return item.Name; }); },
function (observable) { return observable.Where(function (item) { return item.FoodID % 2 === 1; }); }
];
var assertObservables = function (actual, expected, done) {
/// <summary>Asserts two finite observables generate the same sequence</summary>
/// <param name="actual" type="IObservable">The actual observable</param>
/// <param name="expected" type="IObservable">The expected observable</param>
/// <param name="done" type="Function">The callback function when asserts are done</param>
var toArray = function (observable, callback) {
var arr = [];
observable.Subscribe(
function (item) { arr.push(item); },
function (err) { arr.push({ "__error__": err }); },
function () { callback(arr); });
};
toArray(actual, function (actualSequence) {
toArray(expected, function (expectedSequence) {
djstest.assertAreEqualDeep(actualSequence, expectedSequence, "Verify observable sequence");
done();
});
});
};
module("Functional");
$.each(feeds, function (_, feed) {
$.each(pageSizes, function (_, pageSize) {
$.each(operatorTests, function (_, operator) {
var params = { feedUri: feed.uri, pageSize: pageSize, operator: operator };
djstest.addTest(function (params) {
djstest.assertsExpected(1);
var options = { name: "cache" + new Date().valueOf(), source: params.feedUri, pageSize: params.pageSize, prefetchSize: 0 };
var cache = datajs.createDataCache(options);
ODataReadOracle.readJsonAcrossServerPages(params.feedUri, function (collection) {
assertObservables(params.operator(cache.toObservable()), params.operator(window.Rx.Observable.FromArray(collection.value)), function () {
djstest.destroyCacheAndDone(cache);
});
});
}, "feed: " + params.feedUri + ", pageSize: " + params.pageSize + ", operator: " + params.operator.toString(), params);
});
});
});
})(this);