00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #include "SamFile.h"
00019 #include "WriteFiles.h"
00020 #include "TestValidate.h"
00021
00022 #include <assert.h>
00023 #include <stdio.h>
00024
00025 void testWrite()
00026 {
00027 testHeaderWrite();
00028 testWriteCopiedHeader("testFiles/testSam.sam");
00029 #ifdef __ZLIB_AVAILABLE__
00030 testWriteCopiedHeader("testFiles/testBam.bam");
00031 #endif
00032 }
00033
00034 void testHeaderWrite()
00035 {
00036 SamFile samOut;
00037
00038 samOut.OpenForWrite("results/MyTestOut.sam");
00039
00040
00041 SamFileHeader samHeader;
00042
00043 std::string headerString = "";
00044
00045
00046 assert(samHeader.getHD() == NULL);
00047 assert(samHeader.getPG("1") == NULL);
00048 assert(strcmp(samHeader.getTagSO(), "") == 0);
00049
00050
00051 assert(samHeader.removeHD() == true);
00052 assert(samHeader.getHD() == NULL);
00053 assert(strcmp(samHeader.getHDTagValue("VN"), "") == 0);
00054 assert(samHeader.getHeaderString(headerString) == true);
00055 assert(headerString == "");
00056
00057 char type[3] = "HD";
00058 char tag[3] = "VN";
00059
00060 assert(strcmp(samHeader.getHDTagValue("VN"), "") == 0);
00061 assert(samHeader.addHeaderLine(type, tag, "1.0") == true);
00062 assert(samHeader.getHeaderString(headerString) == true);
00063 assert(headerString == "@HD\tVN:1.0\n");
00064
00065
00066 assert(strcmp(samHeader.getHDTagValue("VN"), "1.0") == 0);
00067
00068 type[0] = 'S';
00069 type[1] = 'Q';
00070 tag[0] = 'L';
00071 tag[1] = 'N';
00072
00073 assert(samHeader.addHeaderLine(type, tag, "123") == false);
00074 assert(samHeader.getHeaderString(headerString) == true);
00075 assert(headerString == "@HD\tVN:1.0\n");
00076
00077
00078 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "") == 0);
00079
00080
00081 std::string line = "@SQ\tSN:123";
00082 assert(samHeader.addHeaderLine(line.c_str()) == false);
00083 assert(samHeader.getHeaderString(headerString) == true);
00084 assert(headerString == "@HD\tVN:1.0\n");
00085
00086
00087 line = "@SQ\tLN:123\tSN:chr20";
00088 assert(samHeader.addHeaderLine(line.c_str()) == true);
00089 assert(samHeader.getHeaderString(headerString) == true);
00090 assert(headerString == "@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
00091
00092 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00093
00094
00095 samHeader = samHeader;
00096 assert(samHeader.addHeaderLine(line.c_str()) == false);
00097 assert(samHeader.getHeaderString(headerString) == true);
00098 assert(headerString == "@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
00099
00100 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00101
00102 samHeader.copy(samHeader);
00103 assert(samHeader.addHeaderLine(line.c_str()) == false);
00104 assert(samHeader.getHeaderString(headerString) == true);
00105 assert(headerString == "@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
00106
00107 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00108
00109
00110 assert(samHeader.addHeaderLine("@HD\tVN:1.1") == false);
00111 assert(samHeader.getHeaderString(headerString) == true);
00112 assert(headerString == "@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
00113
00114 assert(strcmp(samHeader.getHDTagValue("VN"), "1.0") == 0);
00115
00116
00117 SamFileHeader newHeader = samHeader;
00118 assert(newHeader.getHeaderString(headerString) == true);
00119 assert(headerString == "@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
00120
00121 assert(strcmp(newHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00122
00123
00124
00125 assert(samHeader.setHDTag("VN", "1.1") == true);
00126 assert(samHeader.getHeaderString(headerString) == true);
00127 assert(headerString == "@HD\tVN:1.1\n@SQ\tLN:123\tSN:chr20\n");
00128
00129 assert(strcmp(samHeader.getHDTagValue("VN"), "1.1") == 0);
00130
00131
00132 assert(samHeader.setHDTag("VN", "") == true);
00133 assert(samHeader.getHeaderString(headerString) == true);
00134 assert(headerString == "@SQ\tLN:123\tSN:chr20\n");
00135
00136 assert(strcmp(samHeader.getHDTagValue("VN"), "") == 0);
00137
00138
00139 assert(samHeader.setSQTag("SN", "", "chr20") == false);
00140 assert(samHeader.getHeaderString(headerString) == true);
00141 assert(headerString == "@SQ\tLN:123\tSN:chr20\n");
00142
00143 assert(strcmp(samHeader.getSQTagValue("SN", "chr20"), "chr20") == 0);
00144 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00145
00146
00147 assert(samHeader.setSQTag("LN", "", "chr20") == false);
00148 assert(samHeader.getHeaderString(headerString) == true);
00149 assert(headerString == "@SQ\tLN:123\tSN:chr20\n");
00150
00151 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00152 assert(strcmp(samHeader.getSQTagValue("SN", "chr20"), "chr20") == 0);
00153
00154
00155 assert(samHeader.removeSQ("chr20") == true);
00156
00157 assert(samHeader.getHeaderString(headerString) == true);
00158 assert(headerString == "");
00159
00160 assert(strcmp(samHeader.getSQTagValue("SN", "chr20"), "") == 0);
00161 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "") == 0);
00162
00163
00164 SamHeaderSQ* sq = new SamHeaderSQ();
00165 assert(sq->setTag("LN", "123") == true);
00166 assert(sq->setTag("SN", "chr20") == true);
00167 assert(samHeader.addSQ(sq) == true);
00168 assert(samHeader.getHeaderString(headerString) == true);
00169 assert(headerString == "@SQ\tLN:123\tSN:chr20\n");
00170
00171 assert(strcmp(samHeader.getSQTagValue("SN", "chr20"), "chr20") == 0);
00172 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00173
00174
00175 assert(sq->setTag("LN", "222") == true);
00176 assert(samHeader.getHeaderString(headerString) == true);
00177 assert(headerString == "@SQ\tLN:222\tSN:chr20\n");
00178
00179 assert(strcmp(samHeader.getSQTagValue("SN", "chr20"), "chr20") == 0);
00180 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "222") == 0);
00181
00182
00183
00184 SamHeaderSQ* sq2 = new SamHeaderSQ();
00185 assert(sq2->setTag("LN", "333") == true);
00186 assert(sq2->setTag("SN", "chr20") == true);
00187 assert(samHeader.addSQ(sq2) == false);
00188 assert(samHeader.getHeaderString(headerString) == true);
00189 assert(headerString == "@SQ\tLN:222\tSN:chr20\n");
00190
00191 assert(strcmp(samHeader.getSQTagValue("SN", "chr20"), "chr20") == 0);
00192 assert(strcmp(samHeader.getSQTagValue("LN", "chr20"), "222") == 0);
00193 delete sq2;
00194
00195
00196 assert(samHeader.setSQTag("AS", "HG18", "chr20") == true);
00197 assert(samHeader.getHeaderString(headerString) == true);
00198 assert(headerString == "@SQ\tLN:222\tSN:chr20\tAS:HG18\n");
00199
00200 assert(strcmp(samHeader.getSQTagValue("AS", "chr20"), "HG18") == 0);
00201
00202
00203 assert(samHeader.setSQTag("AS", "HG19", "chr20") == true);
00204 assert(samHeader.getHeaderString(headerString) == true);
00205 assert(headerString == "@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
00206
00207 assert(strcmp(samHeader.getSQTagValue("AS", "chr20"), "HG19") == 0);
00208
00209
00210 sq2 = new SamHeaderSQ();
00211 assert(sq2->setTag("LN", "333") == true);
00212 assert(sq2->setTag("SN", "chr1") == true);
00213 assert(samHeader.addSQ(sq2) == true);
00214 assert(samHeader.getHeaderString(headerString) == true);
00215 assert(headerString ==
00216 "@SQ\tLN:222\tSN:chr20\tAS:HG19\n@SQ\tLN:333\tSN:chr1\n");
00217
00218 assert(strcmp(samHeader.getSQTagValue("SN", "chr1"), "chr1") == 0);
00219 assert(strcmp(samHeader.getSQTagValue("LN", "chr1"), "333") == 0);
00220
00221
00222 assert(samHeader.removeSQ("chr100") == true);
00223 assert(samHeader.getHeaderString(headerString) == true);
00224 assert(headerString ==
00225 "@SQ\tLN:222\tSN:chr20\tAS:HG19\n@SQ\tLN:333\tSN:chr1\n");
00226
00227
00228 sq2->reset();
00229
00230 assert(samHeader.getHeaderString(headerString) == true);
00231 assert(headerString == "@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
00232 assert(strcmp(samHeader.getSQTagValue("SN", "chr1"), "") == 0);
00233 assert(strcmp(samHeader.getSQTagValue("LN", "chr1"), "") == 0);
00234
00235
00236
00237
00238 SamHeaderHD* hd = samHeader.getHD();
00239 assert(hd != NULL);
00240
00241 assert(strcmp(samHeader.getTagSO(), "") == 0);
00242
00243
00244 assert(hd->setTag("VN", "2.1") == true);
00245
00246 assert(samHeader.getHeaderString(headerString) == true);
00247 assert(headerString == "@HD\tVN:2.1\n@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
00248 assert(strcmp(samHeader.getHDTagValue("VN"), "2.1") == 0);
00249
00250
00251 assert(hd->setTag("SO", "coordinate") == true);
00252
00253 assert(samHeader.getHeaderString(headerString) == true);
00254 assert(headerString ==
00255 "@HD\tVN:2.1\tSO:coordinate\n@SQ\tLN:222\tSN:chr20\tAS:HG19\n");
00256 assert(strcmp(samHeader.getHDTagValue("SO"), "coordinate") == 0);
00257
00258
00259 samHeader.resetHeader();
00260 assert(samHeader.getHeaderString(headerString) == true);
00261 assert(headerString == "");
00262
00263
00264 assert(samHeader.setHDTag("SO", "queryname") == true);
00265 assert(strcmp(samHeader.getHDTagValue("SO"), "queryname") == 0);
00266 assert(samHeader.getHeaderString(headerString) == true);
00267
00268 assert(headerString == "");
00269
00270
00271 assert(samHeader.setHDTag("VN", "3.1") == true);
00272 assert(strcmp(samHeader.getHDTagValue("SO"), "queryname") == 0);
00273 assert(strcmp(samHeader.getHDTagValue("VN"), "3.1") == 0);
00274 assert(samHeader.getHeaderString(headerString) == true);
00275 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n");
00276
00277
00278
00279 assert(samHeader.removePG("1") == true);
00280 assert(samHeader.getHeaderString(headerString) == true);
00281 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n");
00282
00283
00284 SamHeaderPG* pg = NULL;
00285 assert(samHeader.addPG(pg) == false);
00286 assert(samHeader.getHeaderString(headerString) == true);
00287 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n");
00288
00289
00290 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "") == 0);
00291 assert(samHeader.setPGTag("ID", "pid", "pid") == true);
00292 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00293 assert(samHeader.getHeaderString(headerString) == true);
00294 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
00295
00296
00297 assert(samHeader.setPGTag("ID", "pid1", "pid") == false);
00298 assert(samHeader.getHeaderString(headerString) == true);
00299 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
00300 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00301
00302
00303 pg = NULL;
00304 assert(samHeader.addPG(pg) == false);
00305 assert(samHeader.getHeaderString(headerString) == true);
00306 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
00307
00308
00309 pg = new SamHeaderPG();
00310 assert(pg->setTag("ID", "pid") == true);
00311 assert(samHeader.addPG(pg) == false);
00312 assert(samHeader.getHeaderString(headerString) == true);
00313 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
00314 delete pg;
00315
00316
00317 pg = samHeader.getPG("pid1");
00318 assert(pg == NULL);
00319
00320
00321 assert(strcmp(samHeader.getPGTagValue("CL", "pid"), "") == 0);
00322
00323
00324 pg = samHeader.getPG("pid");
00325 assert(pg != NULL);
00326 assert(strcmp(pg->getTagValue("ID"), "pid") == 0);
00327
00328 assert(pg->setTag("VN", "pg1") == true);
00329 assert(strcmp(samHeader.getPGTagValue("VN", "pid"), "pg1") == 0);
00330 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00331 assert(samHeader.getHeaderString(headerString) == true);
00332 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\tVN:pg1\n");
00333
00334
00335 assert(pg->setTag("ID", "pid1") == false);
00336 assert(strcmp(samHeader.getPGTagValue("VN", "pid"), "pg1") == 0);
00337 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00338 assert(samHeader.getHeaderString(headerString) == true);
00339 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\tVN:pg1\n");
00340
00341
00342 assert(samHeader.setPGTag("VN", "pg", "pid") == true);
00343 assert(strcmp(samHeader.getPGTagValue("VN", "pid"), "pg") == 0);
00344 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00345 assert(samHeader.getHeaderString(headerString) == true);
00346 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\tVN:pg\n");
00347
00348
00349 assert(pg->setTag("VN", "") == true);
00350 assert(strcmp(samHeader.getPGTagValue("VN", "pid"), "") == 0);
00351 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00352 assert(samHeader.getHeaderString(headerString) == true);
00353 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
00354
00355
00356 assert(samHeader.removePG("pid1") == true);
00357 assert(samHeader.getHeaderString(headerString) == true);
00358 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:pid\n");
00359 assert(strcmp(samHeader.getPGTagValue("VN", "pid"), "") == 0);
00360 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "pid") == 0);
00361
00362
00363 assert(samHeader.removePG("pid") == true);
00364 assert(samHeader.getHeaderString(headerString) == true);
00365 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n");
00366 assert(strcmp(samHeader.getPGTagValue("VN", "pid"), "") == 0);
00367 assert(strcmp(samHeader.getPGTagValue("ID", "pid"), "") == 0);
00368
00369
00370 pg = new SamHeaderPG();
00371 assert(pg->setTag("ID", "newID") == true);
00372 assert(samHeader.addPG(pg) == true);
00373 assert(samHeader.getHeaderString(headerString) == true);
00374 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
00375
00376
00377 assert(samHeader.addHeaderLine("@PG\tID:newID") == false);
00378 assert(samHeader.getHeaderString(headerString) == true);
00379 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
00380
00381 assert(strcmp(samHeader.getPGTagValue("ID", "newID"), "newID") == 0);
00382
00383
00384 pg = new SamHeaderPG();
00385 assert(pg->setTag("ID", "newID1") == true);
00386 assert(samHeader.addPG(pg) == true);
00387 assert(samHeader.getHeaderString(headerString) == true);
00388 assert(headerString ==
00389 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@PG\tID:newID1\n");
00390
00391
00392 pg = new SamHeaderPG();
00393 assert(pg->setTag("ID", "pid") == true);
00394 assert(samHeader.addPG(pg) == true);
00395 assert(samHeader.getHeaderString(headerString) == true);
00396 assert(headerString ==
00397 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@PG\tID:newID1\n@PG\tID:pid\n");
00398
00399
00400 assert(samHeader.removePG("newID1") == true);
00401 assert(samHeader.getHeaderString(headerString) == true);
00402 assert(headerString ==
00403 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@PG\tID:pid\n");
00404
00405
00406 assert(samHeader.removePG("pid") == true);
00407 assert(samHeader.getHeaderString(headerString) == true);
00408 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
00409
00410
00411 assert(samHeader.setPGTag("VN", "1.0", "newID") == true);
00412 assert(strcmp(samHeader.getPGTagValue("VN", "newID"), "1.0") == 0);
00413 assert(strcmp(samHeader.getPGTagValue("ID", "newID"), "newID") == 0);
00414 assert(samHeader.getHeaderString(headerString) == true);
00415 assert(headerString ==
00416 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\tVN:1.0\n");
00417
00418
00419 assert(samHeader.setPGTag("VN", "", "newID") == true);
00420 assert(strcmp(samHeader.getPGTagValue("VN", "newID"), "") == 0);
00421 assert(strcmp(samHeader.getPGTagValue("ID", "newID"), "newID") == 0);
00422 assert(samHeader.getHeaderString(headerString) == true);
00423 assert(headerString == "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
00424
00425
00426
00427 assert(samHeader.setSQTag("AS", "HG18", "newName") == false);
00428 assert(samHeader.getHeaderString(headerString) == true);
00429
00430 assert(headerString ==
00431 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
00432
00433 assert(samHeader.setSQTag("SN", "newName", "newName") == false);
00434 assert(samHeader.getHeaderString(headerString) == true);
00435 assert(headerString ==
00436 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n");
00437 sq = samHeader.getSQ("newName");
00438 assert(sq == NULL);
00439
00440 assert(samHeader.setSQTag("LN", "111", "newName") == true);
00441 assert(strcmp(samHeader.getSQTagValue("SN", "newName"), "newName") == 0);
00442 assert(strcmp(samHeader.getSQTagValue("AS", "newName"), "") == 0);
00443 assert(strcmp(samHeader.getSQTagValue("LN", "newName"), "111") == 0);
00444 assert(samHeader.getHeaderString(headerString) == true);
00445 assert(headerString ==
00446 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\n");
00447
00448 assert(samHeader.setSQTag("AS", "HG18", "newName") == true);
00449 assert(strcmp(samHeader.getSQTagValue("AS", "newName"), "HG18") == 0);
00450 assert(strcmp(samHeader.getSQTagValue("SN", "newName"), "newName") == 0);
00451 assert(strcmp(samHeader.getSQTagValue("LN", "newName"), "111") == 0);
00452 assert(samHeader.getHeaderString(headerString) == true);
00453 assert(headerString ==
00454 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\n");
00455
00456
00457 sq = samHeader.getSQ("newName");
00458 assert(sq != NULL);
00459
00460 assert(sq->setTag("SP", "species") == true);
00461 assert(strcmp(samHeader.getSQTagValue("SN", "newName"), "newName") == 0);
00462 assert(strcmp(samHeader.getSQTagValue("AS", "newName"), "HG18") == 0);
00463 assert(strcmp(samHeader.getSQTagValue("LN", "newName"), "111") == 0);
00464 assert(strcmp(samHeader.getSQTagValue("SP", "newName"), "species") == 0);
00465 assert(samHeader.getHeaderString(headerString) == true);
00466 assert(headerString ==
00467 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
00468
00469
00470
00471 assert(samHeader.setRGTag("ID", "rgID", "rgID") == true);
00472 assert(samHeader.getHeaderString(headerString) == true);
00473
00474 assert(headerString ==
00475 "@HD\tSO:queryname\tVN:3.1\n@PG\tID:newID\n@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
00476 assert(strcmp(samHeader.getRGTagValue("ID", "rgID"), "rgID") == 0);
00477
00478
00479 assert(samHeader.setRGTag("SM", "sm1", "rgID") == true);
00480 assert(samHeader.getHeaderString(headerString) == true);
00481 assert(headerString ==
00482 "@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");
00483 assert(strcmp(samHeader.getRGTagValue("ID", "rgID"), "rgID") == 0);
00484
00485
00486 assert(samHeader.setRGTag("ID", "rgID1", "rgID") == false);
00487 assert(samHeader.getHeaderString(headerString) == true);
00488 assert(headerString ==
00489 "@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");
00490 assert(strcmp(samHeader.getRGTagValue("ID", "rgID"), "rgID") == 0);
00491
00492
00493 assert(newHeader.getHeaderString(headerString) == true);
00494 assert(headerString == "@HD\tVN:1.0\n@SQ\tLN:123\tSN:chr20\n");
00495
00496 assert(strcmp(newHeader.getSQTagValue("LN", "chr20"), "123") == 0);
00497
00498
00499 assert(samHeader.setRGTag("SM", "sample1", "rgID1") == true);
00500 assert(samHeader.getHeaderString(headerString) == true);
00501
00502 assert(headerString ==
00503 "@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");
00504 assert(strcmp(samHeader.getRGTagValue("ID", "rgID1"), "rgID1") == 0);
00505 assert(strcmp(samHeader.getRGTagValue("SM", "rgID1"), "sample1") == 0);
00506
00507
00508 assert(samHeader.setRGTag("SM", "sample", "rgID1") == true);
00509 assert(samHeader.getHeaderString(headerString) == true);
00510 assert(headerString ==
00511 "@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");
00512 assert(strcmp(samHeader.getRGTagValue("ID", "rgID1"), "rgID1") == 0);
00513 assert(strcmp(samHeader.getRGTagValue("SM", "rgID1"), "sample") == 0);
00514
00515
00516 assert(samHeader.removeRG("rgID2") == true);
00517 assert(samHeader.getHeaderString(headerString) == true);
00518 assert(headerString ==
00519 "@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");
00520
00521
00522 SamHeaderRG* rg = new SamHeaderRG();
00523
00524 assert(samHeader.addRG(rg) == false);
00525 assert(samHeader.getHeaderString(headerString) == true);
00526 assert(headerString ==
00527 "@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");
00528
00529 assert(rg->setTag("ID", "rgID2") == true);
00530 assert(rg->setTag("SM", "sm2") == true);
00531 assert(samHeader.getHeaderString(headerString) == true);
00532 assert(headerString ==
00533 "@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");
00534
00535 assert(samHeader.addRG(rg) == true);
00536 assert(samHeader.getHeaderString(headerString) == true);
00537 assert(headerString ==
00538 "@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");
00539 assert(strcmp(samHeader.getRGTagValue("ID", "rgID2"), "rgID2") == 0);
00540
00541
00542 rg = new SamHeaderRG();
00543 assert(rg->setTag("ID", "rgID2") == true);
00544 assert(samHeader.addRG(rg) == false);
00545 assert(samHeader.getHeaderString(headerString) == true);
00546 assert(headerString ==
00547 "@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");
00548
00549
00550
00551 assert(samHeader.removeRG("rgID2") == true);
00552 assert(samHeader.getHeaderString(headerString) == true);
00553 assert(headerString ==
00554 "@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");
00555
00556
00557 assert(strcmp(samHeader.getRGTagValue("DS", "rgID"), "") == 0);
00558 assert(samHeader.getHeaderString(headerString) == true);
00559 assert(headerString ==
00560 "@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");
00561
00562
00563 assert(strcmp(samHeader.getRGTagValue("ID", "rgID2"), "") == 0);
00564 assert(samHeader.getHeaderString(headerString) == true);
00565 assert(headerString ==
00566 "@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");
00567
00568
00569 assert(strcmp(samHeader.getRGTagValue("ID", "rgID22"), "") == 0);
00570 assert(samHeader.getHeaderString(headerString) == true);
00571 assert(headerString ==
00572 "@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");
00573
00574
00575 rg = NULL;
00576 assert(samHeader.addRG(rg) == false);
00577 assert(samHeader.getHeaderString(headerString) == true);
00578 assert(headerString ==
00579 "@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");
00580
00581
00582 rg = new SamHeaderRG();
00583 assert(rg->setTag("ID", "rgID2") == true);
00584 assert(rg->setTag("SM", "sm2") == true);
00585 assert(samHeader.addRG(rg) == true);
00586 assert(samHeader.getHeaderString(headerString) == true);
00587 assert(headerString ==
00588 "@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");
00589
00590
00591 assert(samHeader.addHeaderLine("@RG\tID:rgID\tSM:sm5") == false);
00592 assert(samHeader.getHeaderString(headerString) == true);
00593 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");
00594
00595 assert(strcmp(samHeader.getRGTagValue("SM", "rgID"), "sm1") == 0);
00596
00597
00598
00599 rg = samHeader.getRG("rgID1");
00600 assert(rg != NULL);
00601 assert(rg->setTag("SM", "sample1") == true);
00602 assert(samHeader.getHeaderString(headerString) == true);
00603 assert(headerString ==
00604 "@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");
00605
00606
00607 assert(rg->setTag("ID", "rgID111") == false);
00608 assert(samHeader.getHeaderString(headerString) == true);
00609 assert(headerString ==
00610 "@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");
00611
00612
00613
00614 assert(strcmp(samHeader.getNextComment(), "") == 0);
00615 assert(samHeader.getHeaderString(headerString) == true);
00616 assert(headerString ==
00617 "@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");
00618
00619
00620 const char* hdrlinechar;
00621 std::string hdrline;
00622 assert(samHeader.getNextHeaderLine(hdrline));
00623 hdrlinechar = hdrline.c_str();
00624
00625 std::string tmpString = "@SQ\tSN:queryname\tVN:3.1\n";
00626 assert(hdrline == "@HD\tSO:queryname\tVN:3.1\n");
00627 assert(strcmp(hdrlinechar,
00628 "@HD\tSO:queryname\tVN:3.1\n") == 0);
00629
00630 assert(samHeader.getNextHeaderLine(hdrline));
00631 assert(hdrline == "@PG\tID:newID\n");
00632 assert(samHeader.getNextHeaderLine(hdrline));
00633 assert(hdrline == "@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
00634 assert(samHeader.getNextHeaderLine(hdrline));
00635 assert(hdrline == "@RG\tID:rgID\tSM:sm1\n");
00636 assert(samHeader.getNextHeaderLine(hdrline));
00637 assert(hdrline == "@RG\tID:rgID1\tSM:sample1\n");
00638 assert(samHeader.getNextHeaderLine(hdrline));
00639 assert(hdrline == "@RG\tID:rgID2\tSM:sm2\n");
00640 assert(!samHeader.getNextHeaderLine(hdrline));
00641 assert(hdrline == "");
00642 assert(!samHeader.getNextHeaderLine(hdrline));
00643 assert(hdrline == "");
00644 assert(samHeader.getHeaderString(headerString) == true);
00645 assert(headerString ==
00646 "@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");
00647
00648
00649 assert(samHeader.getNextHeaderRecord() == NULL);
00650
00651
00652 samHeader.resetHeaderRecordIter();
00653
00654
00655 SamHeaderRecord* hdrRec = samHeader.getNextHeaderRecord();
00656 assert(hdrRec != NULL);
00657 assert(strcmp(hdrRec->getTypeString(), "HD") == 0);
00658 assert(hdrRec->getType() == SamHeaderRecord::HD);
00659 assert(strcmp(hdrRec->getTagValue("SO"), "queryname") == 0);
00660 assert(strcmp(hdrRec->getTagValue("VN"), "3.1") == 0);
00661 hdrRec = samHeader.getNextHeaderRecord();
00662 assert(hdrRec != NULL);
00663 assert(strcmp(hdrRec->getTypeString(), "PG") == 0);
00664 assert(hdrRec->getType() == SamHeaderRecord::PG);
00665 assert(strcmp(hdrRec->getTagValue("ID"), "newID") == 0);
00666 hdrRec = samHeader.getNextHeaderRecord();
00667 assert(hdrRec != NULL);
00668 assert(strcmp(hdrRec->getTypeString(), "SQ") == 0);
00669 assert(hdrRec->getType() == SamHeaderRecord::SQ);
00670 assert(strcmp(hdrRec->getTagValue("SN"), "newName") == 0);
00671 assert(strcmp(hdrRec->getTagValue("AS"), "HG18") == 0);
00672 assert(strcmp(hdrRec->getTagValue("LN"), "111") == 0);
00673 hdrRec = samHeader.getNextHeaderRecord();
00674 assert(hdrRec != NULL);
00675 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00676 assert(hdrRec->getType() == SamHeaderRecord::RG);
00677 assert(strcmp(hdrRec->getTagValue("ID"), "rgID") == 0);
00678 assert(strcmp(hdrRec->getTagValue("SM"), "sm1") == 0);
00679
00680
00681
00682 hdrRec = samHeader.getNextSQRecord();
00683 assert(hdrRec != NULL);
00684 assert(strcmp(hdrRec->getTypeString(), "SQ") == 0);
00685 assert(hdrRec->getType() == SamHeaderRecord::SQ);
00686 assert(strcmp(hdrRec->getTagValue("SN"), "newName") == 0);
00687 assert(strcmp(hdrRec->getTagValue("AS"), "HG18") == 0);
00688 assert(strcmp(hdrRec->getTagValue("LN"), "111") == 0);
00689
00690 hdrRec = samHeader.getNextSQRecord();
00691 assert(hdrRec == NULL);
00692
00693
00694
00695 hdrRec = samHeader.getNextRGRecord();
00696 assert(hdrRec != NULL);
00697 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00698 assert(hdrRec->getType() == SamHeaderRecord::RG);
00699 assert(strcmp(hdrRec->getTagValue("ID"), "rgID") == 0);
00700 assert(strcmp(hdrRec->getTagValue("SM"), "sm1") == 0);
00701
00702 hdrRec = samHeader.getNextRGRecord();
00703 assert(hdrRec != NULL);
00704 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00705 assert(hdrRec->getType() == SamHeaderRecord::RG);
00706 assert(strcmp(hdrRec->getTagValue("ID"), "rgID1") == 0);
00707 assert(strcmp(hdrRec->getTagValue("SM"), "sample1") == 0);
00708
00709 hdrRec = samHeader.getNextPGRecord();
00710 assert(hdrRec != NULL);
00711 assert(strcmp(hdrRec->getTypeString(), "PG") == 0);
00712 assert(hdrRec->getType() == SamHeaderRecord::PG);
00713 assert(strcmp(hdrRec->getTagValue("ID"), "newID") == 0);
00714
00715 hdrRec = samHeader.getNextRGRecord();
00716 assert(hdrRec != NULL);
00717 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00718 assert(hdrRec->getType() == SamHeaderRecord::RG);
00719 assert(strcmp(hdrRec->getTagValue("ID"), "rgID2") == 0);
00720 assert(strcmp(hdrRec->getTagValue("SM"), "sm2") == 0);
00721
00722 hdrRec = samHeader.getNextRGRecord();
00723 assert(hdrRec == NULL);
00724
00725 samHeader.resetRGRecordIter();
00726
00727 hdrRec = samHeader.getNextRGRecord();
00728 assert(hdrRec != NULL);
00729 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00730 assert(hdrRec->getType() == SamHeaderRecord::RG);
00731 assert(strcmp(hdrRec->getTagValue("ID"), "rgID") == 0);
00732 assert(strcmp(hdrRec->getTagValue("SM"), "sm1") == 0);
00733
00734 hdrRec = samHeader.getNextPGRecord();
00735 assert(hdrRec == NULL);
00736
00737 hdrRec = samHeader.getNextSQRecord();
00738 assert(hdrRec == NULL);
00739
00740 samHeader.resetSQRecordIter();
00741
00742 hdrRec = samHeader.getNextPGRecord();
00743 assert(hdrRec == NULL);
00744
00745 hdrRec = samHeader.getNextSQRecord();
00746 assert(hdrRec != NULL);
00747 assert(strcmp(hdrRec->getTypeString(), "SQ") == 0);
00748 assert(hdrRec->getType() == SamHeaderRecord::SQ);
00749 assert(strcmp(hdrRec->getTagValue("SN"), "newName") == 0);
00750 assert(strcmp(hdrRec->getTagValue("AS"), "HG18") == 0);
00751 assert(strcmp(hdrRec->getTagValue("LN"), "111") == 0);
00752
00753 hdrRec = samHeader.getNextSQRecord();
00754 assert(hdrRec == NULL);
00755
00756 samHeader.resetPGRecordIter();
00757
00758 hdrRec = samHeader.getNextSQRecord();
00759 assert(hdrRec == NULL);
00760
00761 hdrRec = samHeader.getNextRGRecord();
00762 assert(hdrRec != NULL);
00763 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00764 assert(hdrRec->getType() == SamHeaderRecord::RG);
00765 assert(strcmp(hdrRec->getTagValue("ID"), "rgID1") == 0);
00766 assert(strcmp(hdrRec->getTagValue("SM"), "sample1") == 0);
00767
00768 hdrRec = samHeader.getNextPGRecord();
00769 assert(hdrRec != NULL);
00770 assert(strcmp(hdrRec->getTypeString(), "PG") == 0);
00771 assert(hdrRec->getType() == SamHeaderRecord::PG);
00772 assert(strcmp(hdrRec->getTagValue("ID"), "newID") == 0);
00773
00774
00775 hdrRec = samHeader.getNextHeaderRecord();
00776 assert(hdrRec != NULL);
00777 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00778 assert(hdrRec->getType() == SamHeaderRecord::RG);
00779 assert(strcmp(hdrRec->getTagValue("ID"), "rgID1") == 0);
00780 assert(strcmp(hdrRec->getTagValue("SM"), "sample1") == 0);
00781 hdrRec = samHeader.getNextHeaderRecord();
00782 assert(hdrRec != NULL);
00783 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00784 assert(hdrRec->getType() == SamHeaderRecord::RG);
00785 assert(strcmp(hdrRec->getTagValue("ID"), "rgID2") == 0);
00786 assert(strcmp(hdrRec->getTagValue("SM"), "sm2") == 0);
00787 hdrRec = samHeader.getNextHeaderRecord();
00788 assert(hdrRec == NULL);
00789 hdrRec = samHeader.getNextHeaderRecord();
00790 assert(hdrRec == NULL);
00791 assert(!samHeader.getNextHeaderLine(hdrline));
00792 assert(hdrline == "");
00793 assert(!samHeader.getNextHeaderLine(hdrline));
00794 assert(hdrline == "");
00795
00796 assert(samHeader.getHeaderString(headerString) == true);
00797 assert(headerString ==
00798 "@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");
00799
00800
00801 assert(samHeader.addComment("My Comment") == true);
00802 assert(samHeader.getHeaderString(headerString) == true);
00803 assert(headerString ==
00804 "@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");
00805
00806
00807 hdrRec = samHeader.getNextHeaderRecord();
00808 assert(hdrRec == NULL);
00809
00810
00811 assert(samHeader.getNextHeaderLine(hdrline));
00812 assert(hdrline == "@CO\tMy Comment\n");
00813 assert(!samHeader.getNextHeaderLine(hdrline));
00814 assert(hdrline == "");
00815 assert(!samHeader.getNextHeaderLine(hdrline));
00816 assert(hdrline == "");
00817
00818
00819 assert(strcmp(samHeader.getNextComment(), "My Comment") == 0);
00820 assert(strcmp(samHeader.getNextComment(), "") == 0);
00821 assert(strcmp(samHeader.getNextComment(), "") == 0);
00822
00823
00824 assert(samHeader.addComment("My Comment2") == true);
00825 assert(samHeader.getHeaderString(headerString) == true);
00826 assert(headerString ==
00827 "@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");
00828
00829 newHeader = samHeader;
00830 assert(newHeader.getHeaderString(headerString) == true);
00831 assert(headerString ==
00832 "@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");
00833
00834
00835 assert(samHeader.getNextHeaderLine(hdrline));
00836 assert(hdrline == "@CO\tMy Comment2\n");
00837 assert(!samHeader.getNextHeaderLine(hdrline));
00838 assert(hdrline == "");
00839 assert(!samHeader.getNextHeaderLine(hdrline));
00840 assert(hdrline == "");
00841
00842
00843 assert(strcmp(samHeader.getNextComment(), "My Comment2") == 0);
00844 assert(strcmp(samHeader.getNextComment(), "") == 0);
00845 assert(strcmp(samHeader.getNextComment(), "") == 0);
00846
00847
00848 samHeader.resetHeaderRecordIter();
00849
00850
00851 assert(strcmp(samHeader.getNextComment(), "") == 0);
00852 assert(strcmp(samHeader.getNextComment(), "") == 0);
00853
00854
00855 samHeader.resetCommentIter();
00856
00857
00858
00859 hdrRec = samHeader.getNextHeaderRecord();
00860 assert(hdrRec != NULL);
00861 assert(strcmp(hdrRec->getTypeString(), "HD") == 0);
00862 assert(hdrRec->getType() == SamHeaderRecord::HD);
00863 assert(strcmp(hdrRec->getTagValue("SO"), "queryname") == 0);
00864 assert(strcmp(hdrRec->getTagValue("VN"), "3.1") == 0);
00865 assert(samHeader.getNextHeaderLine(hdrline));
00866 assert(hdrline == "@PG\tID:newID\n");
00867 assert(samHeader.getNextHeaderLine(hdrline));
00868 assert(hdrline == "@SQ\tSN:newName\tLN:111\tAS:HG18\tSP:species\n");
00869 hdrRec = samHeader.getNextHeaderRecord();
00870 assert(hdrRec != NULL);
00871 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00872 assert(hdrRec->getType() == SamHeaderRecord::RG);
00873 assert(strcmp(hdrRec->getTagValue("ID"), "rgID") == 0);
00874 hdrRec = samHeader.getNextHeaderRecord();
00875 assert(hdrRec != NULL);
00876 assert(strcmp(samHeader.getNextComment(), "My Comment") == 0);
00877 assert(strcmp(hdrRec->getTypeString(), "RG") == 0);
00878 assert(hdrRec->getType() == SamHeaderRecord::RG);
00879 assert(strcmp(hdrRec->getTagValue("ID"), "rgID1") == 0);
00880 assert(strcmp(hdrRec->getTagValue("SM"), "sample1") == 0);
00881 assert(samHeader.getNextHeaderLine(hdrline));
00882 assert(hdrline == "@RG\tID:rgID2\tSM:sm2\n");
00883 hdrRec = samHeader.getNextHeaderRecord();
00884 assert(hdrRec == NULL);
00885 assert(samHeader.getNextHeaderLine(hdrline));
00886 assert(hdrline == "@CO\tMy Comment\n");
00887 hdrRec = samHeader.getNextHeaderRecord();
00888 assert(hdrRec == NULL);
00889 assert(samHeader.getNextHeaderLine(hdrline));
00890 assert(hdrline == "@CO\tMy Comment2\n");
00891 assert(!samHeader.getNextHeaderLine(hdrline));
00892 assert(hdrline == "");
00893 assert(strcmp(samHeader.getNextComment(), "My Comment2") == 0);
00894 assert(!samHeader.getNextHeaderLine(hdrline));
00895 assert(hdrline == "");
00896 hdrRec = samHeader.getNextHeaderRecord();
00897 assert(hdrRec == NULL);
00898 assert(strcmp(samHeader.getNextComment(), "") == 0);
00899 assert(strcmp(samHeader.getNextComment(), "") == 0);
00900
00901 samOut.WriteHeader(samHeader);
00902
00903
00904 samHeader.resetHeader();
00905 assert(samHeader.getHeaderString(headerString) == true);
00906 assert(headerString == "");
00907 assert(!samHeader.getNextHeaderLine(hdrline));
00908 assert(hdrline == "");
00909 assert(strcmp(samHeader.getHDTagValue("SO"), "") == 0);
00910 assert(strcmp(samHeader.getHDTagValue("VN"), "") == 0);
00911
00912
00913 hd = new SamHeaderHD();
00914 assert(hd->addKey("3.1") == false);
00915 assert(strcmp(hd->getTagValue("VN"), "") == 0);
00916 assert(hd->isActiveHeaderRecord() == false);
00917
00918 assert(hd->setTag("VN", "3.1") == true);
00919 assert(hd->isActiveHeaderRecord() == true);
00920 assert(strcmp(hd->getTagValue("VN"), "3.1") == 0);
00921
00922
00923 assert(newHeader.getHeaderString(headerString) == true);
00924 assert(headerString ==
00925 "@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");
00926
00927 assert(strcmp(newHeader.getSQTagValue("LN", "chr20"), "") == 0);
00928 }
00929
00930
00931 void testWriteCopiedHeader(const char* fileName)
00932 {
00933 SamFile samIn;
00934 assert(samIn.OpenForRead(fileName));
00935
00936 SamFile samOut;
00937 assert(samOut.OpenForWrite("results/MyTestOut2.bam"));
00938 SamFile samOut2;
00939 assert(samOut2.OpenForWrite("results/MyTestOut2.sam"));
00940
00941
00942 SamFileHeader samHeader;
00943 assert(samIn.ReadHeader(samHeader));
00944 validateHeader(samHeader);
00945
00946 SamFileHeader newHeader;
00947
00948 std::string hdrLine;
00949 assert(samHeader.getNextHeaderLine(hdrLine));
00950 newHeader.addHeaderLine("@HD\tVN:1.02");
00951 bool hdrStatus = true;
00952 while(hdrStatus)
00953 {
00954 newHeader.addHeaderLine(hdrLine.c_str());
00955 hdrStatus = samHeader.getNextHeaderLine(hdrLine);
00956 }
00957
00958
00959 assert(samOut.WriteHeader(newHeader));
00960 assert(samOut2.WriteHeader(newHeader));
00961
00962 SamRecord samRecord;
00963
00964
00965 while(samIn.ReadRecord(samHeader, samRecord))
00966 {
00967
00968 assert(samOut.WriteRecord(newHeader, samRecord));
00969 assert(samOut2.WriteRecord(newHeader, samRecord));
00970 }
00971
00972 assert(samIn.GetStatus() == SamStatus::NO_MORE_RECS);
00973
00974
00975 samOut.Close();
00976 samOut2.Close();
00977
00978 SamFileReader bamRead("results/MyTestOut2.bam");
00979 SamFileReader samRead("results/MyTestOut2.sam");
00980
00981
00982 assert(samRead.ReadHeader(samHeader));
00983 validateHeaderFields(samHeader);
00984 std::string headerString = "";
00985 assert(samHeader.getHeaderString(headerString) == true);
00986 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");
00987
00988 assert(bamRead.ReadHeader(samHeader));
00989 validateHeaderFields(samHeader);
00990 headerString = "";
00991 assert(samHeader.getHeaderString(headerString) == true);
00992 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");
00993
00994 assert(samHeader.getNextHeaderLine(hdrLine));
00995 std::string expectedString = "@HD\tVN:1.02\n";
00996
00997 assert(expectedString == hdrLine);
00998
00999
01000
01001
01002 }
01003