| <sky> | 
 | <style> | 
 | foo, parent { width: 100px; height: 100px; background: blue; } | 
 | bar { width: 100px; height: 100px; background: purple; } | 
 | parent { display: paragraph; } | 
 | child { background: salmon; display: paragraph; } | 
 | canvas { height: 50px; background-color: pink; } | 
 | inline-flex { display: inline-flex; width: 50px; height: 50px; background: green; } | 
 | grand-child { width: 50px; height: 50px; transform: translate3d(100px, 0, 0); background: papayawhip; } | 
 | </style> | 
 | <foo /><bar /> | 
 | <parent> | 
 |   <child>Foo bar</child> | 
 |   <inline-flex> | 
 |     <grand-child /> | 
 |   </inline-flex> | 
 | </parent> | 
 | <canvas /> | 
 | <script> | 
 | import "../resources/third_party/unittest/unittest.dart"; | 
 | import "../resources/unit.dart"; | 
 |  | 
 | import "dart:sky"; | 
 |  | 
 | void main() { | 
 |   initUnit(); | 
 |  | 
 |   test("should hit test", () { | 
 |     // FIXME: We should have much better hit-testing coverage, at least: | 
 |     // inline content (both sections of a wrapped run) | 
 |     // text node | 
 |     // flex box | 
 |     // display: paragraph | 
 |     // position: absolute | 
 |     // position: relative | 
 |     // z-order (missing, zero, positive and negative) | 
 |     expect(document.elementFromPoint(50, 50).tagName, equals('foo')); | 
 |     expect(document.elementFromPoint(50, 150).tagName, equals('bar')); | 
 |     expect(document.elementFromPoint(150, 50).tagName, equals('sky')); | 
 |   }); | 
 |  | 
 |   void hitTestWithChildren() { | 
 |     expect(document.elementFromPoint(50, 210).tagName, equals('child')); | 
 |     // Right of the <child> inline. | 
 |     expect(document.elementFromPoint(95, 210).tagName, equals('parent')); | 
 |     // Below the <child> inline. | 
 |     expect(document.elementFromPoint(50, 275).tagName, equals('parent')); | 
 |   } | 
 |  | 
 |   test("should hit test child and parent", () { | 
 |     hitTestWithChildren(); | 
 |   }); | 
 |  | 
 |   test("should hit test child with layered parent", () { | 
 |     document.querySelector('parent').style["transform"] = "translate3d(0, 0, 0)"; | 
 |     hitTestWithChildren(); | 
 |   }); | 
 |  | 
 |   test("should hit test transformed child", () { | 
 |     document.querySelector('parent').style["display"] = "flex"; | 
 |     document.querySelector('child').style["transform"] = "translate3d(100px, 0, 0)"; | 
 |     expect(document.elementFromPoint(50, 210).tagName, equals('parent')); | 
 |     expect(document.elementFromPoint(150, 210).tagName, equals('child')); | 
 |     expect(document.elementFromPoint(25, 240).tagName, equals('inline-flex')); | 
 |     // TODO(ojan): This is incorrect. It should hit grand-child. | 
 |     // This broke sometime before 4153b8a515d54275934d4244aaf2d5a7a8fe3333. | 
 |     expect(document.elementFromPoint(150, 240).tagName, equals('sky')); | 
 |   }); | 
 |  | 
 |   test("should hit test canvas", () { | 
 |     expect(document.elementFromPoint(50, 310).tagName, equals('canvas')); | 
 |   }); | 
 | } | 
 | </script> | 
 | </sky> |