More tests for reproducible outputs

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1921981 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Dominik Stadler 2024-11-20 20:29:45 +00:00
parent c1f018f79c
commit 7c881a408f
2 changed files with 29 additions and 0 deletions

View File

@ -16,6 +16,7 @@
==================================================================== */ ==================================================================== */
package org.apache.poi.sl.usermodel; package org.apache.poi.sl.usermodel;
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNotNull;
@ -29,11 +30,13 @@ import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.util.List; import java.util.List;
import org.apache.commons.io.output.UnsynchronizedByteArrayOutputStream;
import org.apache.poi.POIDataSamples; import org.apache.poi.POIDataSamples;
import org.apache.poi.common.usermodel.fonts.FontInfo; import org.apache.poi.common.usermodel.fonts.FontInfo;
import org.apache.poi.sl.draw.DrawPaint; import org.apache.poi.sl.draw.DrawPaint;
import org.apache.poi.sl.usermodel.PictureData.PictureType; import org.apache.poi.sl.usermodel.PictureData.PictureType;
import org.apache.poi.sl.usermodel.TabStop.TabStopType; import org.apache.poi.sl.usermodel.TabStop.TabStopType;
import org.apache.poi.util.Reproducibility;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
public abstract class BaseTestSlideShow< public abstract class BaseTestSlideShow<
@ -199,4 +202,29 @@ public abstract class BaseTestSlideShow<
: null; : null;
} }
// ensure a simple slide-show can be reproducibly written
@Test
void testWriteDocumentTwice() throws Exception {
try (SlideShow<S,P> ppt = createSlideShow()) {
ppt.createSlide();
Reproducibility.runWithSourceDateEpoch(
() -> {
try (UnsynchronizedByteArrayOutputStream out1 = UnsynchronizedByteArrayOutputStream.builder().get();
UnsynchronizedByteArrayOutputStream out2 = UnsynchronizedByteArrayOutputStream.builder().get()) {
ppt.write(out1);
ppt.write(out2);
out1.flush();
out2.flush();
// to avoid flaky tests if the documents are written at slightly different timestamps
// we clear some bytes which contain timestamps
assertArrayEquals(
out1.toByteArray(),
out2.toByteArray());
}
});
}
}
} }

View File

@ -1800,6 +1800,7 @@ public abstract class BaseTestBugzillaIssues {
assertEquals(expectedResultOrNull, eval.evaluate(intF).formatAsString()); assertEquals(expectedResultOrNull, eval.evaluate(intF).formatAsString());
} }
// ensure a simple workbook can be reproducibly written
@Test @Test
void testWriteDocumentTwice() throws Exception { void testWriteDocumentTwice() throws Exception {
try (Workbook wb = _testDataProvider.createWorkbook()) { try (Workbook wb = _testDataProvider.createWorkbook()) {