| <sky> |
| <style> |
| foo, parent { width: 100px; height: 100px; background: blue; } |
| bar { width: 100px; height: 100px; background: purple; } |
| parent { display: paragraph; } |
| child { background: salmon; } |
| canvas { height: 50px; background-color: pink; } |
| inline-block { display: inline-block; 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-block> |
| <grand-child /> |
| </inline-block> |
| </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"] = "block"; |
| 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-block')); |
| // 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> |