def testSorting(self): geSourceTest = self._commonSetup() for caseName in geSourceTest.cases: if not caseName.startswith('gtrack'): continue if 'no_sort' in caseName: print 'Test case skipped: ' + caseName continue print caseName print case = geSourceTest.cases[caseName] testFn = self._writeTestFile(case) print open(testFn).read() print sortedContents = sortGtrackFileAndReturnContents(testFn, case.genome) print sortedContents sourceClass = GenomeElementSource if case.sourceClass is None else case.sourceClass forPreProcessor = True if case.sourceClass is None else False sortedGeSource = GEDependentAttributesHolder(sourceClass('sortedFile.gtrack', case.genome, \ forPreProcessor=forPreProcessor, \ printWarnings=False, \ strToUseInsteadOfFn=sortedContents)) reprIsDense = TrackFormat.createInstanceFromGeSource(sortedGeSource).reprIsDense() if not reprIsDense: self.assertEquals(sorted(case.assertElementList), [ge for ge in sortedGeSource]) else: for ge in sortedGeSource: pass self.assertEquals(sorted(case.boundingRegionsAssertList), [br for br in sortedGeSource.getBoundingRegionTuples()])
def testHeaderExpansion(self): geSourceTest = self._commonSetup() for caseName in geSourceTest.cases: if not caseName.startswith('gtrack'): continue if 'no_expand' in caseName: print 'Test case skipped: ' + caseName continue onlyGuaranteed = 'no_types_expanded' in caseName print caseName print '===========' case = geSourceTest.cases[caseName] headerLines = [line if not self._isHeaderLine(line) else '##' + ': '.join([str(x).lower() for x in Gtrack.getHeaderKeyValue(line.strip())]) for line in case.headerLines] fullContents = os.linesep.join(headerLines + case.lines) print 'Original:\n\n' + fullContents case.headerLines = [line for line in headerLines if not self._isExpandableHeader(line, onlyGuaranteed)] print '-----' print 'With headers removed:\n\n' + os.linesep.join(case.headerLines + case.lines) testFn = self._writeTestFile(case) expandedContents = expandHeadersOfGtrackFileAndReturnContents(testFn, case.genome, onlyNonDefault=False) print '-----' print 'With expanded headers:\n\n' + expandedContents expandedContentsOnlyNonDefaults = expandHeadersOfGtrackFileAndReturnContents(testFn, case.genome, onlyNonDefault=True) print '-----' print 'With expanded headers (only non-default headers):\n\n' + expandedContentsOnlyNonDefaults origExpandableHeaders = dict([Gtrack.getHeaderKeyValue(line) for line in headerLines \ if self._isExpandableHeader(line, onlyGuaranteed=False)]) notExpandableHeaders = dict([Gtrack.getHeaderKeyValue(line) for line in case.headerLines \ if self._isHeaderLine(line) and not self._isValueNotKeptHeader(line)]) expandedHeaders = dict([Gtrack.getHeaderKeyValue(line) for line in expandedContents.split(os.linesep) \ if self._isHeaderLine(line)]) if 'no_check_expand' in caseName: print 'No checks for case: ' + caseName else: for header in origExpandableHeaders: self.assertEquals(origExpandableHeaders[header], expandedHeaders[header]) for header in notExpandableHeaders: self.assertEquals(notExpandableHeaders[header], expandedHeaders[header]) for contents in [expandedContents, expandedContentsOnlyNonDefaults]: sourceClass = GenomeElementSource if case.sourceClass is None else case.sourceClass forPreProcessor = True if case.sourceClass is None else False stdGeSource = GEDependentAttributesHolder(sourceClass('expanded.gtrack', case.genome, \ forPreProcessor=forPreProcessor, \ printWarnings=False, \ strToUseInsteadOfFn=contents)) self.assertEquals(case.assertElementList, [ge for ge in stdGeSource]) self.assertEquals(case.boundingRegionsAssertList, [br for br in stdGeSource.getBoundingRegionTuples()])
def _commonTestComposer(self, withTrackGESource, composerCls, suffix): geSourceTest = self._commonSetup() for caseName in geSourceTest.cases: if not (caseName == suffix or \ (caseName.startswith(suffix) and caseName[len(suffix)] in ['_','.'])): continue if 'no_print' in caseName or \ withTrackGESource and ('no_track_extract' in caseName or \ caseName.endswith('_no_hb')): print 'Test case skipped: ' + caseName continue print caseName case = geSourceTest.cases[caseName] testFn = self._writeTestFile(case) sourceClass = case.sourceClass if case.sourceClass is not None else GenomeElementSource genome = self.GENOME if withTrackGESource else case.genome rawCaseGESource = sourceClass(testFn, genome, printWarnings=False) caseGESource = GEDependentAttributesHolder(rawCaseGESource) #actualSourceClass = caseGESource._geSource.__class__ if withTrackGESource: for x in caseGESource: pass boundingRegionTuples = caseGESource.getBoundingRegionTuples() boundingRegions = [br.region for br in boundingRegionTuples] if boundingRegions == [] or all(br.chr is None for br in boundingRegions): boundingRegions = GlobalBinSource(self.GENOME) trackName = self.TRACK_NAME_PREFIX + case.trackName self._preProcess(trackName) allowOverlaps = True if ('start' in case.prefixList) and not caseName.endswith('_compose_no_overlaps') else False inputGESource = TrackGenomeElementSource(self.GENOME, trackName, boundingRegions, \ printWarnings=False, allowOverlaps=allowOverlaps) else: inputGESource = rawCaseGESource composer = composerCls(inputGESource) contents = composer.returnComposed() print contents composedFile = NamedTemporaryFile('w', suffix='.' + suffix) composedFile.write(contents) composedFile.flush() #print actualSourceClass.__name__ outputGESource = GEDependentAttributesHolder(sourceClass(composedFile.name, genome, printWarnings=False)) if 'no_check_print' in caseName or withTrackGESource and 'no_check_track_extract' in caseName: print 'No checks for case: ' + caseName else: caseGEs = [ge.getCopy() for ge in caseGESource] outputGEs = [ge.getCopy() for ge in outputGESource] isSortableGE = any(getattr(caseGEs[0], x) is not None for x in ['start','end']) if len(caseGEs) > 0 else False if withTrackGESource and isSortableGE and not caseGESource.hasBoundingRegionTuples(): caseGEs = sorted(caseGEs) self.assertGenomeElementLists(caseGEs, outputGEs) self.assertListsOrDicts(caseGESource.getBoundingRegionTuples(), outputGESource.getBoundingRegionTuples())