Skip to content

Commit 1a3bc6b

Browse files
Maddie Lordfacebook-github-bot
authored andcommitted
Add test support for intrinsic sized nodes (facebook#1671)
Summary: Pull Request resolved: facebook#1671 This diff adds support for intrinsic sizing in generated tests. This is done by importing a testing font called "Ahem" which, as used, has an exact width and height of 10px for each character. Support has been added for C++, Java, and Javascript generated tests. Reviewed By: NickGerleman Differential Revision: D58307002 fbshipit-source-id: e1dcc1e03310d35a32e0c70f71994880d8f7de55
1 parent 0888b20 commit 1a3bc6b

File tree

77 files changed

+2297
-132
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

77 files changed

+2297
-132
lines changed
Lines changed: 221 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,221 @@
1+
<div id="contains_inner_text_long_word" style="width:2000px;height:2000px;align-items: flex-start;">
2+
<div style="flex-direction:row;">
3+
LoremipsumdolorsitametconsecteturadipiscingelitSedeleifasdfettortoracauctorFuscerhoncusipsumtemporerosaliquamconsequatPraesentsoda
4+
</div>
5+
</div>
6+
7+
<div id="contains_inner_text_no_width_no_height" style="width:2000px;height:2000px;align-items: flex-start;">
8+
<div style="flex-direction:row;">
9+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
10+
volutpat
11+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
12+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
13+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
14+
vitae
15+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
16+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
17+
tincidunt
18+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
19+
vulputate eleifasd lectus vel varius.
20+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
21+
in
22+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
23+
venenatis
24+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
25+
nunc
26+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
27+
lobortis.
28+
Sed at consectetur ipsum.
29+
</div>
30+
</div>
31+
32+
<div id="contains_inner_text_no_width_no_height_long_word_in_paragraph"
33+
style="width:2000px;height:2000px;align-items: flex-start;">
34+
<div style="flex-direction:row;">
35+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
36+
volutpat
37+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
38+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
39+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
40+
vitae
41+
finibus
42+
loremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumloremipsumlorem
43+
Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
44+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
45+
tincidunt
46+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
47+
vulputate eleifasd lectus vel varius.
48+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
49+
in
50+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
51+
venenatis
52+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
53+
nunc
54+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
55+
lobortis.
56+
Sed at consectetur ipsum.
57+
</div>
58+
</div>
59+
60+
<div id="contains_inner_text_fixed_width" style="width:2000px;height:2000px;align-items: flex-start;">
61+
<div style="flex-direction:row;width:100px">
62+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
63+
volutpat
64+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
65+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
66+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
67+
vitae
68+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
69+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
70+
tincidunt
71+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
72+
vulputate eleifasd lectus vel varius.
73+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
74+
in
75+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
76+
venenatis
77+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
78+
nunc
79+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
80+
lobortis.
81+
Sed at consectetur ipsum.
82+
</div>
83+
</div>
84+
85+
<div id="contains_inner_text_no_width_fixed_height" style="width:2000px;height:2000px;align-items: flex-start;">
86+
<div style="flex-direction:row;height:20px">
87+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
88+
volutpat
89+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
90+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
91+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
92+
vitae
93+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
94+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
95+
tincidunt
96+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
97+
vulputate eleifasd lectus vel varius.
98+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
99+
in
100+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
101+
venenatis
102+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
103+
nunc
104+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
105+
lobortis.
106+
Sed at consectetur ipsum.
107+
</div>
108+
</div>
109+
110+
<div id="contains_inner_text_fixed_width_fixed_height" style="width:2000px;height:2000px;align-items: flex-start;">
111+
<div style="flex-direction:row;width: 50px; height:20px">
112+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
113+
volutpat
114+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
115+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
116+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
117+
vitae
118+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
119+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
120+
tincidunt
121+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
122+
vulputate eleifasd lectus vel varius.
123+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
124+
in
125+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
126+
venenatis
127+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
128+
nunc
129+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
130+
lobortis.
131+
Sed at consectetur ipsum.
132+
</div>
133+
</div>
134+
135+
<div id="contains_inner_text_max_width_max_height" style="width:2000px;height:2000px;align-items: flex-start;">
136+
<div style="flex-direction:row;max-width: 50px; max-height:20px">
137+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
138+
volutpat
139+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
140+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
141+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
142+
vitae
143+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
144+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
145+
tincidunt
146+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
147+
vulputate eleifasd lectus vel varius.
148+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
149+
in
150+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
151+
venenatis
152+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
153+
nunc
154+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
155+
lobortis.
156+
Sed at consectetur ipsum.
157+
</div>
158+
</div>
159+
160+
161+
<div id="contains_inner_text_max_width" style="width:2000px;height:2000px;align-items: flex-start;">
162+
<div style="flex-direction:row;max-width:100px">
163+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
164+
volutpat
165+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
166+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
167+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
168+
vitae
169+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
170+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
171+
tincidunt
172+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
173+
vulputate eleifasd lectus vel varius.
174+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
175+
in
176+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
177+
venenatis
178+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
179+
nunc
180+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
181+
lobortis.
182+
Sed at consectetur ipsum.
183+
</div>
184+
</div>
185+
186+
<div id="contains_inner_text_fixed_width_shorter_text" style="width:2000px;height:2000px;align-items: flex-start;">
187+
<div style="flex-direction:row;width:100px">
188+
Lorem ipsum
189+
</div>
190+
</div>
191+
192+
<div id="contains_inner_text_fixed_height_shorter_text" style="width:2000px;height:2000px;align-items: flex-start;">
193+
<div style="flex-direction:row;height:100px">
194+
Lorem ipsum
195+
</div>
196+
</div>
197+
198+
<div id="contains_inner_text_max_height" style="width:2000px;height:2000px;align-items: flex-start;">
199+
<div style="flex-direction:row;max-height:20px">
200+
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed eleifasd et tortor ac auctor. Integer at
201+
volutpat
202+
libero, sed elementum dui interdum id. Aliquam consectetur massa vel neque aliquet, quis consequat risus
203+
fringilla. Fusce rhoncus ipsum tempor eros aliquam, vel tempus metus ullamcorper. Nam at nulla sed tellus
204+
vestibulum fringilla vel sit amet ligula. Proin velit lectus, euismod sit amet quam vel ultricies dolor,
205+
vitae
206+
finibus lorem ipsum. Pellentesque molestie at mi sit amet dictum. Donec vehicula lacinia felis sit amet
207+
consectetur. Praesent sodales enim sapien, sed varius ipsum pellentesque vel. Aenean eu mi eu justo
208+
tincidunt
209+
finibus vel sit amet ipsum. Sed bibasdum purus vel ipsum sagittis, quis fermentum dolor lobortis. Etiam
210+
vulputate eleifasd lectus vel varius.
211+
Phasellus imperdiet lectus sit amet ipsum egestas, ut bibasdum ipsum malesuada. Vestibulum ante ipsum primis
212+
in
213+
faucibus orci luctus et ultrices posuere cubilia Curae; Sed mollis eros sit amet elit porttitor, vel
214+
venenatis
215+
turpis venenatis. Nulla tempus tortor at eros efficitur, sit amet dapibus ipsum malesuada. Ut at mauris sed
216+
nunc
217+
malesuada convallis. Duis id sem vel magna varius eleifasd vel at est. Donec eget orci a ipsum tempor
218+
lobortis.
219+
Sed at consectetur ipsum.
220+
</div>
221+
</div>

gentest/fonts/Ahem.ttf

12.2 KB
Binary file not shown.

gentest/gentest-cpp.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,12 @@ CPPEmitter.prototype = Object.create(Emitter.prototype, {
3030

3131
emitPrologue: {
3232
value: function () {
33-
this.push(['#include <gtest/gtest.h>', '#include <yoga/Yoga.h>', '']);
33+
this.push([
34+
'#include <gtest/gtest.h>',
35+
'#include <yoga/Yoga.h>',
36+
'#include "../util/TestUtil.h"',
37+
'',
38+
]);
3439
},
3540
},
3641

@@ -503,4 +508,13 @@ CPPEmitter.prototype = Object.create(Emitter.prototype, {
503508
);
504509
},
505510
},
511+
512+
YGNodeSetMeasureFunc: {
513+
value: function (nodeName, innerText) {
514+
this.push(`YGNodeSetContext(${nodeName}, (void*)"${innerText}");`);
515+
this.push(
516+
`YGNodeSetMeasureFunc(${nodeName}, &facebook::yoga::test::IntrinsicSizeMeasure);`,
517+
);
518+
},
519+
},
506520
});

gentest/gentest-java.js

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ JavaEmitter.prototype = Object.create(Emitter.prototype, {
5555
'import org.junit.Test;',
5656
'import org.junit.runner.RunWith;',
5757
'import org.junit.runners.Parameterized;',
58+
'import com.facebook.yoga.utils.TestUtils;',
5859
'',
5960
'@RunWith(Parameterized.class)',
6061
'public class YogaTest {',
@@ -465,4 +466,13 @@ JavaEmitter.prototype = Object.create(Emitter.prototype, {
465466
);
466467
},
467468
},
469+
470+
YGNodeSetMeasureFunc: {
471+
value: function (nodeName, innerText) {
472+
this.push(`${nodeName}.setData("${innerText}");`);
473+
this.push(
474+
`${nodeName}.setMeasureFunction(new TestUtils.intrinsicMeasureFunction());`,
475+
);
476+
},
477+
},
468478
});

gentest/gentest-javascript.js

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ JavascriptEmitter.prototype = Object.create(Emitter.prototype, {
2323

2424
emitPrologue: {
2525
value: function () {
26+
this.push(
27+
"import { instrinsicSizeMeasureFunc } from '../tools/utils.ts'",
28+
);
2629
this.push("import Yoga from 'yoga-layout';");
2730
this.push('import {');
2831
this.pushIndent();
@@ -398,4 +401,12 @@ JavascriptEmitter.prototype = Object.create(Emitter.prototype, {
398401
);
399402
},
400403
},
404+
405+
YGNodeSetMeasureFunc: {
406+
value: function (nodeName, innerText) {
407+
this.push(
408+
`${nodeName}.setMeasureFunc(instrinsicSizeMeasureFunc.bind("${innerText}"));`,
409+
);
410+
},
411+
},
401412
});

gentest/gentest.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -528,6 +528,10 @@ function setupTestTree(
528528
e.YGNodeInsertChild(parentName, nodeName, index);
529529
}
530530

531+
if (node.innerText && node.children.length === 0) {
532+
e.YGNodeSetMeasureFunc(nodeName, node.innerText);
533+
}
534+
531535
for (let i = 0; i < node.children.length; i++) {
532536
e.push('');
533537
const childName = nodeName + '_child' + i;
@@ -723,6 +727,7 @@ function calculateTree(root, parentOffsetLeft, parentOffsetTop) {
723727
? child.dataset.experiments.split(' ')
724728
: [],
725729
disabled: child.dataset.disabled === 'true',
730+
innerText: child.innerText,
726731
};
727732

728733
const size = getRoundedSize(child);

0 commit comments

Comments
 (0)