| OLD | NEW |
| (Empty) |
| 1 <!DOCTYPE html> | |
| 2 <html> | |
| 3 <head> | |
| 4 <!-- TODO(arv): Check in Closue unit tests and make this run as part of the | |
| 5 tests --> | |
| 6 <script src="http://closure-library.googlecode.com/svn/trunk/closure/goog/base.j
s"></script> | |
| 7 <script src="../../cr.js"></script> | |
| 8 <script src="position_util.js"></script> | |
| 9 <script> | |
| 10 | |
| 11 goog.require('goog.testing.PropertyReplacer'); | |
| 12 goog.require('goog.testing.jsunit'); | |
| 13 | |
| 14 </script> | |
| 15 <style> | |
| 16 | |
| 17 html, body { | |
| 18 margin: 0; | |
| 19 width: 100%; | |
| 20 height: 100%; | |
| 21 } | |
| 22 | |
| 23 #anchor { | |
| 24 position: absolute; | |
| 25 width: 10px; | |
| 26 height: 10px; | |
| 27 background: green; | |
| 28 } | |
| 29 | |
| 30 #popup { | |
| 31 position: absolute; | |
| 32 top: 0; | |
| 33 left: 0; | |
| 34 width: 100px; | |
| 35 height: 100px; | |
| 36 background: red; | |
| 37 } | |
| 38 | |
| 39 </style> | |
| 40 </head> | |
| 41 <body> | |
| 42 | |
| 43 <div id=anchor></div> | |
| 44 <div id=popup></div> | |
| 45 | |
| 46 <script> | |
| 47 | |
| 48 var anchor = document.getElementById('anchor'); | |
| 49 var popup = document.getElementById('popup'); | |
| 50 var anchorParent = anchor.offsetParent; | |
| 51 var pr = new goog.testing.PropertyReplacer; | |
| 52 var availRect; | |
| 53 | |
| 54 function MockRect(w, h) { | |
| 55 this.width = w; | |
| 56 this.height = h; | |
| 57 this.right = this.left + w; | |
| 58 this.bottom = this.top + h; | |
| 59 } | |
| 60 MockRect.prototype = { | |
| 61 left: 0, | |
| 62 top: 0 | |
| 63 }; | |
| 64 | |
| 65 function setUp() { | |
| 66 anchor.style.top = '100px'; | |
| 67 anchor.style.left = '100px'; | |
| 68 availRect = new MockRect(200, 200); | |
| 69 pr.set(anchorParent, 'getBoundingClientRect', function() { | |
| 70 return availRect; | |
| 71 }); | |
| 72 } | |
| 73 | |
| 74 function tearDown() { | |
| 75 document.documentElement.dir = 'ltr'; | |
| 76 pr.reset(); | |
| 77 } | |
| 78 | |
| 79 function testAbovePrimary() { | |
| 80 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE); | |
| 81 | |
| 82 assertEquals('auto', popup.style.top); | |
| 83 assertEquals('100px', popup.style.bottom); | |
| 84 | |
| 85 anchor.style.top = '90px'; | |
| 86 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE); | |
| 87 assertEquals('100px', popup.style.top); | |
| 88 assertEquals('auto', popup.style.bottom); | |
| 89 } | |
| 90 | |
| 91 function testBelowPrimary() { | |
| 92 // ensure enough below | |
| 93 anchor.style.top = '90px'; | |
| 94 | |
| 95 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW); | |
| 96 | |
| 97 assertEquals('100px', popup.style.top); | |
| 98 assertEquals('auto', popup.style.bottom); | |
| 99 | |
| 100 // ensure not enough below | |
| 101 anchor.style.top = '100px'; | |
| 102 | |
| 103 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW); | |
| 104 assertEquals('auto', popup.style.top); | |
| 105 assertEquals('100px', popup.style.bottom); | |
| 106 } | |
| 107 | |
| 108 function testBeforePrimary() { | |
| 109 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BEFORE); | |
| 110 | |
| 111 assertEquals('auto', popup.style.left); | |
| 112 assertEquals('100px', popup.style.right); | |
| 113 | |
| 114 anchor.style.left = '90px'; | |
| 115 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BEFORE); | |
| 116 assertEquals('100px', popup.style.left); | |
| 117 assertEquals('auto', popup.style.right); | |
| 118 } | |
| 119 | |
| 120 function testBeforePrimaryRtl() { | |
| 121 document.documentElement.dir = 'rtl'; | |
| 122 | |
| 123 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 124 | |
| 125 assertEquals('auto', popup.style.left); | |
| 126 assertEquals('100px', popup.style.right); | |
| 127 | |
| 128 anchor.style.left = '90px'; | |
| 129 | |
| 130 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 131 assertEquals('100px', popup.style.left); | |
| 132 assertEquals('auto', popup.style.right); | |
| 133 } | |
| 134 | |
| 135 function testAfterPrimary() { | |
| 136 // ensure enough to the right | |
| 137 anchor.style.left = '90px'; | |
| 138 | |
| 139 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 140 | |
| 141 assertEquals('100px', popup.style.left); | |
| 142 assertEquals('auto', popup.style.right); | |
| 143 | |
| 144 // ensure not enough below | |
| 145 anchor.style.left = '100px'; | |
| 146 | |
| 147 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 148 assertEquals('auto', popup.style.left); | |
| 149 assertEquals('100px', popup.style.right); | |
| 150 } | |
| 151 | |
| 152 function testAfterPrimaryRtl() { | |
| 153 document.documentElement.dir = 'rtl'; | |
| 154 | |
| 155 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 156 | |
| 157 assertEquals('auto', popup.style.left); | |
| 158 assertEquals('100px', popup.style.right); | |
| 159 | |
| 160 // ensure not enough below | |
| 161 anchor.style.left = '90px'; | |
| 162 | |
| 163 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 164 assertEquals('100px', popup.style.left); | |
| 165 assertEquals('auto', popup.style.right); | |
| 166 } | |
| 167 | |
| 168 function testAboveSecondary() { | |
| 169 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE); | |
| 170 | |
| 171 assertEquals('100px', popup.style.left); | |
| 172 assertEquals('auto', popup.style.right); | |
| 173 | |
| 174 anchor.style.left = '110px'; | |
| 175 | |
| 176 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE); | |
| 177 | |
| 178 assertEquals('auto', popup.style.left); | |
| 179 assertEquals('80px', popup.style.right); | |
| 180 } | |
| 181 | |
| 182 function testAboveSecondaryRtl() { | |
| 183 document.documentElement.dir = 'rtl'; | |
| 184 | |
| 185 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE); | |
| 186 | |
| 187 assertEquals('auto', popup.style.left); | |
| 188 assertEquals('90px', popup.style.right); | |
| 189 | |
| 190 anchor.style.left = '80px'; | |
| 191 | |
| 192 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE); | |
| 193 | |
| 194 assertEquals('80px', popup.style.left); | |
| 195 assertEquals('auto', popup.style.right); | |
| 196 } | |
| 197 | |
| 198 function testAboveSecondarySwappedAlign() { | |
| 199 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE, true); | |
| 200 | |
| 201 assertEquals('auto', popup.style.left); | |
| 202 assertEquals('90px', popup.style.right); | |
| 203 | |
| 204 anchor.style.left = '80px'; | |
| 205 | |
| 206 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.ABOVE, true); | |
| 207 | |
| 208 assertEquals('80px', popup.style.left); | |
| 209 assertEquals('auto', popup.style.right); | |
| 210 } | |
| 211 | |
| 212 function testBelowSecondary() { | |
| 213 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW); | |
| 214 | |
| 215 assertEquals('100px', popup.style.left); | |
| 216 assertEquals('auto', popup.style.right); | |
| 217 | |
| 218 anchor.style.left = '110px'; | |
| 219 | |
| 220 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW); | |
| 221 | |
| 222 assertEquals('auto', popup.style.left); | |
| 223 assertEquals('80px', popup.style.right); | |
| 224 } | |
| 225 | |
| 226 function testBelowSecondaryRtl() { | |
| 227 document.documentElement.dir = 'rtl'; | |
| 228 | |
| 229 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW); | |
| 230 | |
| 231 assertEquals('auto', popup.style.left); | |
| 232 assertEquals('90px', popup.style.right); | |
| 233 | |
| 234 anchor.style.left = '80px'; | |
| 235 | |
| 236 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW); | |
| 237 | |
| 238 assertEquals('80px', popup.style.left); | |
| 239 assertEquals('auto', popup.style.right); | |
| 240 } | |
| 241 | |
| 242 function testBelowSecondarySwappedAlign() { | |
| 243 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW, true); | |
| 244 | |
| 245 assertEquals('auto', popup.style.left); | |
| 246 assertEquals('90px', popup.style.right); | |
| 247 | |
| 248 anchor.style.left = '80px'; | |
| 249 | |
| 250 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BELOW, true); | |
| 251 | |
| 252 assertEquals('80px', popup.style.left); | |
| 253 assertEquals('auto', popup.style.right); | |
| 254 } | |
| 255 | |
| 256 function testBeforeSecondary() { | |
| 257 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BEFORE); | |
| 258 | |
| 259 assertEquals('100px', popup.style.top); | |
| 260 assertEquals('auto', popup.style.bottom); | |
| 261 | |
| 262 anchor.style.top = '110px'; | |
| 263 | |
| 264 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.BEFORE); | |
| 265 | |
| 266 assertEquals('auto', popup.style.top); | |
| 267 assertEquals('80px', popup.style.bottom); | |
| 268 } | |
| 269 | |
| 270 function testAfterSecondary() { | |
| 271 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 272 | |
| 273 assertEquals('100px', popup.style.top); | |
| 274 assertEquals('auto', popup.style.bottom); | |
| 275 | |
| 276 anchor.style.top = '110px'; | |
| 277 | |
| 278 cr.ui.positionPopupAroundElement(anchor, popup, cr.ui.AnchorType.AFTER); | |
| 279 | |
| 280 assertEquals('auto', popup.style.top); | |
| 281 assertEquals('80px', popup.style.bottom); | |
| 282 } | |
| 283 | |
| 284 function testPositionAtPoint() { | |
| 285 cr.ui.positionPopupAtPoint(100, 100, popup); | |
| 286 | |
| 287 assertEquals('100px', popup.style.left); | |
| 288 assertEquals('100px', popup.style.top); | |
| 289 assertEquals('auto', popup.style.right); | |
| 290 assertEquals('auto', popup.style.bottom); | |
| 291 | |
| 292 cr.ui.positionPopupAtPoint(100, 150, popup); | |
| 293 | |
| 294 assertEquals('100px', popup.style.left); | |
| 295 assertEquals('auto', popup.style.top); | |
| 296 assertEquals('auto', popup.style.right); | |
| 297 assertEquals('50px', popup.style.bottom); | |
| 298 | |
| 299 cr.ui.positionPopupAtPoint(150, 150, popup); | |
| 300 | |
| 301 assertEquals('auto', popup.style.left); | |
| 302 assertEquals('auto', popup.style.top); | |
| 303 assertEquals('50px', popup.style.right); | |
| 304 assertEquals('50px', popup.style.bottom); | |
| 305 } | |
| 306 | |
| 307 </script> | |
| 308 | |
| 309 </body> | |
| 310 </html> | |
| OLD | NEW |