@@ -248,4 +248,49 @@ public void testScaleCapBounded() {
248248 // topdown scale factor of toplevel node
249249 assertEquals (3.0 , toplevel .getProperty (CoreOptions .TOPDOWN_SCALE_FACTOR ), 0.00001 );
250250 }
251+
252+ /**
253+ * Tests that paddings are correctly considered when computing the size of nodes with further children.
254+ */
255+ @ Test
256+ public void testChildDimensionCalculation () {
257+ PlainJavaInitialization .initializePlainJavaLayout ();
258+ ElkNode graph = ElkGraphUtil .createGraph ();
259+ graph .setProperty (CoreOptions .TOPDOWN_LAYOUT , true );
260+ graph .setProperty (CoreOptions .TOPDOWN_NODE_TYPE , TopdownNodeTypes .ROOT_NODE );
261+
262+ ElkNode toplevel = ElkGraphUtil .createNode (graph );
263+ toplevel .setProperty (CoreOptions .TOPDOWN_LAYOUT , true );
264+ toplevel .setProperty (CoreOptions .TOPDOWN_NODE_TYPE , TopdownNodeTypes .HIERARCHICAL_NODE );
265+ toplevel .setProperty (CoreOptions .NODE_SIZE_FIXED_GRAPH_SIZE , true );
266+ toplevel .setProperty (CoreOptions .ALGORITHM , "org.eclipse.elk.layered" );
267+ toplevel .setProperty (CoreOptions .TOPDOWN_HIERARCHICAL_NODE_WIDTH , 20.0 );
268+ toplevel .setProperty (CoreOptions .TOPDOWN_HIERARCHICAL_NODE_ASPECT_RATIO , 1.0 );
269+ ElkPadding padding = new ElkPadding (10 );
270+ toplevel .setProperty (CoreOptions .PADDING , padding );
271+
272+ ElkNode child1 = ElkGraphUtil .createNode (toplevel );
273+ child1 .setProperty (CoreOptions .TOPDOWN_LAYOUT , true );
274+ child1 .setProperty (CoreOptions .TOPDOWN_NODE_TYPE , TopdownNodeTypes .HIERARCHICAL_NODE );
275+ child1 .setProperty (CoreOptions .NODE_SIZE_FIXED_GRAPH_SIZE , true );
276+ child1 .setX (0 );
277+ child1 .setY (0 );
278+ child1 .setProperty (CoreOptions .TOPDOWN_HIERARCHICAL_NODE_WIDTH , 20.0 );
279+ child1 .setProperty (CoreOptions .TOPDOWN_HIERARCHICAL_NODE_ASPECT_RATIO , 1.0 );
280+
281+
282+ // prepare layout engine
283+ LayoutConfigurator config = new LayoutConfigurator ();
284+ ElkUtil .applyVisitors (graph , config , new LayoutAlgorithmResolver ());
285+ // call layout with layout engine
286+ try {
287+ new RecursiveGraphLayoutEngine ().layout (graph , new BasicProgressMonitor ());
288+ } catch (UnsupportedGraphException exception ) {
289+ fail (exception .toString ());
290+ }
291+
292+ // child dimensions computed in fallback case depend on the paddings and the "topdown size"
293+ assertEquals (20.0 + padding .getHorizontal (), toplevel .getWidth (), 0.00001 );
294+ assertEquals (20.0 + padding .getVertical (), toplevel .getHeight (), 0.00001 );
295+ }
251296}
0 commit comments