OLD | NEW |
1 <!DOCTYPE HTML> | 1 <!DOCTYPE HTML> |
2 <html> | 2 <html> |
3 <script src='test.js'></script> | 3 <script src='test.js'></script> |
4 <script src='call_function.js'></script> | 4 <script src='call_function.js'></script> |
5 <script> | 5 <script> |
6 | 6 |
| 7 function clearCache() { |
| 8 getPageCache().cache_ = {}; |
| 9 } |
| 10 |
7 function testCallFunctionNoArgs() { | 11 function testCallFunctionNoArgs() { |
| 12 clearCache(); |
| 13 |
8 var result = callFunction(function() { return 1; }, []); | 14 var result = callFunction(function() { return 1; }, []); |
9 assertEquals(0, result.status); | 15 assertEquals(0, result.status); |
10 assertEquals(1, result.value); | 16 assertEquals(1, result.value); |
11 } | 17 } |
12 | 18 |
13 function testCallFunctionThrows() { | 19 function testCallFunctionThrows() { |
| 20 clearCache(); |
| 21 |
14 var result = callFunction(function() { throw new Error('fake error'); }, []); | 22 var result = callFunction(function() { throw new Error('fake error'); }, []); |
15 assertEquals(StatusCode.UNKNOWN_ERROR, result.status); | 23 assertEquals(StatusCode.UNKNOWN_ERROR, result.status); |
16 assertEquals('fake error', result.value); | 24 assertEquals('fake error', result.value); |
17 | 25 |
18 result = callFunction(function() { | 26 result = callFunction(function() { |
19 var e = new Error('fake error'); | 27 var e = new Error('fake error'); |
20 e.code = 77; | 28 e.code = 77; |
21 e.message = 'CUSTOM'; | 29 e.message = 'CUSTOM'; |
22 throw e; | 30 throw e; |
23 }, []); | 31 }, []); |
24 assertEquals(77, result.status); | 32 assertEquals(77, result.status); |
25 assertEquals('CUSTOM', result.value); | 33 assertEquals('CUSTOM', result.value); |
26 } | 34 } |
27 | 35 |
28 function testCallFunctionArgs() { | 36 function testCallFunctionArgs() { |
| 37 clearCache(); |
| 38 |
29 function func(primitive, elem) { | 39 function func(primitive, elem) { |
30 return [primitive, elem.querySelector('div')]; | 40 return [primitive, elem.querySelector('div')]; |
31 } | 41 } |
32 var cache = getPageCache(); | 42 var result = callFunction(func, [1, wrap(document)]); |
33 var result = callFunction(func, [1, cache.wrap(document)]); | |
34 assertEquals(0, result.status); | 43 assertEquals(0, result.status); |
35 assertEquals(1, result.value[0]); | 44 assertEquals(1, result.value[0]); |
36 assertEquals(document.querySelector('div'), cache.unwrap(result.value[1])); | 45 var cache = getPageCache(); |
| 46 assertEquals(document.querySelector('div'), unwrap(result.value[1], cache)); |
37 } | 47 } |
38 | 48 |
39 function testCallFunctionArgsUnwrappedReturn() { | 49 function testCallFunctionArgsUnwrappedReturn() { |
| 50 clearCache(); |
| 51 |
40 function func(elem) { | 52 function func(elem) { |
41 return elem.querySelector('div'); | 53 return elem.querySelector('div'); |
42 } | 54 } |
43 var cache = getPageCache(); | 55 var result = callFunction(func, [wrap(document)], true); |
44 var result = callFunction(func, [cache.wrap(document)], true); | |
45 assertEquals(document.querySelector('div'), result); | 56 assertEquals(document.querySelector('div'), result); |
46 } | 57 } |
47 | 58 |
48 function testCacheWrap() { | 59 function testCacheWrap() { |
49 var cache = new Cache(); | 60 clearCache(); |
50 assertEquals(1, cache.wrap(1)); | 61 |
51 assertEquals(1, cache.unwrap(1)); | 62 assertEquals(1, wrap(1)); |
52 assertEquals("1", cache.wrap("1")); | 63 assertEquals(1, unwrap(1)); |
53 assertEquals("1", cache.unwrap("1")); | 64 assertEquals("1", wrap("1")); |
54 assertEquals(false, cache.wrap(false)); | 65 assertEquals("1", unwrap("1")); |
55 assertEquals(false, cache.unwrap(false)); | 66 assertEquals(false, wrap(false)); |
56 assertEquals(null, cache.wrap(null)); | 67 assertEquals(false, unwrap(false)); |
57 assertEquals(null, cache.unwrap(null)); | 68 assertEquals(null, wrap(null)); |
58 assertEquals(undefined, cache.wrap(undefined)); | 69 assertEquals(null, unwrap(null)); |
59 assertEquals(undefined, cache.unwrap(undefined)); | 70 assertEquals(undefined, wrap(undefined)); |
| 71 assertEquals(undefined, unwrap(undefined)); |
60 function func() {} | 72 function func() {} |
61 assertEquals(func, cache.wrap(func)); | 73 assertEquals(func, wrap(func)); |
62 assertEquals(func, cache.unwrap(func)); | 74 assertEquals(func, unwrap(func)); |
63 | 75 |
| 76 var cache = getPageCache(); |
64 var arr = [1, new Array(1, new Object({a: 1, b: {a: 1, b: {}, c: 3}}), 3)]; | 77 var arr = [1, new Array(1, new Object({a: 1, b: {a: 1, b: {}, c: 3}}), 3)]; |
65 var originalJson = JSON.stringify(arr); | 78 var originalJson = JSON.stringify(arr); |
66 arr[1][1].b.b[ELEMENT_KEY] = cache.nextId_.toString(); | 79 arr[1][1].b.b[ELEMENT_KEY] = cache.idPrefix_ + ':' + cache.nextId_; |
67 var wrappedJson = JSON.stringify(arr); | 80 var wrappedJson = JSON.stringify(arr); |
68 arr[1][1].b.b = document; | 81 arr[1][1].b.b = document; |
69 assertEquals(wrappedJson, JSON.stringify(cache.wrap(arr))); | 82 assertEquals(wrappedJson, JSON.stringify(wrap(arr))); |
70 var unwrapped = cache.unwrap(JSON.parse(wrappedJson)); | 83 var unwrapped = unwrap(JSON.parse(wrappedJson), cache); |
71 assertEquals(document, unwrapped[1][1].b.b); | 84 assertEquals(document, unwrapped[1][1].b.b); |
72 unwrapped[1][1].b.b = {}; | 85 unwrapped[1][1].b.b = {}; |
73 assertEquals(originalJson, JSON.stringify(unwrapped)); | 86 assertEquals(originalJson, JSON.stringify(unwrapped)); |
74 } | 87 } |
75 | 88 |
76 function testCacheDoubleWrap() { | 89 function testCacheDoubleWrap() { |
77 var cache = new Cache(); | 90 clearCache(); |
78 assertEquals(cache.wrap(document)[ELEMENT_KEY], | 91 |
79 cache.wrap(document)[ELEMENT_KEY]); | 92 assertEquals(wrap(document)[ELEMENT_KEY], wrap(document)[ELEMENT_KEY]); |
80 } | 93 } |
81 | 94 |
82 function testCacheUnwrapThrows() { | 95 function testCacheUnwrapThrows() { |
| 96 clearCache(); |
| 97 |
83 try { | 98 try { |
84 var cache = new Cache(); | |
85 var wrapped = {}; | 99 var wrapped = {}; |
86 wrapped[ELEMENT_KEY] = '1'; | 100 wrapped[ELEMENT_KEY] = '1'; |
87 cache.unwrap(wrapped); | 101 unwrap(wrapped, getPageCache()); |
| 102 assert(false); |
88 } catch (e) { | 103 } catch (e) { |
89 return; | |
90 } | 104 } |
91 assert(false); | |
92 } | 105 } |
93 | 106 |
94 function testClearStale() { | 107 function testClearStale() { |
| 108 clearCache(); |
| 109 |
95 var doc = document; | 110 var doc = document; |
96 var div = doc.querySelector('div'); | 111 var div = doc.querySelector('div'); |
97 var span = doc.querySelector('span'); | 112 var span = doc.querySelector('span'); |
98 | 113 |
99 var cache = new Cache(); | 114 var wrappedDoc = wrap(doc); |
100 var wrappedDoc = cache.wrap(doc); | 115 var wrappedDiv = wrap(div); |
101 var wrappedDiv = cache.wrap(div); | 116 var wrappedSpan = wrap(span); |
102 var wrappedSpan = cache.wrap(span); | |
103 | 117 |
| 118 var cache = getPageCache(); |
104 cache.clearStale(); | 119 cache.clearStale(); |
105 assertEquals(doc, cache.unwrap(wrappedDoc)); | 120 assertEquals(doc, unwrap(wrappedDoc, cache)); |
106 assertEquals(div, cache.unwrap(wrappedDiv)); | 121 assertEquals(div, unwrap(wrappedDiv, cache)); |
107 assertEquals(span, cache.unwrap(wrappedSpan)); | 122 assertEquals(span, unwrap(wrappedSpan, cache)); |
108 | 123 |
109 div.removeChild(span); | 124 div.removeChild(span); |
110 cache.clearStale(); | 125 cache.clearStale(); |
111 assertEquals(doc, cache.unwrap(wrappedDoc)); | 126 assertEquals(doc, unwrap(wrappedDoc, cache)); |
112 assertEquals(div, cache.unwrap(wrappedDiv)); | 127 assertEquals(div, unwrap(wrappedDiv, cache)); |
113 try { | 128 try { |
114 cache.unwrap(wrappedSpan); | 129 unwrap(wrappedSpan, cache); |
| 130 assert(false); |
115 } catch (e) { | 131 } catch (e) { |
116 return; | |
117 } | 132 } |
118 assert(false); | |
119 } | 133 } |
120 | 134 |
121 function testCacheQuerySelector() { | 135 function testCacheQuerySelector() { |
122 var cache = new Cache(); | 136 clearCache(); |
| 137 |
| 138 var cache = getPageCache(); |
123 assertEquals(document.querySelector('div'), | 139 assertEquals(document.querySelector('div'), |
124 cache.unwrap(cache.wrap(document.querySelector('div')))); | 140 unwrap(wrap(document.querySelector('div')), cache)); |
125 assertEquals(document.querySelectorAll('div')[0], | 141 assertEquals(document.querySelectorAll('div')[0], |
126 cache.unwrap(cache.wrap(document.querySelectorAll('div')))[0]); | 142 unwrap(wrap(document.querySelectorAll('div')), cache)[0]); |
127 } | 143 } |
128 | 144 |
129 function testCacheStaleRef() { | 145 function testCacheStaleRef() { |
130 var cache = new Cache(); | 146 clearCache(); |
| 147 |
| 148 var cache = getPageCache(); |
131 var img = document.createElement('img'); | 149 var img = document.createElement('img'); |
132 document.body.appendChild(img); | 150 document.body.appendChild(img); |
133 var wrappedImg = cache.wrap(img); | 151 var wrappedImg = wrap(img); |
134 document.body.removeChild(img); | 152 document.body.removeChild(img); |
135 cache.clearStale(); | 153 cache.clearStale(); |
136 try { | 154 try { |
137 cache.unwrap(wrappedImg); | 155 unwrap(wrappedImg, cache); |
| 156 assert(false); |
138 } catch (e) { | 157 } catch (e) { |
139 assertEquals(StatusCode.STALE_ELEMENT_REFERENCE, e.code); | 158 assertEquals(StatusCode.STALE_ELEMENT_REFERENCE, e.code); |
140 return; | |
141 } | 159 } |
142 assert(false); | |
143 } | 160 } |
144 | 161 |
145 </script> | 162 </script> |
146 <body> | 163 <body> |
147 <div><span></span></div> | 164 <div><span></span></div> |
148 </body> | 165 </body> |
149 </html> | 166 </html> |
OLD | NEW |