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)
944 validateHeader(samHeader);
951 bool hdrStatus =
true;
982 assert(samRead.ReadHeader(samHeader));
983 validateHeaderFields(samHeader);
984 std::string headerString =
"";
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);
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");
995 std::string expectedString =
"@HD\tVN:1.02\n";
997 assert(expectedString == hdrLine);
bool WriteRecord(SamFileHeader &header, SamRecord &record)
Writes the specified record into the file.
@ 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...
SamStatus::Status GetStatus()
Get the Status of the last call that sets status.
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...
bool WriteHeader(SamFileHeader &header)
Writes the specified header into the 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.
Allows the user to easily read/write a SAM/BAM file.
Child class of SamFile for reading files.