diff --git a/CSSLayout/CSSLayout.c b/CSSLayout/CSSLayout.c index d9d7d65b..4aac54ec 100644 --- a/CSSLayout/CSSLayout.c +++ b/CSSLayout/CSSLayout.c @@ -259,8 +259,13 @@ static void _CSSNodeMarkDirty(const CSSNodeRef node) { } void CSSNodeSetMeasureFunc(const CSSNodeRef node, CSSMeasureFunc measureFunc) { - CSS_ASSERT(CSSNodeChildCount(node) == 0, "Cannot set measure function: Nodes with measure functions cannot have children."); - node->measure = measureFunc; + // You can always NULLify the measure function of a node. + if (measureFunc == NULL) { + node->measure = NULL; + } else { + CSS_ASSERT(CSSNodeChildCount(node) == 0, "Cannot set measure function: Nodes with measure functions cannot have children."); + node->measure = measureFunc; + } } CSSMeasureFunc CSSNodeGetMeasureFunc(const CSSNodeRef node) { diff --git a/tests/CSSLayoutMeasureTest.cpp b/tests/CSSLayoutMeasureTest.cpp index 960f3e50..cfed9363 100644 --- a/tests/CSSLayoutMeasureTest.cpp +++ b/tests/CSSLayoutMeasureTest.cpp @@ -28,13 +28,25 @@ TEST(CSSLayoutTest, cannot_add_child_to_node_with_measure_func) { const CSSNodeRef root_child0 = CSSNodeNew(); ASSERT_DEATH(CSSNodeInsertChild(root, root_child0, 0), "Cannot add child.*"); + CSSNodeFreeRecursive(root); } -TEST(CSSLayoutTest, cannot_add_measure_func_to_non_leaf_node) { +TEST(CSSLayoutTest, cannot_add_nonnull_measure_func_to_non_leaf_node) { const CSSNodeRef root = CSSNodeNew(); const CSSNodeRef root_child0 = CSSNodeNew(); CSSNodeInsertChild(root, root_child0, 0); ASSERT_DEATH(CSSNodeSetMeasureFunc(root, _measure), "Cannot set measure function.*"); + CSSNodeFreeRecursive(root); } + +TEST(CSSLayoutTest, can_nullify_measure_func_on_any_node) { + const CSSNodeRef root = CSSNodeNew(); + CSSNodeInsertChild(root, CSSNodeNew(), 0); + + CSSNodeSetMeasureFunc(root, NULL); + ASSERT_TRUE(CSSNodeGetMeasureFunc(root) == NULL); + CSSNodeFreeRecursive(root); +} + #endif