Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(34)

Unified Diff: sky/tests/layout/custom.sky

Issue 1101793003: Expose minContentWidth/maxContentWidth and a callback for computing them. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: make variable names consistent Created 5 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: sky/tests/layout/custom.sky
diff --git a/sky/tests/layout/custom.sky b/sky/tests/layout/custom.sky
index e212a6e7a018ada1a43069f829e278291f24bdbf..538fa7544138f993dd4464df44e031b24b8130db 100644
--- a/sky/tests/layout/custom.sky
+++ b/sky/tests/layout/custom.sky
@@ -7,6 +7,12 @@
</parent>
</root>
+<intrinsic-container>
+ <intrinsic>
+ <intrinsic-child style="width: 10px; height: 10px; background-color: lightblue;" />
+ </intrinsic>
+</intrinsic-container>
+
<script>
import "../resources/third_party/unittest/unittest.dart";
import "../resources/unit.dart";
@@ -17,60 +23,60 @@ import 'dart:sky';
void main() {
initUnit();
- var first = true;
-
- var parent = document.querySelector('parent');
- var firstChild = parent.firstElementChild;
- var secondChild = parent.lastElementChild;
- var grandChild = document.querySelector('grandchild');
-
- parent.setLayoutManager(() {
- if (first) {
- 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));
-
- expect(grandChild.offsetWidth, equals(25));
- expect(grandChild.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();
+ var first = true;
+
+ var parent = document.querySelector('parent');
+ var firstChild = parent.firstElementChild;
+ var secondChild = parent.lastElementChild;
+ var grandChild = document.querySelector('grandchild');
+
+ parent.setLayoutManager(() {
+ if (first) {
+ 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));
+
+ expect(grandChild.offsetWidth, equals(25));
+ expect(grandChild.offsetHeight, equals(25));
+ expect(secondChild.offsetTop, equals(0));
+ expect(secondChild.offsetLeft, equals(0));
+ };
+
window.requestAnimationFrame((_) {
expect(parent.offsetWidth, equals(200));
expect(secondChild.offsetWidth, equals(200));
@@ -86,13 +92,13 @@ void main() {
parent.setLayoutManager(() {
parent.width = 250.0;
- });
+ }, () {});
window.requestAnimationFrame((_) {
expect(parent.offsetWidth, equals(250));
assertNonChangingValues();
- parent.setLayoutManager(null);
+ parent.setLayoutManager(null, null);
window.requestAnimationFrame((_) {
expect(parent.offsetWidth, equals(300));
@@ -123,5 +129,30 @@ void main() {
return completer.future;
});
+
+ test("intrinsic sizes should apply", () {
+ Completer completer = new Completer();
+
+ var intrinsic = document.querySelector('intrinsic');
+ var intrinsicChild = document.querySelector('intrinsic-child');
+
+ intrinsic.setLayoutManager(() {
+ intrinsicChild.layout();
+ }, () {
+ intrinsic.minContentWidth = intrinsicChild.minContentWidth + 5;
+ intrinsic.maxContentWidth = intrinsicChild.maxContentWidth + 7;
+ });
+
+ window.requestAnimationFrame((_) {
+ var container = document.querySelector('intrinsic-container');
+ container.style['width'] = '-webkit-min-content';
+ expect(container.offsetWidth, equals(15));
+ container.style['width'] = '-webkit-max-content';
+ expect(container.offsetWidth, equals(17));
+ completer.complete();
+ });
+
+ return completer.future;
+ });
}
</script>

Powered by Google App Engine
This is Rietveld 408576698