| Index: sky/tests/layout/custom.sky
|
| diff --git a/sky/tests/layout/custom.sky b/sky/tests/layout/custom.sky
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..fc7399930e3390d439309f99ef8d6086e4ea58a0
|
| --- /dev/null
|
| +++ b/sky/tests/layout/custom.sky
|
| @@ -0,0 +1,85 @@
|
| +<parent style='background-color: lightblue;'>
|
| + <child style='background-color: pink;'>
|
| + <grandchild style='background-color: red; width: 25px; height: 25px;'></grandchild>
|
| + </child>
|
| + <child2 style='background-color: salmon; height: 25px;' />
|
| +</parent>
|
| +
|
| +<script>
|
| +import "../resources/third_party/unittest/unittest.dart";
|
| +import "../resources/unit.dart";
|
| +
|
| +import 'dart:async';
|
| +import 'dart:sky';
|
| +
|
| +void main() {
|
| + initUnit();
|
| +
|
| + var first = true;
|
| +
|
| + var parent = document.querySelector('parent');
|
| + var firstChild = parent.firstElementChild;
|
| + var secondChild = parent.lastElementChild;
|
| +
|
| + parent.setLayoutManager(() {
|
| + if (first) {
|
| + first = false;
|
| + parent.width = 200.0;
|
| + } else {
|
| + parent.width = 150.0;
|
| + }
|
| +
|
| + firstChild.width = 100.0;
|
| + firstChild.layout();
|
| + firstChild.x = 100.0;
|
| + firstChild.y = 50.0;
|
| + firstChild.height = 50.0;
|
| +
|
| + // The second element correctly gets it's width from it's container.
|
| + // TODO(ojan): Change the layout method to take in availableWidth
|
| + // so code doesn't need to mess with setNeedsLayout dirty bits
|
| + // in the middle of layout and so the parent and child don't need
|
| + // to coordinate as much about expectations.
|
| + secondChild.setNeedsLayout();
|
| + secondChild.layout();
|
| +
|
| + parent.height = 100.0;
|
| + });
|
| +
|
| + void assertNonChangingValues() {
|
| + expect(parent.offsetHeight, equals(100));
|
| + expect(parent.offsetTop, equals(0));
|
| + expect(parent.offsetLeft, equals(0));
|
| +
|
| + expect(firstChild.offsetWidth, equals(100));
|
| + expect(firstChild.offsetHeight, equals(50));
|
| + expect(firstChild.offsetTop, equals(50));
|
| + expect(firstChild.offsetLeft, equals(100));
|
| +
|
| + expect(secondChild.offsetHeight, equals(25));
|
| + expect(secondChild.offsetTop, equals(0));
|
| + expect(secondChild.offsetLeft, equals(0));
|
| + };
|
| +
|
| + test("should have the right sizes after layout", () {
|
| + Completer completer = new Completer();
|
| +
|
| + window.requestAnimationFrame((_) {
|
| + expect(parent.offsetWidth, equals(200));
|
| + expect(secondChild.offsetWidth, equals(200));
|
| + assertNonChangingValues();
|
| +
|
| + parent.setNeedsLayout();
|
| +
|
| + window.requestAnimationFrame((_) {
|
| + expect(parent.offsetWidth, equals(150));
|
| + expect(secondChild.offsetWidth, equals(150));
|
| + assertNonChangingValues();
|
| + completer.complete();
|
| + });
|
| + });
|
| +
|
| + return completer.future;
|
| + });
|
| +}
|
| +</script>
|
|
|