Skip to content

Commit d215f13

Browse files
committed
test issue 289 running the layout is not idempotent
Signed-off-by: Samir Romdhani <samir.romdhani_externe@rte-france.com>
1 parent ab67c4b commit d215f13

3 files changed

Lines changed: 65 additions & 5 deletions

File tree

single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/layout/PositionVoltageLevelLayout.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ public void run(LayoutParameters layoutParam) {
6262
calculateBusNodeCoord(getGraph(), layoutParam);
6363
calculateCellCoord(getGraph(), layoutParam);
6464

65-
getGraph().addPaddingToCoord(layoutParam);
65+
getGraph().addPaddingToCoord(layoutParam);// bug
6666
setGraphSize(layoutParam);
6767

6868
// Calculate all the coordinates for the middle nodes and the snake lines in the voltageLevel graph
@@ -82,7 +82,6 @@ private void setGraphSize(LayoutParameters layoutParam) {
8282
LayoutParameters.Padding padding = layoutParam.getVoltageLevelPadding();
8383
double width = widthWithoutPadding + padding.left() + padding.right();
8484
double height = heightWithoutPadding + padding.top() + padding.bottom();
85-
8685
getGraph().setSize(width, height);
8786
}
8887

single-line-diagram/single-line-diagram-core/src/main/java/com/powsybl/sld/model/graphs/VoltageLevelGraph.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,14 +592,14 @@ public VoltageLevelInfos getVoltageLevelInfos() {
592592
}
593593

594594
public Point getCoord() {
595-
return coord;
595+
return coord;// new Point(0, 0);
596596
}
597597

598598
public void addPaddingToCoord(LayoutParameters layoutParam) {
599599
LayoutParameters.Padding vlPadding = layoutParam.getVoltageLevelPadding();
600600
LayoutParameters.Padding dPadding = layoutParam.getDiagramPadding();
601-
setCoord(coord.getX() + dPadding.left() + vlPadding.left(),
602-
coord.getY() + dPadding.top() + vlPadding.top());
601+
setCoord(getCoord().getX() + dPadding.left() + vlPadding.left(),
602+
getCoord().getY() + dPadding.top() + vlPadding.top());
603603
}
604604

605605
public void setCoord(double x, double y) {
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
/**
2+
* Copyright (c) 2026, RTE (http://www.rte-france.com)
3+
* This Source Code Form is subject to the terms of the Mozilla Public
4+
* License, v. 2.0. If a copy of the MPL was not distributed with this
5+
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
6+
* SPDX-License-Identifier: MPL-2.0
7+
*/
8+
package com.powsybl.sld;
9+
10+
import com.powsybl.diagram.test.Networks;
11+
import com.powsybl.iidm.network.Country;
12+
import com.powsybl.iidm.network.Network;
13+
import com.powsybl.iidm.network.SwitchKind;
14+
import com.powsybl.iidm.network.TopologyKind;
15+
import com.powsybl.iidm.network.extensions.ConnectablePosition;
16+
import com.powsybl.sld.builders.NetworkGraphBuilder;
17+
import com.powsybl.sld.iidm.AbstractTestCaseIidm;
18+
import com.powsybl.sld.layout.LayoutParameters;
19+
import com.powsybl.sld.layout.PositionVoltageLevelLayoutFactory;
20+
import com.powsybl.sld.model.graphs.VoltageLevelGraph;
21+
import org.junit.jupiter.api.BeforeEach;
22+
import org.junit.jupiter.api.Test;
23+
import static org.junit.jupiter.api.Assertions.assertEquals;
24+
25+
/**
26+
* @author Samir Romdhani {@literal <samir.romdhani at rte-france.com>}
27+
*/
28+
class LayoutIdempotencyTest extends AbstractTestCaseIidm {
29+
30+
LayoutParameters layoutParameter = new LayoutParameters();
31+
32+
@BeforeEach
33+
public void setUp() {
34+
network = Network.create("testCase1", "test");
35+
graphBuilder = new NetworkGraphBuilder(network);
36+
substation = Networks.createSubstation(network, "s", "s", Country.FR);
37+
vl = Networks.createVoltageLevel(substation, "vl", "vl", TopologyKind.NODE_BREAKER, 380);
38+
Networks.createBusBarSection(vl, "bbs", "bbs", 0, 1, 1);
39+
Networks.createLoad(vl, "l", "l", "l", 0, ConnectablePosition.Direction.TOP, 2, 10, 10);
40+
Networks.createSwitch(vl, "d", "d", SwitchKind.DISCONNECTOR, false, false, false, 0, 1);
41+
Networks.createSwitch(vl, "b", "b", SwitchKind.BREAKER, false, false, false, 1, 2);
42+
}
43+
44+
@Test
45+
void layoutRunTwiceShouldProduceSameGraph() {
46+
VoltageLevelGraph graph = graphBuilder.buildVoltageLevelGraph(vl.getId());
47+
var layout = new PositionVoltageLevelLayoutFactory().create(graph);
48+
// var layout = new SmartVoltageLevelLayoutFactory(network).create(graph);
49+
// var layout = new RandomVoltageLevelLayoutFactory(40, 40).create(graph);
50+
layout.run(layoutParameter);
51+
String afterFirstRun = toJson(graph, "/afterFirstRun.json");
52+
debugSvgFiles = true; // check .powsybl/debug-sld
53+
String svgAfterFirstLayout = toSVG(graph, "/svg-after-first-layout.svg");
54+
layout.run(layoutParameter);
55+
String afterSecondRun = toJson(graph, "/afterSecondRun.json");
56+
debugSvgFiles = true;
57+
String svgAfterSecondLayout = toSVG(graph, "/svg-after-second-layout.svg");
58+
assertEquals(afterFirstRun, afterSecondRun);
59+
assertEquals(svgAfterFirstLayout, svgAfterSecondLayout);
60+
}
61+
}

0 commit comments

Comments
 (0)