19 #include "WriteFiles.h"
20 #include "TestValidate.h"
28 testWriteCopiedHeader(
"testFiles/testSam.sam");
29 #ifdef __ZLIB_AVAILABLE__
30 testWriteCopiedHeader(
"testFiles/testBam.bam");
34 void testHeaderWrite()
43 std::string headerString =
"";
46 assert(samHeader.
getHD() == NULL);
47 assert(samHeader.
getPG(
"1") == NULL);
48 assert(strcmp(samHeader.
getTagSO(),
"") == 0);
51 assert(samHeader.
removeHD() ==
true);
52 assert(samHeader.
getHD() == NULL);
55 assert(headerString ==
"");
63 assert(headerString ==
"@HD\tVN:1.0\n");
75 assert(headerString ==
"@HD\tVN:1.0\n");
78 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"") == 0);
81 std::string line =
"@SQ\tSN:123";
84 assert(headerString ==
"@HD\tVN:1.0\n");
87 line =
"@SQ\tLN:123\tSN:chr20";
90 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
92 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
95 samHeader = samHeader;
98 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
100 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
102 samHeader.
copy(samHeader);
105 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
107 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
112 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
119 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
121 assert(strcmp(newHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
125 assert(samHeader.
setHDTag(
"VN",
"1.1") ==
true);
127 assert(headerString ==
"@HD\tVN:1.1\n@SQ\tLN:123\tSN:chr20\n");
132 assert(samHeader.
setHDTag(
"VN",
"") ==
true);
134 assert(headerString ==
"@SQ\tLN:123\tSN:chr20\n");
139 assert(samHeader.
setSQTag(
"SN",
"",
"chr20") ==
false);
141 assert(headerString ==
"@SQ\tLN:123\tSN:chr20\n");
143 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr20"),
"chr20") == 0);
144 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
147 assert(samHeader.
setSQTag(
"LN",
"",
"chr20") ==
false);
149 assert(headerString ==
"@SQ\tLN:123\tSN:chr20\n");
151 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
152 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr20"),
"chr20") == 0);
155 assert(samHeader.
removeSQ(
"chr20") ==
true);
158 assert(headerString ==
"");
160 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr20"),
"") == 0);
161 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"") == 0);
165 assert(sq->
setTag(
"LN",
"123") ==
true);
166 assert(sq->
setTag(
"SN",
"chr20") ==
true);
167 assert(samHeader.
addSQ(sq) ==
true);
169 assert(headerString ==
"@SQ\tLN:123\tSN:chr20\n");
171 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr20"),
"chr20") == 0);
172 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
175 assert(sq->
setTag(
"LN",
"222") ==
true);
177 assert(headerString ==
"@SQ\tLN:222\tSN:chr20\n");
179 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr20"),
"chr20") == 0);
180 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"222") == 0);
185 assert(sq2->
setTag(
"LN",
"333") ==
true);
186 assert(sq2->
setTag(
"SN",
"chr20") ==
true);
187 assert(samHeader.
addSQ(sq2) ==
false);
189 assert(headerString ==
"@SQ\tLN:222\tSN:chr20\n");
191 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr20"),
"chr20") == 0);
192 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr20"),
"222") == 0);
196 assert(samHeader.
setSQTag(
"AS",
"HG18",
"chr20") ==
true);
198 assert(headerString ==
"@SQ\tLN:222\tSN:chr20\tAS:HG18\n");
200 assert(strcmp(samHeader.
getSQTagValue(
"AS",
"chr20"),
"HG18") == 0);
203 assert(samHeader.
setSQTag(
"AS",
"HG19",
"chr20") ==
true);
205 assert(headerString ==
"@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
207 assert(strcmp(samHeader.
getSQTagValue(
"AS",
"chr20"),
"HG19") == 0);
211 assert(sq2->
setTag(
"LN",
"333") ==
true);
212 assert(sq2->
setTag(
"SN",
"chr1") ==
true);
213 assert(samHeader.
addSQ(sq2) ==
true);
215 assert(headerString ==
216 "@SQ\tLN:222\tSN:chr20\tAS:HG19\n@SQ\tLN:333\tSN:chr1\n");
218 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr1"),
"chr1") == 0);
219 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr1"),
"333") == 0);
222 assert(samHeader.
removeSQ(
"chr100") ==
true);
224 assert(headerString ==
225 "@SQ\tLN:222\tSN:chr20\tAS:HG19\n@SQ\tLN:333\tSN:chr1\n");
231 assert(headerString ==
"@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
232 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"chr1"),
"") == 0);
233 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"chr1"),
"") == 0);
241 assert(strcmp(samHeader.
getTagSO(),
"") == 0);
244 assert(hd->
setTag(
"VN",
"2.1") ==
true);
247 assert(headerString ==
"@HD\tVN:2.1\n@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
251 assert(hd->
setTag(
"SO",
"coordinate") ==
true);
254 assert(headerString ==
255 "@HD\tVN:2.1\tSO:coordinate\n@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
256 assert(strcmp(samHeader.
getHDTagValue(
"SO"),
"coordinate") == 0);
261 assert(headerString ==
"");
264 assert(samHeader.
setHDTag(
"SO",
"queryname") ==
true);
265 assert(strcmp(samHeader.
getHDTagValue(
"SO"),
"queryname") == 0);
268 assert(headerString ==
"");
271 assert(samHeader.
setHDTag(
"VN",
"3.1") ==
true);
272 assert(strcmp(samHeader.
getHDTagValue(
"SO"),
"queryname") == 0);
275 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n");
279 assert(samHeader.
removePG(
"1") ==
true);
281 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n");
285 assert(samHeader.
addPG(pg) ==
false);
287 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n");
290 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"") == 0);
291 assert(samHeader.
setPGTag(
"ID",
"pid",
"pid") ==
true);
292 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
294 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
297 assert(samHeader.
setPGTag(
"ID",
"pid1",
"pid") ==
false);
299 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
300 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
304 assert(samHeader.
addPG(pg) ==
false);
306 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
310 assert(pg->
setTag(
"ID",
"pid") ==
true);
311 assert(samHeader.
addPG(pg) ==
false);
313 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
317 pg = samHeader.
getPG(
"pid1");
321 assert(strcmp(samHeader.
getPGTagValue(
"CL",
"pid"),
"") == 0);
324 pg = samHeader.
getPG(
"pid");
328 assert(pg->
setTag(
"VN",
"pg1") ==
true);
329 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"pid"),
"pg1") == 0);
330 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
332 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\tVN:pg1\n");
335 assert(pg->
setTag(
"ID",
"pid1") ==
false);
336 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"pid"),
"pg1") == 0);
337 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
339 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\tVN:pg1\n");
342 assert(samHeader.
setPGTag(
"VN",
"pg",
"pid") ==
true);
343 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"pid"),
"pg") == 0);
344 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
346 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\tVN:pg\n");
349 assert(pg->
setTag(
"VN",
"") ==
true);
350 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"pid"),
"") == 0);
351 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
353 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
356 assert(samHeader.
removePG(
"pid1") ==
true);
358 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
359 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"pid"),
"") == 0);
360 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"pid") == 0);
363 assert(samHeader.
removePG(
"pid") ==
true);
365 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n");
366 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"pid"),
"") == 0);
367 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"pid"),
"") == 0);
371 assert(pg->
setTag(
"ID",
"newID") ==
true);
372 assert(samHeader.
addPG(pg) ==
true);
374 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
379 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
381 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"newID"),
"newID") == 0);
385 assert(pg->
setTag(
"ID",
"newID1") ==
true);
386 assert(samHeader.
addPG(pg) ==
true);
388 assert(headerString ==
389 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@PG\tID:newID1\n");
393 assert(pg->
setTag(
"ID",
"pid") ==
true);
394 assert(samHeader.
addPG(pg) ==
true);
396 assert(headerString ==
397 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@PG\tID:newID1\n@PG\tID:pid\n");
400 assert(samHeader.
removePG(
"newID1") ==
true);
402 assert(headerString ==
403 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@PG\tID:pid\n");
406 assert(samHeader.
removePG(
"pid") ==
true);
408 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
411 assert(samHeader.
setPGTag(
"VN",
"1.0",
"newID") ==
true);
412 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"newID"),
"1.0") == 0);
413 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"newID"),
"newID") == 0);
415 assert(headerString ==
416 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\tVN:1.0\n");
419 assert(samHeader.
setPGTag(
"VN",
"",
"newID") ==
true);
420 assert(strcmp(samHeader.
getPGTagValue(
"VN",
"newID"),
"") == 0);
421 assert(strcmp(samHeader.
getPGTagValue(
"ID",
"newID"),
"newID") == 0);
423 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
427 assert(samHeader.
setSQTag(
"AS",
"HG18",
"newName") ==
false);
430 assert(headerString ==
431 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
433 assert(samHeader.
setSQTag(
"SN",
"newName",
"newName") ==
false);
435 assert(headerString ==
436 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
437 sq = samHeader.
getSQ(
"newName");
440 assert(samHeader.
setSQTag(
"LN",
"111",
"newName") ==
true);
441 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"newName"),
"newName") == 0);
442 assert(strcmp(samHeader.
getSQTagValue(
"AS",
"newName"),
"") == 0);
443 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"newName"),
"111") == 0);
445 assert(headerString ==
446 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\n");
448 assert(samHeader.
setSQTag(
"AS",
"HG18",
"newName") ==
true);
449 assert(strcmp(samHeader.
getSQTagValue(
"AS",
"newName"),
"HG18") == 0);
450 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"newName"),
"newName") == 0);
451 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"newName"),
"111") == 0);
453 assert(headerString ==
454 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\n");
457 sq = samHeader.
getSQ(
"newName");
460 assert(sq->
setTag(
"SP",
"species") ==
true);
461 assert(strcmp(samHeader.
getSQTagValue(
"SN",
"newName"),
"newName") == 0);
462 assert(strcmp(samHeader.
getSQTagValue(
"AS",
"newName"),
"HG18") == 0);
463 assert(strcmp(samHeader.
getSQTagValue(
"LN",
"newName"),
"111") == 0);
464 assert(strcmp(samHeader.
getSQTagValue(
"SP",
"newName"),
"species") == 0);
466 assert(headerString ==
467 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
480 assert(samHeader.
setRGTag(
"SM",
"sm1",
"rgID") ==
true);
482 assert(headerString ==
483 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n");
484 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID"),
"rgID") == 0);
487 assert(samHeader.
setRGTag(
"ID",
"rgID1",
"rgID") ==
false);
489 assert(headerString ==
490 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n");
491 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID"),
"rgID") == 0);
495 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
497 assert(strcmp(newHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
500 assert(samHeader.
setRGTag(
"SM",
"sample1",
"rgID1") ==
true);
503 assert(headerString ==
504 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n");
505 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID1"),
"rgID1") == 0);
506 assert(strcmp(samHeader.
getRGTagValue(
"SM",
"rgID1"),
"sample1") == 0);
509 assert(samHeader.
setRGTag(
"SM",
"sample",
"rgID1") ==
true);
511 assert(headerString ==
512 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
513 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID1"),
"rgID1") == 0);
514 assert(strcmp(samHeader.
getRGTagValue(
"SM",
"rgID1"),
"sample") == 0);
517 assert(samHeader.
removeRG(
"rgID2") ==
true);
519 assert(headerString ==
520 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
525 assert(samHeader.
addRG(rg) ==
false);
527 assert(headerString ==
528 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
530 assert(rg->
setTag(
"ID",
"rgID2") ==
true);
531 assert(rg->
setTag(
"SM",
"sm2") ==
true);
533 assert(headerString ==
534 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
536 assert(samHeader.
addRG(rg) ==
true);
538 assert(headerString ==
539 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n@RG\tID:rgID2\tSM:sm2\n");
540 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID2"),
"rgID2") == 0);
544 assert(rg->
setTag(
"ID",
"rgID2") ==
true);
545 assert(samHeader.
addRG(rg) ==
false);
547 assert(headerString ==
548 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n@RG\tID:rgID2\tSM:sm2\n");
552 assert(samHeader.
removeRG(
"rgID2") ==
true);
554 assert(headerString ==
555 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
558 assert(strcmp(samHeader.
getRGTagValue(
"DS",
"rgID"),
"") == 0);
560 assert(headerString ==
561 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
564 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID2"),
"") == 0);
566 assert(headerString ==
567 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
570 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID22"),
"") == 0);
572 assert(headerString ==
573 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
577 assert(samHeader.
addRG(rg) ==
false);
579 assert(headerString ==
580 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n");
584 assert(rg->
setTag(
"ID",
"rgID2") ==
true);
585 assert(rg->
setTag(
"SM",
"sm2") ==
true);
586 assert(samHeader.
addRG(rg) ==
true);
588 assert(headerString ==
589 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n@RG\tID:rgID2\tSM:sm2\n");
592 assert(samHeader.
addHeaderLine(
"@RG\tID:rgID\tSM:sm5") ==
false);
594 assert(headerString ==
"@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample\n@RG\tID:rgID2\tSM:sm2\n");
596 assert(strcmp(samHeader.
getRGTagValue(
"SM",
"rgID"),
"sm1") == 0);
600 rg = samHeader.
getRG(
"rgID1");
602 assert(rg->
setTag(
"SM",
"sample1") ==
true);
604 assert(headerString ==
605 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n");
608 assert(rg->
setTag(
"ID",
"rgID111") ==
false);
610 assert(headerString ==
611 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n");
617 assert(headerString ==
618 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n");
621 const char* hdrlinechar;
624 hdrlinechar = hdrline.c_str();
626 std::string tmpString =
"@SQ\tSN:queryname\tVN:3.1\n";
627 assert(hdrline ==
"@HD\tSO:queryname\tVN:3.1\n");
628 assert(strcmp(hdrlinechar,
629 "@HD\tSO:queryname\tVN:3.1\n") == 0);
632 assert(hdrline ==
"@PG\tID:newID\n");
634 assert(hdrline ==
"@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
636 assert(hdrline ==
"@RG\tID:rgID\tSM:sm1\n");
638 assert(hdrline ==
"@RG\tID:rgID1\tSM:sample1\n");
640 assert(hdrline ==
"@RG\tID:rgID2\tSM:sm2\n");
642 assert(hdrline ==
"");
644 assert(hdrline ==
"");
646 assert(headerString ==
647 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n");
657 assert(hdrRec != NULL);
660 assert(strcmp(hdrRec->
getTagValue(
"SO"),
"queryname") == 0);
661 assert(strcmp(hdrRec->
getTagValue(
"VN"),
"3.1") == 0);
663 assert(hdrRec != NULL);
666 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"newID") == 0);
668 assert(hdrRec != NULL);
671 assert(strcmp(hdrRec->
getTagValue(
"SN"),
"newName") == 0);
672 assert(strcmp(hdrRec->
getTagValue(
"AS"),
"HG18") == 0);
673 assert(strcmp(hdrRec->
getTagValue(
"LN"),
"111") == 0);
675 assert(hdrRec != NULL);
678 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
679 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm1") == 0);
684 assert(hdrRec != NULL);
687 assert(strcmp(hdrRec->
getTagValue(
"SN"),
"newName") == 0);
688 assert(strcmp(hdrRec->
getTagValue(
"AS"),
"HG18") == 0);
689 assert(strcmp(hdrRec->
getTagValue(
"LN"),
"111") == 0);
692 assert(hdrRec == NULL);
697 assert(hdrRec != NULL);
700 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
701 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm1") == 0);
704 assert(hdrRec != NULL);
707 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
708 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
711 assert(hdrRec != NULL);
714 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"newID") == 0);
717 assert(hdrRec != NULL);
720 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID2") == 0);
721 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm2") == 0);
724 assert(hdrRec == NULL);
729 assert(hdrRec != NULL);
732 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
733 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm1") == 0);
736 assert(hdrRec == NULL);
739 assert(hdrRec == NULL);
744 assert(hdrRec == NULL);
747 assert(hdrRec != NULL);
750 assert(strcmp(hdrRec->
getTagValue(
"SN"),
"newName") == 0);
751 assert(strcmp(hdrRec->
getTagValue(
"AS"),
"HG18") == 0);
752 assert(strcmp(hdrRec->
getTagValue(
"LN"),
"111") == 0);
755 assert(hdrRec == NULL);
760 assert(hdrRec == NULL);
763 assert(hdrRec != NULL);
766 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
767 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
770 assert(hdrRec != NULL);
773 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"newID") == 0);
777 assert(hdrRec != NULL);
780 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
781 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
783 assert(hdrRec != NULL);
786 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID2") == 0);
787 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm2") == 0);
789 assert(hdrRec == NULL);
791 assert(hdrRec == NULL);
793 assert(hdrline ==
"");
795 assert(hdrline ==
"");
798 assert(headerString ==
799 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n");
802 assert(samHeader.
addComment(
"My Comment") ==
true);
804 assert(headerString ==
805 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n@CO\tMy Comment\n");
809 assert(hdrRec == NULL);
813 assert(hdrline ==
"@CO\tMy Comment\n");
815 assert(hdrline ==
"");
817 assert(hdrline ==
"");
825 assert(samHeader.
addComment(
"My Comment2") ==
true);
827 assert(headerString ==
828 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n@CO\tMy Comment\n@CO\tMy Comment2\n");
830 newHeader = samHeader;
832 assert(headerString ==
833 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n@CO\tMy Comment\n@CO\tMy Comment2\n");
837 assert(hdrline ==
"@CO\tMy Comment2\n");
839 assert(hdrline ==
"");
841 assert(hdrline ==
"");
861 assert(hdrRec != NULL);
864 assert(strcmp(hdrRec->
getTagValue(
"SO"),
"queryname") == 0);
865 assert(strcmp(hdrRec->
getTagValue(
"VN"),
"3.1") == 0);
867 assert(hdrline ==
"@PG\tID:newID\n");
869 assert(hdrline ==
"@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
871 assert(hdrRec != NULL);
874 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
876 assert(hdrRec != NULL);
880 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
881 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
883 assert(hdrline ==
"@RG\tID:rgID2\tSM:sm2\n");
885 assert(hdrRec == NULL);
887 assert(hdrline ==
"@CO\tMy Comment\n");
889 assert(hdrRec == NULL);
891 assert(hdrline ==
"@CO\tMy Comment2\n");
893 assert(hdrline ==
"");
896 assert(hdrline ==
"");
898 assert(hdrRec == NULL);
907 assert(headerString ==
"");
909 assert(hdrline ==
"");
915 assert(hd->
addKey(
"3.1") ==
false);
919 assert(hd->
setTag(
"VN",
"3.1") ==
true);
925 assert(headerString ==
926 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n@RG\tID:rgID\tSM:sm1\n@RG\tID:rgID1\tSM:sample1\n@RG\tID:rgID2\tSM:sm2\n@CO\tMy Comment\n@CO\tMy Comment2\n");
928 assert(strcmp(newHeader.
getSQTagValue(
"LN",
"chr20"),
"") == 0);
932 void testWriteCopiedHeader(
const char* fileName)
945 validateHeader(samHeader);
952 bool hdrStatus =
true;
983 assert(samRead.ReadHeader(samHeader));
984 validateHeaderFields(samHeader);
985 std::string headerString =
"";
987 assert(headerString ==
"@HD\tVN:1.02\n@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\tLB:library2\n@CO\tComment 1\n@CO\tComment 2\n");
989 assert(bamRead.ReadHeader(samHeader));
990 validateHeaderFields(samHeader);
993 assert(headerString ==
"@HD\tVN:1.02\n@SQ\tSN:1\tLN:247249719\n@SQ\tSN:2\tLN:242951149\n@SQ\tSN:3\tLN:199501827\n@SQ\tSN:4\tLN:191273063\n@SQ\tSN:5\tLN:180857866\n@SQ\tSN:6\tLN:170899992\n@SQ\tSN:7\tLN:158821424\n@SQ\tSN:8\tLN:146274826\n@SQ\tSN:9\tLN:140273252\n@SQ\tSN:10\tLN:135374737\n@SQ\tSN:11\tLN:134452384\n@SQ\tSN:12\tLN:132349534\n@SQ\tSN:13\tLN:114142980\n@SQ\tSN:14\tLN:106368585\n@SQ\tSN:15\tLN:100338915\n@SQ\tSN:16\tLN:88827254\n@SQ\tSN:17\tLN:78774742\n@SQ\tSN:18\tLN:76117153\n@SQ\tSN:19\tLN:63811651\n@SQ\tSN:20\tLN:62435964\n@SQ\tSN:21\tLN:46944323\n@SQ\tSN:22\tLN:49691432\n@SQ\tSN:X\tLN:154913754\n@RG\tID:myID\tLB:library\tSM:sample\n@RG\tID:myID2\tSM:sample2\tLB:library2\n@CO\tComment 1\n@CO\tComment 2\n");
996 std::string expectedString =
"@HD\tVN:1.02\n";
998 assert(expectedString == hdrLine);
Child class of SamFile for reading files.
Allows the user to easily read/write a SAM/BAM file.
bool ReadHeader(SamFileHeader &header)
Reads the header section from the file and stores it in the passed in header.
void Close()
Close the file if there is one open.
bool ReadRecord(SamFileHeader &header, SamRecord &record)
Reads the next record from the file & stores it in the passed in record.
bool OpenForRead(const char *filename, SamFileHeader *header=NULL)
Open a sam/bam file for reading with the specified filename, determing the type of file and SAM/BAM b...
SamStatus::Status GetStatus()
Get the Status of the last call that sets status.
bool OpenForWrite(const char *filename, SamFileHeader *header=NULL)
Open a sam/bam file for writing with the specified filename, determining SAM/BAM from the extension (...
bool WriteHeader(SamFileHeader &header)
Writes the specified header into the file.
bool WriteRecord(SamFileHeader &header, SamRecord &record)
Writes the specified record into the file.
Class providing an easy to use interface to get/set/operate on the fields in a SAM/BAM record.
@ NO_MORE_RECS
NO_MORE_RECS: failed to read a record since there are no more to read either in the file or section i...