1
YUI.add('cache-tests', function(Y) {
4
ARRAYASSERT = Y.ArrayAssert;
7
var testClass = new Y.Test.Case({
10
testDefaults: function() {
11
var cache = new Y.Cache();
12
ASSERT.isInstanceOf(Y.Cache, cache, "Expected instance of Y.Cache.");
13
ASSERT.areSame(0, cache.get("max"), "Expected default max of 0.");
14
ARRAYASSERT.isEmpty(cache.get("entries"), "Expected empty array.");
17
testDestructor: function() {
18
var cache = new Y.Cache();
20
ARRAYASSERT.isEmpty(cache.get("entries"), "Expected empty array.");
24
var testBasic = new Y.Test.Case({
27
testmax0: function() {
28
var cache = new Y.Cache();
29
ASSERT.areSame(0, cache.get("max"), "Expected max to be 0.");
32
ASSERT.areSame(0, cache.get("size"), "Expected 0 entries.");
33
ASSERT.isNull(cache.retrieve(1), "Expected null cached response.");
36
testmax2: function() {
37
var cache = new Y.Cache({max:2});
38
ASSERT.areSame(2, cache.get("max"), "Expected max to be 2.");
41
ASSERT.areSame(1, cache.get("size"), "Expected 1 entry.");
43
ASSERT.areSame(2, cache.get("size"), "Expected 2 entries.");
45
ASSERT.areSame(2, cache.get("size"), "Expected 2 entries (still).");
48
testmax2to1: function() {
49
var cache = new Y.Cache({max:2});
53
ASSERT.areSame(1, cache.get("size"), "Expected 1 entry.");
56
ASSERT.areSame(1, cache.get("size"), "Expected 1 entry (still).");
59
testmax2to0: function() {
60
var cache = new Y.Cache({max:2});
64
ARRAYASSERT.isEmpty(cache.get("entries"), "Expected empty array.");
66
ARRAYASSERT.isEmpty(cache.get("entries"), "Expected empty array (still).");
69
testmax2toNegative: function() {
70
var cache = new Y.Cache({max:2});
74
ARRAYASSERT.isEmpty(cache.get("entries"), "Expected empty array.");
76
ARRAYASSERT.isEmpty(cache.get("entries"), "Expected empty array (still).");
77
ASSERT.areSame(0, cache.get("max"), "Expected negative value normalized to 0.");
80
testRetrieve: function() {
81
var cache = new Y.Cache({max:2}),
85
cachedentry = cache.retrieve(1);
86
ASSERT.areSame("a", cachedentry.response, "Expected first cached response.");
87
ASSERT.isInstanceOf(Date, cachedentry.cached, "Expected first cached Date.");
88
ASSERT.isNull(cachedentry.expires, "Expected null expires first.");
90
cachedentry = cache.retrieve("b");
91
ASSERT.areSame("c", cachedentry.response, "Expected second cached response.");
92
ASSERT.isInstanceOf(Date, cachedentry.cached, "Expected second cached Date.");
93
ASSERT.isNull(cachedentry.expires, "Expected null expires second.");
96
testNoExpires: function() {
97
this.cache = new Y.Cache({max:5, expires:0}),
98
this.cache.add(1, "a");
99
this.cache.add("b", "c");
101
var cachedentry = this.cache.retrieve(1);
102
ASSERT.areSame("a", cachedentry.response, "Expected cached response.");
103
ASSERT.isInstanceOf(Date, cachedentry.cached, "Expected cached Date.");
104
ASSERT.isNull(cachedentry.expires, "Expected null expires.");
107
testExpiresNumber: function() {
108
this.cache = new Y.Cache({max:5, expires:2000}),
109
this.cache.add(1, "a");
111
var cachedentry = this.cache.retrieve(1);
112
ASSERT.areSame("a", cachedentry.response, "Expected cached response.");
113
ASSERT.isInstanceOf(Date, cachedentry.expires, "Expected cached Date.");
115
this.cache.set("expires", 1);
116
this.cache.add(2, "b");
118
this.wait(function(){
119
cachedentry = this.cache.retrieve(2);
120
ASSERT.isNull(cachedentry, "Expected expired data.");
124
testExpiresDate: function() {
125
this.cache = new Y.Cache({max:5, expires:new Date(new Date().getTime() + 86400000)}),
126
this.cache.add(1, "a");
128
var cachedentry = this.cache.retrieve(1);
129
ASSERT.areSame("a", cachedentry.response, "Expected cached response.");
130
ASSERT.isInstanceOf(Date, cachedentry.expires, "Expected cached Date.");
133
this.cache.set("expires", new Date(new Date().getTime() - 86400000));
134
this.cache.add(1, "a");
135
cachedentry = this.cache.retrieve(1);
136
ASSERT.isNull(cachedentry, "Expected expired data.");
139
testNoMatch: function() {
140
var cache = new Y.Cache({max:2}),
143
cachedentry = cache.retrieve("c");
144
ASSERT.areSame(null, cachedentry, "Expected no match.");
147
testFlush: function() {
148
var cache = new Y.Cache({max:2});
152
ASSERT.areSame(0, cache.get("size"), "Expected empty cache.");
155
testFlushItem: function() {
156
var cache = new Y.Cache({max:2});
160
ASSERT.areSame(1, cache.get("size"), "Expected single item");
161
ASSERT.areSame("b", cache.get("entries")[0].response, "Expected 'b'");
165
var testEvents = new Y.Test.Case({
168
testAdd: function() {
169
var mock = new Y.Mock();
170
Y.Mock.expect(mock, {
172
args: [Y.Mock.Value.Object]
175
var cache = new Y.Cache({max:2});
176
cache.on("add", mock.handleAdd);
182
testFlush: function() {
183
var mock = new Y.Mock();
184
Y.Mock.expect(mock, {
185
method: "handleFlush",
186
args: [Y.Mock.Value.Object]
189
var cache = new Y.Cache({max:2});
190
cache.on("flush", mock.handleFlush);
197
testRequest: function() {
198
var mock = new Y.Mock();
199
Y.Mock.expect(mock, {
200
method: "handleRequest",
201
args: [Y.Mock.Value(function(e){
202
ASSERT.areSame(2, e.request, "Expected request.");
206
var cache = new Y.Cache({max:2});
207
cache.on("request", mock.handleRequest);
214
testRetrieveSuccess: function() {
215
var mock = new Y.Mock();
216
Y.Mock.expect(mock, {
217
method: "handleRetrieve",
218
args: [Y.Mock.Value(function(e){
219
ASSERT.areSame(1, e.entry.request);
220
ASSERT.areSame("a", e.entry.response);
224
var cache = new Y.Cache({max:2});
225
cache.on("retrieve", mock.handleRetrieve);
232
testRetrieveFailure: function() {
233
var mock = new Y.Mock();
234
Y.Mock.expect(mock, {
235
method: "handleRetrieve",
236
args: [Y.Mock.Value.Any],
240
var cache = new Y.Cache({max:2});
241
cache.on("retrieve", mock.handleRetrieve);
248
testCancelAdd: function() {
249
var cache = new Y.Cache({max:2});
250
cache.on("add", function(e) {
256
ASSERT.areSame(0, cache.get("size"), "Expected 0 entries.");
259
testCancelFlush: function() {
260
var cache = new Y.Cache({max:2});
261
cache.on("flush", function(e) {
268
ASSERT.areSame(1, cache.get("size"), "Expected 1 entry.");
272
var testEntryManagement = new Y.Test.Case({
273
name: "Entry Management Tests",
275
testNonUniqueKeys: function() {
276
var cache = new Y.Cache({max:3});
280
ASSERT.areSame(3, cache.get("size"), "Expected 3 entries.");
283
testUniqueKeys: function() {
284
var cache = new Y.Cache({max:3,uniqueKeys:true});
288
ASSERT.areSame(2, cache.get("size"), "Expected 2 entries.");
291
testUniqueKeyValues: function() {
292
var cache = new Y.Cache({max:3,uniqueKeys:true});
296
ASSERT.areSame("c", cache.retrieve(1).response, "Expected 'c'");
299
testFreshness: function() {
300
var cache = new Y.Cache({max:3});
305
ASSERT.areSame(3, cache.get("size"), "Expected 3 entries.");
306
ASSERT.areSame(1, cache.get("entries")[2].request, "Expected entry to be refreshed.");
310
var testBoundaryValues = new Y.Test.Case({
311
name: "Invalid Value Tests",
313
testUndefinedRequest: function() {
314
var cache = new Y.Cache({max:3});
315
cache.add(undefined, "a");
316
cache.add(undefined, "b");
317
ASSERT.areSame("b", cache.retrieve().response, "Expected cached response.");
320
testNullRequest: function() {
321
var cache = new Y.Cache({max:3});
322
cache.add(null, "a");
323
cache.add(null, "b");
324
ASSERT.areSame("b", cache.retrieve(null).response, "Expected cached response.");
327
testNaNRequest: function() {
328
var cache = new Y.Cache({max:3});
331
ASSERT.areSame(0, cache.get("size"), "Expected 0 entries.");
334
testEmptyStringRequest: function() {
335
var cache = new Y.Cache({max:3});
338
ASSERT.areSame("b", cache.retrieve("").response, "Expected cached response.");
342
var suite = new Y.Test.Suite({name:"Cache Test Suite"});
343
suite.add(testClass);
344
suite.add(testBasic);
345
suite.add(testEvents);
346
suite.add(testEntryManagement);
347
suite.add(testBoundaryValues);
349
Y.Test.Runner.setName("Cache Test Runner");
350
Y.Test.Runner.add(suite);