blob: 94257d81cd6491aa7c4908810d9e4c94bd5fe675 [file] [log] [blame] [edit]
<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>