Skip to content

Commit 897bd96

Browse files
committedOct 22, 2015
Make the VCF/BCF Header tests less chatty
The VCFHeader tests were dumping extremely large String representations of VCFHeaders to the TestNG log due to the way they were using DataProviders -- this comprised the vast majority of htsjdk test output. This refactors these tests to produce much less output. With this change, grepping out the "PASSED:" lines should no longer be necessary (this approach didn't work well anyway, since it didn't correctly propagate the TestNG exit status to travis).
1 parent 0e4b4be commit 897bd96

File tree

3 files changed

+38
-23
lines changed

3 files changed

+38
-23
lines changed
 

‎.travis.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ jdk:
66
- openjdk7
77
- openjdk6
88
install: ant
9-
script: ant all test | grep -v "PASSED:"
9+
script: ant all test
1010
after_success:
1111
- echo "TRAVIS_BRANCH='$TRAVIS_BRANCH'";
1212
echo "JAVA_HOME='$JAVA_HOME'";

‎src/tests/java/htsjdk/variant/bcf2/BCF2UtilsUnitTest.java

+20-5
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,21 @@ public void testCreateDictionary() {
9393
Assert.assertEquals(7,dict_size);
9494
}
9595

96+
/**
97+
* Wrapper class for HeaderOrderTestProvider test cases to prevent TestNG from calling toString()
98+
* on the VCFHeaders and spamming the log output.
99+
*/
100+
private static class HeaderOrderTestCase {
101+
public final VCFHeader inputHeader;
102+
public final VCFHeader testHeader;
103+
public final boolean expectedConsistent;
104+
105+
public HeaderOrderTestCase( final VCFHeader inputHeader, final VCFHeader testHeader, final boolean expectedConsistent ) {
106+
this.inputHeader = inputHeader;
107+
this.testHeader = testHeader;
108+
this.expectedConsistent = expectedConsistent;
109+
}
110+
}
96111

97112
@DataProvider(name = "HeaderOrderTestProvider")
98113
public Object[][] makeHeaderOrderTestProvider() {
@@ -132,7 +147,7 @@ public Object[][] makeHeaderOrderTestProvider() {
132147
allLines.addAll(permutation);
133148
final VCFHeader testHeader = new VCFHeader(new LinkedHashSet<VCFHeaderLine>(allLines));
134149
final boolean expectedConsistent = expectedConsistent(testHeader, inputLineCounter);
135-
tests.add(new Object[]{inputHeader, testHeader, expectedConsistent});
150+
tests.add(new Object[]{new HeaderOrderTestCase(inputHeader, testHeader, expectedConsistent)});
136151
}
137152
}
138153
}
@@ -153,7 +168,7 @@ public Object[][] makeHeaderOrderTestProvider() {
153168
for ( final List<String> testSamplesPermutation : permutations ) {
154169
final VCFHeader testHeaderWithSamples = new VCFHeader(inputHeader.getMetaDataInInputOrder(), testSamplesPermutation);
155170
final boolean expectedConsistent = testSamples.equals(inSamples);
156-
tests.add(new Object[]{inputHeaderWithSamples, testHeaderWithSamples, expectedConsistent});
171+
tests.add(new Object[]{new HeaderOrderTestCase(inputHeaderWithSamples, testHeaderWithSamples, expectedConsistent)});
157172
}
158173
}
159174
}
@@ -182,9 +197,9 @@ private static boolean expectedConsistent(final VCFHeader combinationHeader, fin
182197
// even when the header file is slightly different
183198
//
184199
@Test(dataProvider = "HeaderOrderTestProvider")
185-
public void testHeaderOrder(final VCFHeader inputHeader, final VCFHeader testHeader, final boolean expectedConsistent) {
186-
final boolean actualOrderConsistency = BCF2Utils.headerLinesAreOrderedConsistently(testHeader, inputHeader);
187-
Assert.assertEquals(actualOrderConsistency, expectedConsistent);
200+
public void testHeaderOrder( final HeaderOrderTestCase testCase ) {
201+
final boolean actualOrderConsistency = BCF2Utils.headerLinesAreOrderedConsistently(testCase.testHeader, testCase.inputHeader);
202+
Assert.assertEquals(actualOrderConsistency, testCase.expectedConsistent);
188203
}
189204

190205

‎src/tests/java/htsjdk/variant/vcf/VCFHeaderUnitTest.java

+17-17
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@
3434
import htsjdk.variant.VariantBaseTest;
3535
import htsjdk.variant.variantcontext.VariantContext;
3636
import org.testng.Assert;
37-
import org.testng.annotations.DataProvider;
3837
import org.testng.annotations.Test;
3938

4039
import java.io.*;
@@ -127,20 +126,17 @@ public void testVCFHeaderSampleRenamingSitesOnlyVCF() throws Exception {
127126
final VCFHeader header = (VCFHeader) codec.readHeader(vcfIterator).getHeaderValue();
128127
}
129128

130-
@DataProvider(name = "HiSeqVCFHeaderDataProvider")
131-
public Object[][] getHiSeqVCFHeaderData() {
129+
private VCFHeader getHiSeqVCFHeader() {
132130
final File vcf = new File("testdata/htsjdk/variant/HiSeq.10000.vcf");
133131
final VCFFileReader reader = new VCFFileReader(vcf, false);
134132
final VCFHeader header = reader.getFileHeader();
135133
reader.close();
136-
137-
return new Object[][] {
138-
{ header }
139-
};
134+
return header;
140135
}
141136

142-
@Test(dataProvider = "HiSeqVCFHeaderDataProvider")
143-
public void testVCFHeaderAddInfoLine( final VCFHeader header ) {
137+
@Test
138+
public void testVCFHeaderAddInfoLine() {
139+
final VCFHeader header = getHiSeqVCFHeader();
144140
final VCFInfoHeaderLine infoLine = new VCFInfoHeaderLine("TestInfoLine", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "test info line");
145141
header.addMetaDataLine(infoLine);
146142

@@ -154,8 +150,9 @@ public void testVCFHeaderAddInfoLine( final VCFHeader header ) {
154150
Assert.assertFalse(header.getOtherHeaderLines().contains(infoLine), "TestInfoLine present in other header lines");
155151
}
156152

157-
@Test(dataProvider = "HiSeqVCFHeaderDataProvider")
158-
public void testVCFHeaderAddFormatLine( final VCFHeader header ) {
153+
@Test
154+
public void testVCFHeaderAddFormatLine() {
155+
final VCFHeader header = getHiSeqVCFHeader();
159156
final VCFFormatHeaderLine formatLine = new VCFFormatHeaderLine("TestFormatLine", VCFHeaderLineCount.UNBOUNDED, VCFHeaderLineType.String, "test format line");
160157
header.addMetaDataLine(formatLine);
161158

@@ -169,8 +166,9 @@ public void testVCFHeaderAddFormatLine( final VCFHeader header ) {
169166
Assert.assertFalse(header.getOtherHeaderLines().contains(formatLine), "TestFormatLine present in other header lines");
170167
}
171168

172-
@Test(dataProvider = "HiSeqVCFHeaderDataProvider")
173-
public void testVCFHeaderAddFilterLine( final VCFHeader header ) {
169+
@Test
170+
public void testVCFHeaderAddFilterLine() {
171+
final VCFHeader header = getHiSeqVCFHeader();
174172
final VCFFilterHeaderLine filterLine = new VCFFilterHeaderLine("TestFilterLine");
175173
header.addMetaDataLine(filterLine);
176174

@@ -184,8 +182,9 @@ public void testVCFHeaderAddFilterLine( final VCFHeader header ) {
184182
Assert.assertFalse(header.getOtherHeaderLines().contains(filterLine), "TestFilterLine present in other header lines");
185183
}
186184

187-
@Test(dataProvider = "HiSeqVCFHeaderDataProvider")
188-
public void testVCFHeaderAddContigLine( final VCFHeader header ) {
185+
@Test
186+
public void testVCFHeaderAddContigLine() {
187+
final VCFHeader header = getHiSeqVCFHeader();
189188
final VCFContigHeaderLine contigLine = new VCFContigHeaderLine("<ID=chr1,length=1234567890,assembly=FAKE,md5=f126cdf8a6e0c7f379d618ff66beb2da,species=\"Homo sapiens\">", VCFHeaderVersion.VCF4_0, "chr1", 0);
190189
header.addMetaDataLine(contigLine);
191190

@@ -198,8 +197,9 @@ public void testVCFHeaderAddContigLine( final VCFHeader header ) {
198197
Assert.assertFalse(header.getOtherHeaderLines().contains(contigLine), "Test contig line present in other header lines");
199198
}
200199

201-
@Test(dataProvider = "HiSeqVCFHeaderDataProvider")
202-
public void testVCFHeaderAddOtherLine( final VCFHeader header ) {
200+
@Test
201+
public void testVCFHeaderAddOtherLine() {
202+
final VCFHeader header = getHiSeqVCFHeader();
203203
final VCFHeaderLine otherLine = new VCFHeaderLine("TestOtherLine", "val");
204204
header.addMetaDataLine(otherLine);
205205

0 commit comments

Comments
 (0)
Please sign in to comment.