Skip to content

Commit ab74e0d

Browse files
committed
Add more tests
1 parent 520ded8 commit ab74e0d

File tree

2 files changed

+91
-17
lines changed

2 files changed

+91
-17
lines changed

modules/javafx.graphics/src/test/java/test/javafx/scene/layout/BaselineTest.java

Lines changed: 86 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,12 @@
2525

2626
package test.javafx.scene.layout;
2727

28+
import javafx.geometry.Pos;
2829
import javafx.scene.Parent;
2930
import javafx.scene.ParentShim;
3031
import javafx.scene.layout.HBox;
3132
import javafx.scene.layout.Pane;
33+
import javafx.scene.layout.VBox;
3234
import javafx.scene.shape.Rectangle;
3335
import javafx.scene.text.Text;
3436

@@ -77,10 +79,10 @@ public class BaselineTest {
7779
@Test public void testParentSelectsFirstTextNodeAsBaselineSource() {
7880
Pane p = new Pane();
7981
p.getChildren().add(new Rectangle());
80-
p.getChildren().add(new MockTextResizable(100, 100, 1234));
82+
p.getChildren().add(new TextRectangle(100, 100, 1234));
8183
p.getChildren().add(new Rectangle());
8284

83-
assertEquals(1234, p.getBaselineOffset(), 1e-100);
85+
assertEquals(1234, p.getBaselineOffset(), 1e-10);
8486
}
8587

8688
/**
@@ -93,10 +95,10 @@ public class BaselineTest {
9395
{ setPrefBaseline(true); }
9496
@Override public double getBaselineOffset() { return 1234; }
9597
});
96-
p.getChildren().add(new MockTextResizable(100, 100, 200));
98+
p.getChildren().add(new TextRectangle(100, 100, 200));
9799
p.getChildren().add(new Rectangle());
98100

99-
assertEquals(1234, p.getBaselineOffset(), 1e-100);
101+
assertEquals(1234, p.getBaselineOffset(), 1e-10);
100102
}
101103

102104
/**
@@ -106,11 +108,11 @@ public class BaselineTest {
106108
@Test public void testIsTextBaselinePropagatesToParent() {
107109
Pane p = new Pane();
108110
p.getChildren().add(new HBox() {
109-
{ getChildren().add(new MockTextResizable(100, 100, 1234)); }
111+
{ getChildren().add(new TextRectangle(100, 100, 1234)); }
110112
});
111113

112114
assertTrue(p.isTextBaseline());
113-
assertEquals(1234, p.getBaselineOffset(), 1e-100);
115+
assertEquals(1234, p.getBaselineOffset(), 1e-10);
114116
}
115117

116118
/**
@@ -121,13 +123,13 @@ public class BaselineTest {
121123
Pane p = new Pane();
122124
p.getChildren().add(new HBox() {
123125
{
124-
getChildren().add(new MockTextResizable(100, 100, 1234));
125-
getChildren().add(new MockResizable(100, 100) {{ setPrefBaseline(true); }});
126+
getChildren().add(new TextRectangle(100, 100, 1234));
127+
getChildren().add(new Rectangle(100, 100) {{ setPrefBaseline(true); }});
126128
}
127129
});
128130

129131
assertFalse(p.isTextBaseline());
130-
assertEquals(90, p.getBaselineOffset(), 1e-100);
132+
assertEquals(100, p.getBaselineOffset(), 1e-10);
131133
}
132134

133135
/**
@@ -137,21 +139,91 @@ public class BaselineTest {
137139
*/
138140
@Test public void testPrefBaselineChangedUpdatesParentIsTextBaseline() {
139141
Pane p = new Pane();
140-
MockResizable[] r = new MockResizable[1];
142+
Rectangle[] r = new Rectangle[1];
141143
p.getChildren().add(new HBox() {
142144
{
143-
getChildren().add(new MockTextResizable(100, 100, 1234));
144-
getChildren().add(r[0] = new MockResizable(100, 100));
145+
getChildren().add(new TextRectangle(100, 100, 1234));
146+
getChildren().add(r[0] = new Rectangle(100, 100));
145147
}
146148
});
147149

150+
assertTrue(p.isTextBaseline());
151+
assertEquals(1234, p.getBaselineOffset(), 1e-10);
152+
148153
r[0].setPrefBaseline(true);
149154
assertFalse(p.isTextBaseline());
150-
assertEquals(90, p.getBaselineOffset(), 1e-100);
155+
assertEquals(100, p.getBaselineOffset(), 1e-10);
151156

152157
r[0].setPrefBaseline(false);
153158
assertTrue(p.isTextBaseline());
154-
assertEquals(1234, p.getBaselineOffset(), 1e-100);
159+
assertEquals(1234, p.getBaselineOffset(), 1e-10);
160+
}
161+
162+
/**
163+
* Tests that the baseline offset is calculated correctly from two text-node children
164+
* in different branches of the scene graph.
165+
*
166+
* w=20 w=20
167+
* ┌───────┐ ┌───────┐
168+
* h=20 │ A │ │ C │ h=40
169+
* ├───────┴───────┤ │
170+
* ═════╪═══════════════╪═══════╪═════ baseline=30
171+
* B└───────────────┼───────┤
172+
* w=40 │ D │ h=20
173+
* └───────┘
174+
*/
175+
@Test public void testTextBaselineFromChildrenInDifferentBranches() {
176+
HBox p = new HBox();
177+
p.setAlignment(Pos.BASELINE_LEFT);
178+
p.getChildren().add(new VBox() {{
179+
getChildren().add(new Rectangle(20, 20)); // box A
180+
getChildren().add(new TextRectangle(40, 20, 10)); // box B
181+
}});
182+
p.getChildren().add(new VBox() {{
183+
getChildren().add(new TextRectangle(20, 40, 30)); // box C
184+
getChildren().add(new Rectangle(20, 20)); // box D
185+
}});
186+
p.layout();
187+
p.autosize();
188+
189+
assertTrue(p.isTextBaseline());
190+
assertEquals(30, p.getBaselineOffset(), 1e-10);
191+
assertEquals(60, p.getHeight(), 1e-10);
192+
assertEquals(60, p.getWidth(), 1e-10);
193+
}
194+
195+
/**
196+
* Similar test setup to {@link #testTextBaselineFromChildrenInDifferentBranches()}, with the
197+
* difference that there is only a single text-node child in the scene graph.
198+
*
199+
* w=20
200+
* w=20 ┌───────┐
201+
* ┌───────┐ │ │
202+
* h=20 │ A │ │ C │ h=40
203+
* ├───────┴───────┤ │
204+
* ═════╪═══════════════╪─═─═─═─╪═════ baseline=40
205+
* B└───────────────┤ │ h=20
206+
* w=40 └───────┘
207+
*
208+
*/
209+
@Test public void testTextBaselineFromChildInSingleBranch() {
210+
HBox p = new HBox();
211+
p.setAlignment(Pos.BASELINE_LEFT);
212+
p.getChildren().add(new VBox() {{
213+
getChildren().add(new Rectangle(20, 20)); // box A
214+
getChildren().add(new TextRectangle(40, 20, 10)); // box B
215+
}});
216+
p.getChildren().add(new VBox() {{
217+
getChildren().add(new Rectangle(20, 40)); // box C
218+
getChildren().add(new Rectangle(20, 20)); // box D
219+
}});
220+
p.layout();
221+
p.autosize();
222+
223+
assertTrue(p.isTextBaseline());
224+
assertEquals(40, p.getBaselineOffset(), 1e-10);
225+
assertEquals(60, p.getHeight(), 1e-10);
226+
assertEquals(60, p.getWidth(), 1e-10);
155227
}
156228

157229
}
Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,13 @@
2525

2626
package test.javafx.scene.layout;
2727

28-
public class MockTextResizable extends MockResizable {
28+
import javafx.scene.shape.Rectangle;
29+
30+
public class TextRectangle extends Rectangle {
2931
private final double baselineOffset;
3032

31-
public MockTextResizable(double prefWidth, double prefHeight, double baselineOffset) {
32-
super(prefWidth, prefHeight);
33+
public TextRectangle(double width, double height, double baselineOffset) {
34+
super(width, height);
3335
this.baselineOffset = baselineOffset;
3436
}
3537

0 commit comments

Comments
 (0)