flutter_flutter/tests/layout/document-elementFromPoint.sky
Ojan Vafai b9f182a6bd Stop rendering text inside flex boxes.
Text can only only inside paragraphs and inlines. This patch makes it
so we stop putting such text nodes in the render tree at all if their
parent is not a paragraph or an inline.

This is the final step in making it so that we don't create anonymous
renderers, which fixes a crash in the new custom layout code.

R=eseidel@chromium.org

Review URL: https://codereview.chromium.org/1077473002
2015-04-09 11:40:03 -07:00

76 lines
2.6 KiB
Plaintext

<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>