-
Notifications
You must be signed in to change notification settings - Fork 2
/
use-case-3.html
96 lines (82 loc) · 3.15 KB
/
use-case-3.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!DOCTYPE html>
<html>
<head>
<title>DataCache Use Case 3</title>
<!-- Testing Libraries -->
<link rel="stylesheet" href="shoulda.css" type="text/css" media="screen" title="no title" charset="utf-8">
<script src="qunit.js" type="text/javascript" charset="utf-8"></script>
<script src="shoulda.js" type="text/javascript" charset="utf-8"></script>
<script src="use-case-helpers.js" type="text/javascript" charset="utf-8"></script>
<!-- The LawnChair and DataCache API -->
<script src="../deps/adaptors/Helpers.js" type="text/javascript" charset="utf-8"></script>
<script src="../deps/adaptors/DOMStorageAdaptor.js" type="text/javascript" charset="utf-8"></script>
<script src="../deps/lawnchair.js" type="text/javascript" charset="utf-8"></script>
<script src="../src/datacache.js" type="text/javascript" charset="utf-8"></script>
</head>
<body>
<h2 id="qunit-banner">DataCache Use Case 3 [needs server]</h2>
<h2 id="qunit-userAgent"></h2>
<ol id="qunit-tests"></ol>
<!-- Test Case -->
<script type="text/javascript" charset="utf-8">
context('DataCache Library', function() {
// Setup as Online
DataCache.Offline = false;
DataCache.TimeoutDuration = 2000; // 2 seconds for this test
should('automatically detect and transition to Offline and Intercept requests', function() {
stop();
expect(5);
// Values
var uri = 'sleep.php';
var body = 'clientside data';
var myBody = 'intercepted data';
var method = 'GET';
// Offline Capture the Resource to intercept later
var cache = window.openDataCache();
cache.offlineTransaction(function(tx) {
addToOrder(0, 'transaction');
tx.capture(uri, body, 'text/plain', [method]);
});
// Handler for the Resource
navigator.registerOfflineHandler(uri,
function(request, response) {
addToOrder(1, 'interceptor');
ok(true, 'interceptor was called');
response.setStatus(200, Http.Status[200]);
response.setResponseText(myBody);
response.send();
},
function() {
ok(false, 'reviewer should not be called');
}
);
// Verification of Data Returned from Cache
function verify() {
if (xhr.readyState !== 4)
return;
addToOrder(2, 'onreadystate');
ok(xhr.status === 200);
ok(xhr.statusText === Http.Status[200]);
ok(xhr.responseText === myBody);
}
// DataCache Library should transition to Offline
// - xhr will Timeout
// - library will transition to Offline
// - library will handle the original request
var xhr = new XMLHttpRequest();
xhr.open('GET', uri);
xhr.onreadystatechange = verify;
xhr.send();
// End the test
setTimeout(function() {
ok(checkOrder());
start();
}, DataCache.TimeoutDuration+500);
});
should('be Offline', function() {
ok(DataCache.Offline);
});
});
</script>
</body>
</html>