def test_parse_samplesheet(self): """Write and parse a csv-file """ # Assert non-existing file raises exception with self.assertRaises(IOError): HiSeqRun.parse_samplesheet(os.path.join(self.rootdir,'non-existing-samplesheet')) # Write a csv file with some bogus values sdata = td.generate_samplesheet_data() samplesheet = os.path.join(self.rootdir,'SampleSheet.csv') HiSeqRun.write_samplesheet(sdata,samplesheet) # Assert that the written data corresponds to the generated data with open(samplesheet) as fh: # Assert that header is correct self.assertListEqual(HiSeqRun._samplesheet_header(), fh.next().strip().split(","), "Written header does not match expected header") for entry in sdata: # Assert that all rows have the correct values in the correct columns self.assertListEqual([str(e) for e in entry], fh.next().strip().split(","), "Written data row does not match entry in generated samplesheet") # Assert that all rows from samplesheet has been consumed with self.assertRaises(StopIteration): fh.next() # Assert that the parsed data matches the generated data data = HiSeqRun.parse_samplesheet(samplesheet) self.assertEqual(len(sdata), len(data), "Number of parsed entries does not match number of generated entries") for d in data: self.assertListEqual([str(e) for e in sdata.pop(0)], [d[col] for col in HiSeqRun._samplesheet_header()], "Parsed data row does not match entry in generated samplesheet") # Assert that filtering on lane returns expected output lanes = list(set([d["Lane"] for d in data])) obs_lane_data = HiSeqRun.parse_samplesheet(samplesheet,lane=lanes[-1]) exp_lane_data = [d for d in data if str(d["Lane"]) == str(lanes[-1])] self.assertListEqual(sorted(obs_lane_data), sorted(exp_lane_data), "Parsed data row does not match entry in generated samplesheet")