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