Chromium Code Reviews| 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 |