package picard.illumina.parser.readers; import org.testng.Assert; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import picard.PicardException; import java.io.File; public class PosFileReaderTest { //need to test for negatives public static final File TestDir = new File("testdata/picard/illumina/readerTests"); public static final File InvalidNamePosFile = new File(TestDir, "pos_failing1_pos.txt"); public static final File PassingPosFile = new File(TestDir, "s_2_1101_pos.txt"); public static final int PassingTile = 1101; public static final int PassingLane = 2; public static final float[][] PassingPosFloatCoord = { {17.80f, 0.30f}, {23.70f, 1.70f}, {18.50f, 3.90f}, {22.80f, 4.00f}, {15.90f, 4.20f}, {19.10f, 5.60f}, {23.90f, 6.70f}, {16.70f, 7.00f}, {21.50f, 7.10f}, {18.90f, 9.30f}, {17.10f, 10.30f}, {19.90f, 10.80f}, {15.90f, 11.90f}, {21.60f, 12.00f}, {24.80f, 12.40f}, {17.90f, 14.20f}, {22.00f, 14.50f}, {23.60f, 15.20f}, {20.00f, 15.50f}, {16.30f, 17.30f} }; public static final int[][] PassingPosQSeqCoord = { {1178, 1003}, {1237, 1017}, {1185, 1039}, {1228, 1040}, {1159, 1042}, {1191, 1056}, {1239, 1067}, {1167, 1070}, {1215, 1071}, {1189, 1093}, {1171, 1103}, {1199, 1108}, {1159, 1119}, {1216, 1120}, {1248, 1124}, {1179, 1142}, {1220, 1145}, {1236, 1152}, {1200, 1155}, {1163, 1173} }; @Test public void validPosFileTest() { final PosFileReader pfr = new PosFileReader(PassingPosFile); for (int i = 0; i < PassingPosFloatCoord.length; i++) { Assert.assertTrue(pfr.hasNext()); final AbstractIlluminaPositionFileReader.PositionInfo pi = pfr.next(); comparePositionInfo(pi, i); } Assert.assertFalse(pfr.hasNext()); pfr.close(); } public static void comparePositionInfo(final AbstractIlluminaPositionFileReader.PositionInfo pi, final int index) { comparePositionInfo(pi, PassingPosFloatCoord[index][0], PassingPosFloatCoord[index][1], PassingPosQSeqCoord[index][0], PassingPosQSeqCoord[index][1], PassingLane, PassingTile, index); } public static void comparePositionInfo(final AbstractIlluminaPositionFileReader.PositionInfo pi, final float xPos, final float yPos, final int xQSeqCoord, final int yQSeqCoord, final int lane, final int tile, final int index) { Assert.assertEquals(pi.xPos, xPos, "Differs at index: " + index); Assert.assertEquals(pi.yPos, yPos, "Differs at index: " + index); Assert.assertEquals(pi.xQseqCoord, xQSeqCoord, "Differs at index: " + index); Assert.assertEquals(pi.yQseqCoord, yQSeqCoord, "Differs at index: " + index); Assert.assertEquals(pi.lane, lane, "Differs at index: " + index); Assert.assertEquals(pi.tile, tile, "Differs at index: " + index); } @Test(expectedExceptions = PicardException.class) public void failingNamePosFileTest() { final PosFileReader pfr = new PosFileReader(InvalidNamePosFile); } @DataProvider(name = "invalidDataFiles") public Object[][] invalidDataFiles() { return new Object[][]{ {new File(TestDir, "s_1_1101_pos.txt")}, {new File(TestDir, "s_1_1102_pos.txt")}, {new File(TestDir, "s_1_1103_pos.txt")} }; } @Test(dataProvider = "invalidDataFiles", expectedExceptions = PicardException.class) public void failingDataPosFileTest(final File file) { final PosFileReader pfr = new PosFileReader(file); try { while (pfr.hasNext()) { pfr.next(); } } finally { pfr.close(); } } @Test public void zeroLengthFileTest() { final PosFileReader pfr = new PosFileReader(new File(TestDir, "s_1_1104_pos.txt")); Assert.assertFalse(pfr.hasNext()); pfr.close(); } }