Skip to content
Permalink
Browse files

[OLINGO-289] Upgrade the datajs version to 1.1.3 and check in some mi…

…ssing test cases
  • Loading branch information...
Bing Li
Bing Li committed May 16, 2014
1 parent 9aa185d commit ebfc58690c1004365b907fadb0747478efb53469
@@ -207,6 +207,12 @@
nextUrl = JSON.parse(nextUrl).d;
if (nextUrl) {
window.location.href = nextUrl;
// MISSING CODEPLEX CODE STARTS
} else if (window.jscoverage_report) {
// Generate code coverage reports if it is enabled
// See http://siliconforks.com/jscoverage/manual.html for more information
jscoverage_report();
// MISSING CODEPLEX CODE STOPS
}
}
}
@@ -215,4 +221,4 @@
window.TestSynchronizer = {
init: init
};
})(window);
})(window);
@@ -1,4 +1,4 @@
// Copyright (c) Microsoft. All rights reserved.
// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved.
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation
// files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy,
// modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the
@@ -17,16 +17,22 @@

(function (window, undefined) {

var CacheOracle = function (baseUri, pageSize, total) {
var CacheOracle = function (baseUri, pageSize, total, cacheSize) {
/// <summary>Creates a new CacheOracle</summary>
/// <param name="baseUri" type="String">The base URI of the collection</param>
/// <param name="pageSize" type="Integer">The page size used in the cache</param>
/// <param name="total" type="Integer">The total number of items in the collection</param>
/// <param name="cacheSize" type="Integer">Cache size in bytes</param>
this.baseUri = baseUri;
this.pageSize = pageSize;
this.total = total;

this.cacheSize = (cacheSize !== undefined) ? cacheSize : 1024 * 1024;
this.actualSize = 0;
this.actualCount = 0;
this.cachedPages = [];
this.exactPageCount = (total % pageSize === 0);
this.maxPage = Math.floor(total / pageSize);
this.overflowed = this.cacheSize === 0;
};

CacheOracle.mechanisms = {
@@ -42,7 +48,7 @@
/// <returns>Whether the mechanism is available</returns>
switch (mechanism) {
case CacheOracle.mechanisms.indexeddb:
if (window.mozIndexedDB) {
if (window.msIndexedDB || window.mozIndexedDB || window.webkitIndexedDB || window.indexedDB) {
return true;
}
else {
@@ -69,51 +75,131 @@
CacheOracle.prototype.clear = function () {
/// <summary>Clears the cache in the oracle</summary>
this.cachedPages = [];
this.actualSize = 0;
this.actualCount = 0;
this.overflowed = this.cacheSize === 0;
}

CacheOracle.prototype.verifyRequests = function (requests, responses, index, count, description) {
CacheOracle.prototype.verifyRequests = function (requests, responses, index, count, description, backwards, isPrefetch) {
/// <summary>Verifies the HTTP requests for a single data request, and updates the oracle with cached pages</summary>
/// <param name="requests" type="Array">The sequence of request objects (from OData.defaultHttpClient)</param>
/// <param name="responses" type="Array">The sequence of response objects (from OData.defaultHttpClient)</param>
/// <param name="index" type="Integer">The starting index of the read</param>
/// <param name="count" type="Integer">The count of items in the read</param>
/// <param name="description" type="String">The description of the requests being verified</param>
/// <param name="backwards" type="Boolean">Whether or not filterBack is being verified</param>
/// <param name="isPrefetch" type="Boolean">Whether the requests being verified come from the prefetcher</param>
var that = this;

index = (index < 0 ? 0 : index);
var pageIndex = function (index) {
/// <summary>Returns the page index that the given item index belongs to</summary>
/// <param name="index" type="Integer">The item index</param>
/// <returns>The page index</returns>
return Math.floor(index / that.pageSize);
}
};

var estimateSize = function (obj) {
/// <summary>Estimates the size of an object in bytes.</summary>
/// <param name="obj" type="Object">Object to determine the size of.</param>
/// <returns type="Number">Estimated size of the object in bytes.</returns>

var minPage = pageIndex(index);
var maxPage = Math.min(pageIndex(index + count - 1), pageIndex(that.total));
var size = 0;
var type = typeof obj;

// Workaround for Bug 2055: Calling readRange with count = 0 still fires a single HTTP request
maxPage = Math.max(minPage, maxPage);
if (type === "object" && obj) {
for (var name in obj) {
size += name.length * 2 + estimateSize(obj[name]);
}
} else if (type === "string") {
size = obj.length * 2;
} else {
size = 8;
}
return size;
};

var expectedUris = [];
var responseIndex = 0;
for (var page = minPage; page <= maxPage; page++) {
if (!this.cachedPages[page]) {
expectedUris.push(that.baseUri + "?$skip=" + page * that.pageSize + "&$top=" + (that.pageSize));

// Handle server paging skipToken requests
while (responses[responseIndex] && responses[responseIndex].data && responses[responseIndex].data.__next) {
expectedUris.push(responses[responseIndex].data.__next);
responseIndex++;
if (count > 0) {
var minPage = pageIndex(index);
var maxPage = Math.min(pageIndex(index + count - 1), pageIndex(this.total));

// In the case that the index is outside the range of the collection the minPage will be greater than the maxPage
maxPage = Math.max(minPage, maxPage);

if (!(isPrefetch && !this.exactPageCount && minPage > this.maxPage)) {
for (var page = minPage; page <= maxPage && this.actualCount <= this.total && !(isPrefetch && this.overflowed); page++) {
if (!this.cachedPages[page]) {

expectedUris.push(that.baseUri + "?$skip=" + page * this.pageSize + "&$top=" + (this.pageSize));

var actualPageSize = 0;
var actualPageCount = 0;
if (responses[responseIndex] && responses[responseIndex].data) {
actualPageSize += estimateSize(responses[responseIndex].data.results);
actualPageCount += responses[responseIndex].data.results.length;
// Handle server paging skipToken requests
while (responses[responseIndex].data.__next) {
expectedUris.push(responses[responseIndex].data.__next);
responseIndex++;
actualPageSize += estimateSize(responses[responseIndex].data.results);
actualPageCount += responses[responseIndex].data.results.length;
}
actualPageSize += 24; // 24 byte overhead for the pages (i)ndex, and (c)ount fields
}
responseIndex++;

this.overflowed = this.cacheSize >= 0 && this.actualSize + actualPageSize > this.cacheSize;
if (!this.overflowed) {
this.cachedPages[page] = true;
this.actualSize += actualPageSize;
this.actualCount += actualPageCount;
}
}
}

responseIndex++;
this.cachedPages[page] = true;
}
}

if (backwards) {
expectedUris.reverse();
}

var actualUris = $.map(requests, function (r) { return r.requestUri; });
djstest.assertAreEqualDeep(actualUris, expectedUris, description);
};

CacheOracle.getExpectedFilterResults = function (collection, filterIndex, filterCount, predicate, backwards) {
/// <summary>Verifies the cache filter returns the correct data</summary>
/// <param name="collection" type="Array">Array of items in the collection</param>
/// <param name="filterIndex" type="Integer">The index value</param>
/// <param name="filterCount" type="Integer">The count value</param>
/// <param name="predicate" type="Function">Predicate to be applied in filter, takes an item</param>
/// <param name="backwards" type="Boolean">Whether or not filterBackwards is being verified</param>
var expectedResults = [];
if (filterCount !== 0) {
// Convert [item0, item1, ...] into [{ index: 0, item: item0 }, { index: 1, item: item1 }, ...]
var indexedCollection = $.map(collection, function (item, index) {
return { index: index, item: item };
});

var grepPredicate = function (element, index) {
return predicate(element.item);
};

var index = filterIndex < 0 ? 0 : filterIndex;
var count = filterCount < 0 ? indexedCollection.length : filterCount;

var expectedResults = backwards ?
// Slice up to 'index', filter, then slice 'count' number of items from the end
$.grep(indexedCollection.slice(0, index + 1), grepPredicate).slice(-count) :
// Slice from 'index' to the end, filter, then slice 'count' number of items from the beginning
$.grep(indexedCollection.slice(index), grepPredicate).slice(0, count);
}

return expectedResults;
};

window.CacheOracle = CacheOracle;

})(this);
@@ -397,4 +397,4 @@
djstest.done();
}
});
})(window);
})(window);
@@ -4753,4 +4753,4 @@
});

// DATAJS INTERNAL END
})(this);
})(this);
@@ -35,6 +35,7 @@
<script type="text/javascript" src="common/ODataReadOracle.js"></script>
<script type="text/javascript" src="common/TestSynchronizerClient.js"></script>

<script type="text/javascript" src="common/rx.js"></script>

<script type="text/javascript">
window.TestSynchronizer.init(QUnit);
@@ -65,10 +66,24 @@
<script type="text/javascript" src="../src/cache-source.js"></script>
<script type="text/javascript" src="../src/cache.js"></script>

<script type="text/javascript" src="common/mockHttpClient.js"></script>
<script type="text/javascript" src="common/mockXMLHttpRequest.js"></script>
<script type="text/javascript" src="common/djstest.js"></script>
<script type="text/javascript" src="common/CacheOracle.js"></script>

<script type="text/javascript" src="odata-tests.js"></script>
<script type="text/javascript" src="odata-atom-tests.js"></script>
<script type="text/javascript" src="odata-json-tests.js"></script>
<script type="text/javascript" src="odata-json-light-tests.js"></script>
<script type="text/javascript" src="odata-metadata-tests.js"></script>
<script type="text/javascript" src="odata-xml-tests.js"></script>
<script type="text/javascript" src="odata-handler-tests.js"></script>
<script type="text/javascript" src="odata-net-tests.js"></script>
<script type="text/javascript" src="odata-batch-tests.js"></script>

<script type="text/javascript" src="cache-tests.js"></script>
<script type="text/javascript" src="store-tests.js"></script>
<script type="text/javascript" src="store-indexeddb-tests.js"></script>
</head>
<body>
<h1 id="qunit-header">OData Unit Tests</h1>
@@ -19,6 +19,16 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEAL
1 - failed to launch tests
2 - tests failed
</comment>
<!-- MISSING CODEPLEX CODE STARTS -->
<named name="testFiles" helpstring="Comma-separated list of HTML test files to run"
type="string" required="false" />
<named name="browsers" helpstring="Comma-separated list of browsers to run on" type="string"
required="false" />
<named name="timeout" helpstring="Timeout (in seconds) for each browser" type="string"
required="false" />
<named name="reinstallWCFDataServices" helpstring="If specified WCF Data Services will be reinstalled"
type="boolean" required="false" />
<!-- MISSING CODEPLEX CODE STOPS -->
</runtime>
<script language="JScript" src="test-list.js" />
<script language="JScript">
@@ -393,6 +403,11 @@ ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEAL
result = shell.ExpandEnvironmentStrings("%DJSOUT%\\JSLib.sln\\tests");
}

// MISSING CODEPLEX CODE STARTS
if (result === "%DJSOUT%\\JSLib.sln\\tests") {
result = shell.ExpandEnvironmentStrings("%_nttree%\\DataJS\\JSLib.sln\\tests");
}
// MISSING CODEPLEX CODE STOPS

return result;
}
@@ -15,6 +15,19 @@

function getAllTestFiles() {
return [
// MISSING CODEPLEX CODE STARTS
"odata-batch-functional-tests.html",
"odata-metadata-awareness-functional-tests.html",
"odata-read-functional-tests.html",
"odata-request-functional-tests.html",
"odata-links-functional-tests.html",
"odata-cache-functional-tests.html",
"odata-cache-filter-functional-tests.html",
"odata-cache-fperf-tests.html",
"odata-cache-rx-functional-tests.html",
"odata-read-crossdomain-functional-tests.html",
"datajs-cache-large-collection-functional-tests.html",
// MISSING CODEPLEX CODE STOPS
"odata-qunit-tests.htm"
];
}

0 comments on commit ebfc586

Please sign in to comment.
You can’t perform that action at this time.