RefMetaDataTracker has complete set of get() functions for List<RodBinding<T>>

Including unit tests
This commit is contained in:
Mark DePristo 2011-08-02 14:28:35 -04:00
parent 03741fb640
commit e4a67f3df1
2 changed files with 44 additions and 2 deletions

View File

@ -32,7 +32,6 @@ import java.util.*;
*/
public class RefMetaDataTracker {
// TODO: this should be a list, not a map, actually
private final static RODRecordList EMPTY_ROD_RECORD_LIST = new RODRecordListImpl("EMPTY");
final Map<String, RODRecordList> map;
@ -138,6 +137,26 @@ public class RefMetaDataTracker {
return getFirstValue(rodBinding.getType(), rodBinding.getVariableName(), onlyAtThisLoc);
}
public <T extends Feature> T getFirstValue(final Collection<RodBinding<T>> rodBindings) {
for ( RodBinding<T> rodBinding : rodBindings ) {
T val = getFirstValue(rodBinding);
if ( val != null )
return val;
}
return null;
}
public <T extends Feature> T getFirstValue(final Collection<RodBinding<T>> rodBindings, final GenomeLoc onlyAtThisLoc) {
for ( RodBinding<T> rodBinding : rodBindings ) {
T val = getFirstValue(rodBinding, onlyAtThisLoc);
if ( val != null )
return val;
}
return null;
}
public boolean hasValues(final RodBinding rodBinding) {
return hasValues(rodBinding.getVariableName());
}

View File

@ -226,7 +226,7 @@ public class RefMetaDataTrackerUnitTest {
RefMetaDataTracker tracker = test.makeTracker();
for ( String nameAsString : Arrays.asList("A", "B") ) {
RodBinding<Feature> binding = new RodBinding(Feature.class, nameAsString, "none", new Tags());
RodBinding<Feature> binding = new RodBinding<Feature>(Feature.class, nameAsString, "none", new Tags());
List<Feature> v1 = tracker.getValues(binding);
testGetter(nameAsString, v1, test.expected(nameAsString), true, tracker);
@ -241,6 +241,29 @@ public class RefMetaDataTrackerUnitTest {
}
}
@Test(enabled = true, dataProvider = "tests")
public void testGettersAsListOfRodBindings(MyTest test) {
logger.warn("Testing " + test + " for get() methods for List<RodBindings>");
RefMetaDataTracker tracker = test.makeTracker();
String nameAsString = "A+B";
RodBinding<Feature> A = new RodBinding<Feature>(Feature.class, "A", "none", new Tags());
RodBinding<Feature> B = new RodBinding<Feature>(Feature.class, "B", "none", new Tags());
List<RodBinding<Feature>> binding = Arrays.asList(A, B);
List<Feature> v1 = tracker.getValues(binding);
testGetter(nameAsString, v1, test.expected(nameAsString), true, tracker);
List<Feature> v2 = tracker.getValues(binding, locus);
testGetter(nameAsString, v2, startingHere(test.expected(nameAsString)), true, tracker);
Feature v3 = tracker.getFirstValue(binding);
testGetter(nameAsString, Arrays.asList(v3), test.expected(nameAsString), false, tracker);
Feature v4 = tracker.getFirstValue(binding, locus);
testGetter(nameAsString, Arrays.asList(v4), startingHere(test.expected(nameAsString)), false, tracker);
}
private List<GATKFeature> startingHere(List<GATKFeature> l) {
List<GATKFeature> x = new ArrayList<GATKFeature>();
for ( GATKFeature f : l ) if ( f.getStart() == locus.getStart() ) x.add(f);