DgsDataTest.java
/**
* Copyright (c) 2022, RTE (http://www.rte-france.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
* SPDX-License-Identifier: MPL-2.0
*/
package com.powsybl.powerfactory.dgs;
import com.google.common.io.ByteStreams;
import com.google.common.io.Files;
import com.powsybl.commons.PowsyblException;
import com.powsybl.commons.test.AbstractSerDeTest;
import com.powsybl.commons.test.TestUtil;
import com.powsybl.powerfactory.model.PowerFactoryException;
import com.powsybl.powerfactory.model.StudyCase;
import org.junit.jupiter.api.Test;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.util.Objects;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author Luma Zamarre��o {@literal <zamarrenolm at aia.es>}
* @author Jos�� Antonio Marqu��s {@literal <marquesja at aia.es>}
*/
class DgsDataTest extends AbstractSerDeTest {
private String toJson(StudyCase studyCase) throws IOException {
try (StringWriter writer = new StringWriter()) {
studyCase.writeJson(writer);
String json = writer.toString();
return TestUtil.normalizeLineSeparator(json);
}
}
private static StudyCase loadCase(String fileName) {
String studyName = Files.getNameWithoutExtension(fileName);
InputStream is = Objects.requireNonNull(DgsDataTest.class.getResourceAsStream(fileName));
DgsReader dgsReader = new DgsReader();
return dgsReader.read(studyName, new InputStreamReader(is));
}
private static String loadReference(String path) {
try {
InputStream is = Objects.requireNonNull(DgsDataTest.class.getResourceAsStream(path));
return TestUtil.normalizeLineSeparator(new String(ByteStreams.toByteArray(is), StandardCharsets.UTF_8));
} catch (IOException e) {
throw new UncheckedIOException(e);
}
}
@Test
void twoBusesTest() throws IOException {
assertTrue(test("/TwoBuses.dgs", "/TwoBuses.json"));
}
@Test
void towerTest() throws IOException {
assertTrue(test("/Tower.dgs", "/Tower.json"));
}
@Test
void twoBusesCommaAsDecimalSeparatorTest() throws IOException {
assertTrue(test("/TwoBusesCommaAsDecimalSeparator.dgs", "/TwoBusesCommaAsDecimalSeparator.json"));
}
@Test
void emptyMatrixTest() throws IOException {
PowerFactoryException e = assertThrows(PowerFactoryException.class, () -> loadCase("/EmptyMatrix.dgs"));
assertEquals("RealMatrix: Unexpected number of cols: 'GPScoords' rows: 1 cols: 1 expected cols: 2", e.getMessage());
}
@Test
void v6ErrorTest() {
assertThrows(PowerFactoryException.class, () -> loadCase("/ascii_v6.dgs"));
}
@Test
void v7ErrorTest() {
assertThrows(PowerFactoryException.class, () -> loadCase("/ascii_v7.dgs"));
}
@Test
void missingElementInLineTest() {
PowsyblException exception = assertThrows(PowsyblException.class, () -> loadCase("/ascii_missing_element.dgs"));
assertEquals("Not enough fields in the line: '1;Version'", exception.getMessage());
}
private boolean test(String dgs, String json) throws IOException {
StudyCase studyCase = loadCase(dgs);
String expectedJson = loadReference(json);
assertNotNull(studyCase);
assertEquals(expectedJson, toJson(studyCase));
return true;
}
}