universe@20: package de.uapcore.sudoku; universe@20: universe@20: import org.junit.jupiter.api.Test; universe@20: universe@20: import java.io.File; universe@20: import java.io.FileOutputStream; universe@20: import java.io.IOException; universe@20: import java.nio.file.Files; universe@20: universe@20: import static org.junit.jupiter.api.Assertions.*; universe@20: universe@20: class DocumentHandlerTest { universe@20: universe@20: @Test universe@20: void testFilenameManagement() { universe@20: final var dh = new DocumentHandler(); universe@20: assertFalse(dh.isFilenameSet()); universe@20: dh.setFilename("foo"); universe@20: assertTrue(dh.isFilenameSet()); universe@20: dh.clearFilename(); universe@20: assertFalse(dh.isFilenameSet()); universe@20: } universe@20: universe@20: private File extractFile(String name) throws IOException { universe@20: final var f = File.createTempFile("sudoku-test", ".txt"); universe@20: try (var in = DocumentHandlerTest.class.getClassLoader().getResourceAsStream(name); universe@20: var out = new FileOutputStream(f)) { universe@20: in.transferTo(out); universe@20: } universe@20: return f; universe@20: } universe@20: universe@20: private int[] createTestdata() { universe@20: return new int[]{0,1,0,9,0,0,8,0,0, universe@20: 0,0,0,0,0,8,0,0,4, universe@20: 6,0,5,0,0,0,7,0,0, universe@20: 0,9,0,0,6,0,0,0,8, universe@20: 0,0,0,2,0,7,0,0,0, universe@20: 8,0,0,0,3,0,0,6,0, universe@20: 0,0,2,0,0,0,5,0,3, universe@20: 1,0,0,4,0,0,0,0,0, universe@20: 0,0,6,0,0,2,0,1,0}; universe@20: } universe@20: universe@20: @Test universe@20: void load() throws IOException { universe@20: final var f = extractFile("test-sudoku"); universe@20: final var dh = new DocumentHandler(); universe@20: final var field = new Field(); universe@20: dh.setFilename(f.getAbsolutePath()); universe@20: dh.load(field); universe@20: universe@20: final var expected = createTestdata(); universe@20: for (int x = 0 ; x < 9 ; x++) { universe@20: for (int y = 0 ; y < 9 ; y++) { universe@20: assertEquals(expected[x+9*y], field.getCellValue(x, y)); universe@20: } universe@20: } universe@20: } universe@20: universe@20: @Test universe@20: void save() throws IOException { universe@20: final var f = File.createTempFile("sudoku-test", ".txt"); universe@20: final var dh = new DocumentHandler(); universe@20: universe@20: final var field = new Field(); universe@20: final var testdata = createTestdata(); universe@20: for (int x = 0 ; x < 9 ; x++) { universe@20: for (int y = 0 ; y < 9 ; y++) { universe@20: field.setCellValue(x, y, testdata[x+9*y]); universe@20: } universe@20: } universe@20: universe@20: dh.setFilename(f.getAbsolutePath()); universe@20: dh.save(field); universe@20: universe@20: final String[] expected = { universe@20: "_ 1 _ 9 _ _ 8 _ _", universe@20: "_ _ _ _ _ 8 _ _ 4", universe@20: "6 _ 5 _ _ _ 7 _ _", universe@20: "_ 9 _ _ 6 _ _ _ 8", universe@20: "_ _ _ 2 _ 7 _ _ _", universe@20: "8 _ _ _ 3 _ _ 6 _", universe@20: "_ _ 2 _ _ _ 5 _ 3", universe@20: "1 _ _ 4 _ _ _ _ _", universe@20: "_ _ 6 _ _ 2 _ 1 _" universe@20: }; universe@20: universe@20: final var actual = Files.readAllLines(f.toPath()); universe@20: universe@20: assertEquals(expected.length, actual.size()); universe@20: for (int i = 0 ; i < expected.length ; i++) { universe@20: assertEquals(expected[i], actual.get(i)); universe@20: } universe@20: } universe@20: }