diff --git a/gentest/fixtures/YGIntrinsicSizeTest.html b/gentest/fixtures/YGIntrinsicSizeTest.html
new file mode 100644
index 00000000..962b2417
--- /dev/null
+++ b/gentest/fixtures/YGIntrinsicSizeTest.html
@@ -0,0 +1,221 @@
+
+
+ LoremipsumdolorsitametconsecteturadipiscingelitSedeleifasdfettortoracauctorFuscerhoncusipsumtemporerosaliquamconsequatPraesentsoda
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus
+ loremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumlorem
+ Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
+
+
+
+
+
+
+
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
+ volutpat
+ libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
+ fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
+ vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
+ vitae
+ finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
+ consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
+ tincidunt
+ finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
+ vulputate eleifasd lectus vel varius.
+ Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
+ in
+ faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
+ venenatis
+ turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
+ nunc
+ malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
+ lobortis.
+ Sed at consectetur ipsum.
+
+
diff --git a/gentest/fonts/Ahem.ttf b/gentest/fonts/Ahem.ttf
new file mode 100644
index 00000000..ac81cb03
Binary files /dev/null and b/gentest/fonts/Ahem.ttf differ
diff --git a/gentest/gentest-cpp.js b/gentest/gentest-cpp.js
index 02e5c070..271cb060 100644
--- a/gentest/gentest-cpp.js
+++ b/gentest/gentest-cpp.js
@@ -30,7 +30,12 @@ CPPEmitter.prototype = Object.create(Emitter.prototype, {
emitPrologue: {
value: function () {
- this.push(['#include ', '#include ', '']);
+ this.push([
+ '#include ',
+ '#include ',
+ '#include "../util/TestUtil.h"',
+ '',
+ ]);
},
},
@@ -503,4 +508,13 @@ CPPEmitter.prototype = Object.create(Emitter.prototype, {
);
},
},
+
+ YGNodeSetMeasureFunc: {
+ value: function (nodeName, innerText) {
+ this.push(`YGNodeSetContext(${nodeName}, (void*)"${innerText}");`);
+ this.push(
+ `YGNodeSetMeasureFunc(${nodeName}, &facebook::yoga::test::IntrinsicSizeMeasure);`,
+ );
+ },
+ },
});
diff --git a/gentest/gentest-java.js b/gentest/gentest-java.js
index 6f131a1a..584a22e3 100644
--- a/gentest/gentest-java.js
+++ b/gentest/gentest-java.js
@@ -55,6 +55,7 @@ JavaEmitter.prototype = Object.create(Emitter.prototype, {
'import org.junit.Test;',
'import org.junit.runner.RunWith;',
'import org.junit.runners.Parameterized;',
+ 'import com.facebook.yoga.utils.TestUtils;',
'',
'@RunWith(Parameterized.class)',
'public class YogaTest {',
@@ -465,4 +466,13 @@ JavaEmitter.prototype = Object.create(Emitter.prototype, {
);
},
},
+
+ YGNodeSetMeasureFunc: {
+ value: function (nodeName, innerText) {
+ this.push(`${nodeName}.setData("${innerText}");`);
+ this.push(
+ `${nodeName}.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());`,
+ );
+ },
+ },
});
diff --git a/gentest/gentest-javascript.js b/gentest/gentest-javascript.js
index ca095268..418443da 100644
--- a/gentest/gentest-javascript.js
+++ b/gentest/gentest-javascript.js
@@ -23,6 +23,9 @@ JavascriptEmitter.prototype = Object.create(Emitter.prototype, {
emitPrologue: {
value: function () {
+ this.push(
+ "import { instrinsicSizeMeasureFunc } from '../tools/utils.ts'",
+ );
this.push("import Yoga from 'yoga-layout';");
this.push('import {');
this.pushIndent();
@@ -398,4 +401,12 @@ JavascriptEmitter.prototype = Object.create(Emitter.prototype, {
);
},
},
+
+ YGNodeSetMeasureFunc: {
+ value: function (nodeName, innerText) {
+ this.push(
+ `${nodeName}.setMeasureFunc(instrinsicSizeMeasureFunc.bind("${innerText}"));`,
+ );
+ },
+ },
});
diff --git a/gentest/gentest.js b/gentest/gentest.js
index 8223a0ef..39408b6a 100755
--- a/gentest/gentest.js
+++ b/gentest/gentest.js
@@ -528,6 +528,10 @@ function setupTestTree(
e.YGNodeInsertChild(parentName, nodeName, index);
}
+ if (node.innerText && node.children.length === 0) {
+ e.YGNodeSetMeasureFunc(nodeName, node.innerText);
+ }
+
for (let i = 0; i < node.children.length; i++) {
e.push('');
const childName = nodeName + '_child' + i;
@@ -723,6 +727,7 @@ function calculateTree(root, parentOffsetLeft, parentOffsetTop) {
? child.dataset.experiments.split(' ')
: [],
disabled: child.dataset.disabled === 'true',
+ innerText: child.innerText,
};
const size = getRoundedSize(child);
diff --git a/gentest/test-template.html b/gentest/test-template.html
index cab620be..079eb4df 100644
--- a/gentest/test-template.html
+++ b/gentest/test-template.html
@@ -1,70 +1,78 @@
-
-
- %s
-
-
-
-
-
-
+ body>* {
+ position: absolute;
+ }
-
-
+ #ltr-container>* {
+ position: absolute;
+ direction: ltr;
+ }
- %s
+ #rtl-container>* {
+ position: absolute;
+ direction: rtl;
+ }
-
-
-
+
+
- %s
+
+
+ %s
-
+
+
+
+
+ %s
+
+
+
-
-