From 00c3dca3dc279836a272a680f549fab546b9ee9e Mon Sep 17 00:00:00 2001 From: Dmitry Ivakhnenko Date: Thu, 26 Jan 2023 17:26:30 +0300 Subject: [PATCH 1/5] add measure function test --- javascript/tests/YGMeasureTest.test.js | 30 ++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/javascript/tests/YGMeasureTest.test.js b/javascript/tests/YGMeasureTest.test.js index d222af6f..71a7c516 100644 --- a/javascript/tests/YGMeasureTest.test.js +++ b/javascript/tests/YGMeasureTest.test.js @@ -23,3 +23,33 @@ test("dont_measure_single_grow_shrink_child", () => { root.freeRecursive(); }); + +test("dont_fail_with_incomplete_measure_dimensions", () => { + const heightOnlyCallback = getMeasureCounter(Yoga, () => ({ height: 10 })); + const widthOnlyCallback = getMeasureCounter(Yoga, () => ({ width: 10 })); + const emptyCallback = getMeasureCounter(Yoga, () => ({})); + + const root = Yoga.Node.create(); + root.setWidth(100); + root.setHeight(100); + + const node1 = Yoga.Node.create(); + const node2 = Yoga.Node.create(); + const node3 = Yoga.Node.create(); + + root.insertChild(node1, root.getChildCount()); + root.insertChild(node2, root.getChildCount()); + root.insertChild(node3, root.getChildCount()); + + node1.setMeasureFunc(heightOnlyCallback); + node1.setMeasureFunc(widthOnlyCallback); + node1.setMeasureFunc(emptyCallback); + + root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); + + expect(heightOnlyCallback.get()).toBe(1); + expect(widthOnlyCallback.get()).toBe(1); + expect(emptyCallback.get()).toBe(1); + + root.freeRecursive(); +}); -- 2.50.1.windows.1 From 4df43d48f5d4af99774689b4d6d2bfcf970abc08 Mon Sep 17 00:00:00 2001 From: Dmitry Ivakhnenko Date: Thu, 26 Jan 2023 17:48:25 +0300 Subject: [PATCH 2/5] fix test --- javascript/tests/YGMeasureTest.test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/javascript/tests/YGMeasureTest.test.js b/javascript/tests/YGMeasureTest.test.js index 71a7c516..5ca2b4f4 100644 --- a/javascript/tests/YGMeasureTest.test.js +++ b/javascript/tests/YGMeasureTest.test.js @@ -41,9 +41,9 @@ test("dont_fail_with_incomplete_measure_dimensions", () => { root.insertChild(node2, root.getChildCount()); root.insertChild(node3, root.getChildCount()); - node1.setMeasureFunc(heightOnlyCallback); - node1.setMeasureFunc(widthOnlyCallback); - node1.setMeasureFunc(emptyCallback); + node1.setMeasureFunc(heightOnlyCallback.inc); + node1.setMeasureFunc(widthOnlyCallback.inc); + node1.setMeasureFunc(emptyCallback.inc); root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); -- 2.50.1.windows.1 From d38d585a78424cc00a88c2ff27cbd2c8bb8bbefd Mon Sep 17 00:00:00 2001 From: Dmitry Ivakhnenko Date: Thu, 26 Jan 2023 17:56:58 +0300 Subject: [PATCH 3/5] =?UTF-8?q?yet=20another=20fix=20for=20test=20?= =?UTF-8?q?=F0=9F=91=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- javascript/tests/YGMeasureTest.test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/javascript/tests/YGMeasureTest.test.js b/javascript/tests/YGMeasureTest.test.js index 5ca2b4f4..5ea3bc30 100644 --- a/javascript/tests/YGMeasureTest.test.js +++ b/javascript/tests/YGMeasureTest.test.js @@ -42,8 +42,8 @@ test("dont_fail_with_incomplete_measure_dimensions", () => { root.insertChild(node3, root.getChildCount()); node1.setMeasureFunc(heightOnlyCallback.inc); - node1.setMeasureFunc(widthOnlyCallback.inc); - node1.setMeasureFunc(emptyCallback.inc); + node2.setMeasureFunc(widthOnlyCallback.inc); + node3.setMeasureFunc(emptyCallback.inc); root.calculateLayout(Yoga.UNDEFINED, Yoga.UNDEFINED, Yoga.DIRECTION_LTR); -- 2.50.1.windows.1 From dcaef932dd2d01f28b9c5f93f7c087a5a371e204 Mon Sep 17 00:00:00 2001 From: Dmitry Ivakhnenko Date: Thu, 26 Jan 2023 18:06:54 +0300 Subject: [PATCH 4/5] return width and height all the times --- javascript/src_js/wrapAsm.js | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/javascript/src_js/wrapAsm.js b/javascript/src_js/wrapAsm.js index 3c03269f..e0c3c888 100644 --- a/javascript/src_js/wrapAsm.js +++ b/javascript/src_js/wrapAsm.js @@ -74,11 +74,25 @@ module.exports = (lib) => { } function wrapMeasureFunction(measureFunction) { - return lib.MeasureCallback.implement({ measure: measureFunction }); + return lib.MeasureCallback.implement({ + measure: (...args) => { + const { width, height } = measureFunction(...args); + return { + width: width ?? NaN, + height: height ?? NaN, + }; + }, + }); } patch(lib.Node.prototype, "setMeasureFunc", function (original, measureFunc) { - original.call(this, wrapMeasureFunction(measureFunc)); + // This patch is just a convenience patch, since it helps write more + // idiomatic source code (such as .setMeasureFunc(null)) + if (measureFunc) { + return original.call(this, wrapMeasureFunction(measureFunc)); + } else { + return this.unsetMeasureFunc(); + } }); function wrapDirtiedFunc(dirtiedFunction) { @@ -115,16 +129,6 @@ module.exports = (lib) => { this.free(); }); - patch(lib.Node.prototype, "setMeasureFunc", function (original, measureFunc) { - // This patch is just a convenience patch, since it helps write more - // idiomatic source code (such as .setMeasureFunc(null)) - if (measureFunc) { - return original.call(this, (...args) => measureFunc(...args)); - } else { - return this.unsetMeasureFunc(); - } - }); - patch( lib.Node.prototype, "calculateLayout", -- 2.50.1.windows.1 From b1694ce5f785aa9d241ecbca93fa4aa231e5942e Mon Sep 17 00:00:00 2001 From: Dmitry Ivakhnenko Date: Thu, 26 Jan 2023 18:07:27 +0300 Subject: [PATCH 5/5] assert dimensions too --- javascript/tests/YGMeasureTest.test.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/javascript/tests/YGMeasureTest.test.js b/javascript/tests/YGMeasureTest.test.js index 5ea3bc30..b269ffb6 100644 --- a/javascript/tests/YGMeasureTest.test.js +++ b/javascript/tests/YGMeasureTest.test.js @@ -51,5 +51,14 @@ test("dont_fail_with_incomplete_measure_dimensions", () => { expect(widthOnlyCallback.get()).toBe(1); expect(emptyCallback.get()).toBe(1); + expect(node1.getComputedWidth()).toBe(100); + expect(node1.getComputedHeight()).toBe(10); + + expect(node2.getComputedWidth()).toBe(100); + expect(node2.getComputedHeight()).toBe(0); + + expect(node3.getComputedWidth()).toBe(100); + expect(node3.getComputedHeight()).toBe(0); + root.freeRecursive(); }); -- 2.50.1.windows.1