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");
471 assert(samHeader.
setRGTag(
"ID",
"rgID",
"rgID") ==
true);
474 assert(headerString ==
475 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
476 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID"),
"rgID") == 0);
479 assert(samHeader.
setRGTag(
"SM",
"sm1",
"rgID") ==
true);
481 assert(headerString ==
482 "@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");
483 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID"),
"rgID") == 0);
486 assert(samHeader.
setRGTag(
"ID",
"rgID1",
"rgID") ==
false);
488 assert(headerString ==
489 "@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");
490 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID"),
"rgID") == 0);
494 assert(headerString ==
"@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
496 assert(strcmp(newHeader.
getSQTagValue(
"LN",
"chr20"),
"123") == 0);
499 assert(samHeader.
setRGTag(
"SM",
"sample1",
"rgID1") ==
true);
502 assert(headerString ==
503 "@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");
504 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID1"),
"rgID1") == 0);
505 assert(strcmp(samHeader.
getRGTagValue(
"SM",
"rgID1"),
"sample1") == 0);
508 assert(samHeader.
setRGTag(
"SM",
"sample",
"rgID1") ==
true);
510 assert(headerString ==
511 "@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");
512 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID1"),
"rgID1") == 0);
513 assert(strcmp(samHeader.
getRGTagValue(
"SM",
"rgID1"),
"sample") == 0);
516 assert(samHeader.
removeRG(
"rgID2") ==
true);
518 assert(headerString ==
519 "@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");
524 assert(samHeader.
addRG(rg) ==
false);
526 assert(headerString ==
527 "@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");
529 assert(rg->
setTag(
"ID",
"rgID2") ==
true);
530 assert(rg->
setTag(
"SM",
"sm2") ==
true);
532 assert(headerString ==
533 "@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");
535 assert(samHeader.
addRG(rg) ==
true);
537 assert(headerString ==
538 "@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");
539 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID2"),
"rgID2") == 0);
543 assert(rg->
setTag(
"ID",
"rgID2") ==
true);
544 assert(samHeader.
addRG(rg) ==
false);
546 assert(headerString ==
547 "@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");
551 assert(samHeader.
removeRG(
"rgID2") ==
true);
553 assert(headerString ==
554 "@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");
557 assert(strcmp(samHeader.
getRGTagValue(
"DS",
"rgID"),
"") == 0);
559 assert(headerString ==
560 "@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");
563 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID2"),
"") == 0);
565 assert(headerString ==
566 "@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");
569 assert(strcmp(samHeader.
getRGTagValue(
"ID",
"rgID22"),
"") == 0);
571 assert(headerString ==
572 "@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");
576 assert(samHeader.
addRG(rg) ==
false);
578 assert(headerString ==
579 "@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");
583 assert(rg->
setTag(
"ID",
"rgID2") ==
true);
584 assert(rg->
setTag(
"SM",
"sm2") ==
true);
585 assert(samHeader.
addRG(rg) ==
true);
587 assert(headerString ==
588 "@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");
591 assert(samHeader.
addHeaderLine(
"@RG\tID:rgID\tSM:sm5") ==
false);
593 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");
595 assert(strcmp(samHeader.
getRGTagValue(
"SM",
"rgID"),
"sm1") == 0);
599 rg = samHeader.
getRG(
"rgID1");
601 assert(rg->
setTag(
"SM",
"sample1") ==
true);
603 assert(headerString ==
604 "@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");
607 assert(rg->
setTag(
"ID",
"rgID111") ==
false);
609 assert(headerString ==
610 "@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");
616 assert(headerString ==
617 "@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");
620 const char* hdrlinechar;
623 hdrlinechar = hdrline.c_str();
625 std::string tmpString =
"@SQ\tSN:queryname\tVN:3.1\n";
626 assert(hdrline ==
"@HD\tSO:queryname\tVN:3.1\n");
627 assert(strcmp(hdrlinechar,
628 "@HD\tSO:queryname\tVN:3.1\n") == 0);
631 assert(hdrline ==
"@PG\tID:newID\n");
633 assert(hdrline ==
"@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
635 assert(hdrline ==
"@RG\tID:rgID\tSM:sm1\n");
637 assert(hdrline ==
"@RG\tID:rgID1\tSM:sample1\n");
639 assert(hdrline ==
"@RG\tID:rgID2\tSM:sm2\n");
641 assert(hdrline ==
"");
643 assert(hdrline ==
"");
645 assert(headerString ==
646 "@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");
656 assert(hdrRec != NULL);
659 assert(strcmp(hdrRec->
getTagValue(
"SO"),
"queryname") == 0);
660 assert(strcmp(hdrRec->
getTagValue(
"VN"),
"3.1") == 0);
662 assert(hdrRec != NULL);
665 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"newID") == 0);
667 assert(hdrRec != NULL);
670 assert(strcmp(hdrRec->
getTagValue(
"SN"),
"newName") == 0);
671 assert(strcmp(hdrRec->
getTagValue(
"AS"),
"HG18") == 0);
672 assert(strcmp(hdrRec->
getTagValue(
"LN"),
"111") == 0);
674 assert(hdrRec != NULL);
677 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
678 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm1") == 0);
683 assert(hdrRec != NULL);
686 assert(strcmp(hdrRec->
getTagValue(
"SN"),
"newName") == 0);
687 assert(strcmp(hdrRec->
getTagValue(
"AS"),
"HG18") == 0);
688 assert(strcmp(hdrRec->
getTagValue(
"LN"),
"111") == 0);
691 assert(hdrRec == NULL);
696 assert(hdrRec != NULL);
699 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
700 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm1") == 0);
703 assert(hdrRec != NULL);
706 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
707 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
710 assert(hdrRec != NULL);
713 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"newID") == 0);
716 assert(hdrRec != NULL);
719 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID2") == 0);
720 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm2") == 0);
723 assert(hdrRec == NULL);
728 assert(hdrRec != NULL);
731 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
732 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm1") == 0);
735 assert(hdrRec == NULL);
738 assert(hdrRec == NULL);
743 assert(hdrRec == NULL);
746 assert(hdrRec != NULL);
749 assert(strcmp(hdrRec->
getTagValue(
"SN"),
"newName") == 0);
750 assert(strcmp(hdrRec->
getTagValue(
"AS"),
"HG18") == 0);
751 assert(strcmp(hdrRec->
getTagValue(
"LN"),
"111") == 0);
754 assert(hdrRec == NULL);
759 assert(hdrRec == NULL);
762 assert(hdrRec != NULL);
765 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
766 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
769 assert(hdrRec != NULL);
772 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"newID") == 0);
776 assert(hdrRec != NULL);
779 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
780 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
782 assert(hdrRec != NULL);
785 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID2") == 0);
786 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sm2") == 0);
788 assert(hdrRec == NULL);
790 assert(hdrRec == NULL);
792 assert(hdrline ==
"");
794 assert(hdrline ==
"");
797 assert(headerString ==
798 "@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");
801 assert(samHeader.
addComment(
"My Comment") ==
true);
803 assert(headerString ==
804 "@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");
808 assert(hdrRec == NULL);
812 assert(hdrline ==
"@CO\tMy Comment\n");
814 assert(hdrline ==
"");
816 assert(hdrline ==
"");
824 assert(samHeader.
addComment(
"My Comment2") ==
true);
826 assert(headerString ==
827 "@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");
829 newHeader = samHeader;
831 assert(headerString ==
832 "@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");
836 assert(hdrline ==
"@CO\tMy Comment2\n");
838 assert(hdrline ==
"");
840 assert(hdrline ==
"");
860 assert(hdrRec != NULL);
863 assert(strcmp(hdrRec->
getTagValue(
"SO"),
"queryname") == 0);
864 assert(strcmp(hdrRec->
getTagValue(
"VN"),
"3.1") == 0);
866 assert(hdrline ==
"@PG\tID:newID\n");
868 assert(hdrline ==
"@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
870 assert(hdrRec != NULL);
873 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID") == 0);
875 assert(hdrRec != NULL);
879 assert(strcmp(hdrRec->
getTagValue(
"ID"),
"rgID1") == 0);
880 assert(strcmp(hdrRec->
getTagValue(
"SM"),
"sample1") == 0);
882 assert(hdrline ==
"@RG\tID:rgID2\tSM:sm2\n");
884 assert(hdrRec == NULL);
886 assert(hdrline ==
"@CO\tMy Comment\n");
888 assert(hdrRec == NULL);
890 assert(hdrline ==
"@CO\tMy Comment2\n");
892 assert(hdrline ==
"");
895 assert(hdrline ==
"");
897 assert(hdrRec == NULL);
906 assert(headerString ==
"");
908 assert(hdrline ==
"");
914 assert(hd->
addKey(
"3.1") ==
false);
918 assert(hd->
setTag(
"VN",
"3.1") ==
true);
924 assert(headerString ==
925 "@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");
927 assert(strcmp(newHeader.
getSQTagValue(
"LN",
"chr20"),
"") == 0);
931 void testWriteCopiedHeader(
const char* fileName)
937 assert(samOut.OpenForWrite(
"results/MyTestOut2.bam"));
939 assert(samOut2.OpenForWrite(
"results/MyTestOut2.sam"));
944 validateHeader(samHeader);
949 assert(samHeader.getNextHeaderLine(hdrLine));
951 bool hdrStatus =
true;
955 hdrStatus = samHeader.getNextHeaderLine(hdrLine);
959 assert(samOut.WriteHeader(newHeader));
960 assert(samOut2.WriteHeader(newHeader));
968 assert(samOut.WriteRecord(newHeader, samRecord));
969 assert(samOut2.WriteRecord(newHeader, samRecord));
982 assert(samRead.ReadHeader(samHeader));
983 validateHeaderFields(samHeader);
984 std::string headerString =
"";
985 assert(samHeader.getHeaderString(headerString) ==
true);
986 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");
988 assert(bamRead.ReadHeader(samHeader));
989 validateHeaderFields(samHeader);
991 assert(samHeader.getHeaderString(headerString) ==
true);
992 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");
994 assert(samHeader.getNextHeaderLine(hdrLine));
995 std::string expectedString =
"@HD\tVN:1.02\n";
997 assert(expectedString == hdrLine);
bool ReadHeader(SamFileHeader &header)
Reads the header section from the file and stores it in the passed in header.
Child class of SamFile for reading files.
NO_MORE_RECS: failed to read a record since there are no more to read either in the file or section i...
Allows the user to easily read/write a SAM/BAM file.
SamStatus::Status GetStatus()
Get the Status of the last call that sets status.
bool WriteHeader(SamFileHeader &header)
Writes the specified header into the file.
bool ReadRecord(SamFileHeader &header, SamRecord &record)
Reads the next record from the file & stores it in the passed in record.
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 (...
Class providing an easy to use interface to get/set/operate on the fields in a SAM/BAM 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...