[go: nahoru, domu]

Add positionInParent and boundsInParent

Fixes: 152735784

Relnote: Added positionInParent and boundsInParent for LayoutCoordinates.

Test: New tests
Change-Id: Icacdd0909bc434cd5fd935c46e0a07b965c6a38d
diff --git a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt
index 0753797..a8e8cd8 100644
--- a/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt
+++ b/ui/ui-framework/src/androidTest/java/androidx/ui/core/test/OnPositionedTest.kt
@@ -20,12 +20,16 @@
 import androidx.test.filters.SmallTest
 import androidx.test.rule.ActivityTestRule
 import androidx.ui.core.Layout
+import androidx.ui.core.LayoutCoordinates
 import androidx.ui.core.Modifier
+import androidx.ui.core.boundsInParent
 import androidx.ui.core.globalPosition
 import androidx.ui.core.onChildPositioned
 import androidx.ui.core.onPositioned
+import androidx.ui.core.positionInParent
 import androidx.ui.core.setContent
 import androidx.ui.framework.test.TestActivity
+import androidx.ui.unit.PxBounds
 import androidx.ui.unit.PxPosition
 import androidx.ui.unit.ipx
 import androidx.ui.unit.px
@@ -232,4 +236,66 @@
         assertTrue(wrap2OnPositionedCalled)
         assertEquals(1, onChildPositionedCalledTimes)
     }
+
+    @Test
+    fun testPositionInParent() {
+        val positionedLatch = CountDownLatch(1)
+        var coordinates: LayoutCoordinates? = null
+
+        rule.runOnUiThread {
+            activity.setContentInFrameLayout {
+                FixedSize(10.ipx,
+                    PaddingModifier(5.ipx) +
+                            Modifier.onPositioned {
+                                coordinates = it
+                                positionedLatch.countDown()
+                            }
+                ) {
+                }
+            }
+        }
+        assertTrue(positionedLatch.await(1, TimeUnit.SECONDS))
+
+        rule.runOnUiThread {
+            assertEquals(PxPosition(5.px, 5.px), coordinates!!.positionInParent)
+
+            var root = coordinates!!
+            while (root.parentCoordinates != null) {
+                root = root.parentCoordinates!!
+            }
+
+            assertEquals(PxPosition.Origin, root.positionInParent)
+        }
+    }
+
+    @Test
+    fun testBoundsInParent() {
+        val positionedLatch = CountDownLatch(1)
+        var coordinates: LayoutCoordinates? = null
+
+        rule.runOnUiThread {
+            activity.setContentInFrameLayout {
+                FixedSize(10.ipx,
+                    PaddingModifier(5.ipx) +
+                            Modifier.onPositioned {
+                                coordinates = it
+                                positionedLatch.countDown()
+                            }
+                ) {
+                }
+            }
+        }
+        assertTrue(positionedLatch.await(1, TimeUnit.SECONDS))
+
+        rule.runOnUiThread {
+            assertEquals(PxBounds(5.px, 5.px, 15.px, 15.px), coordinates!!.boundsInParent)
+
+            var root = coordinates!!
+            while (root.parentCoordinates != null) {
+                root = root.parentCoordinates!!
+            }
+
+            assertEquals(PxBounds(0.px, 0.px, 20.px, 20.px), root.boundsInParent)
+        }
+    }
 }
\ No newline at end of file