286TEST_CASE(
"Propagating fitsHeader mutation failures",
"[ioutils::fits::fitsHeader]" )
288 mutationHookGuard guard;
290 failingMutation = fitsHeaderDetail::mutation::appendList;
291 mutationFailure = mutationFailureKind::returnedError;
294 REQUIRE( missing.
keyword().empty() );
295 REQUIRE( lookupHeader.
empty() );
297 for( mutationFailureKind failure : { mutationFailureKind::returnedError,
298 mutationFailureKind::badAllocation,
299 mutationFailureKind::standardException } )
301 for( fitsHeaderDetail::mutation operation :
302 { fitsHeaderDetail::mutation::appendList, fitsHeaderDetail::mutation::appendMap } )
305 failingMutation = operation;
306 mutationFailure = failure;
307 if( failure == mutationFailureKind::returnedError )
313 REQUIRE_THROWS( header.
append(
"CARD", 1 ) );
315 REQUIRE( header.
empty() );
316 REQUIRE( header.
count(
"CARD" ) == 0 );
320 for( mutationFailureKind failure : { mutationFailureKind::returnedError,
321 mutationFailureKind::badAllocation,
322 mutationFailureKind::standardException } )
324 for( fitsHeaderDetail::mutation operation :
325 { fitsHeaderDetail::mutation::insertBeforeList, fitsHeaderDetail::mutation::insertBeforeMap } )
327 fitsHeaderDetail::resetMutationHook();
330 fitsHeaderDetail::mutationHook() = failMutation;
331 failingMutation = operation;
332 mutationFailure = failure;
333 if( failure == mutationFailureKind::returnedError )
341 REQUIRE( keywords( header ) == std::vector<std::string>{
"ANCHOR" } );
342 REQUIRE( header.
count(
"CARD" ) == 0 );
346 for( mutationFailureKind failure : { mutationFailureKind::returnedError,
347 mutationFailureKind::badAllocation,
348 mutationFailureKind::standardException } )
350 for( fitsHeaderDetail::mutation operation :
351 { fitsHeaderDetail::mutation::insertAfterList, fitsHeaderDetail::mutation::insertAfterMap } )
353 fitsHeaderDetail::resetMutationHook();
356 fitsHeaderDetail::mutationHook() = failMutation;
357 failingMutation = operation;
358 mutationFailure = failure;
359 if( failure == mutationFailureKind::returnedError )
367 REQUIRE( keywords( header ) == std::vector<std::string>{
"ANCHOR" } );
368 REQUIRE( header.
count(
"CARD" ) == 0 );
491TEST_CASE(
"Appending HCI Git status provenance",
"[ioutils::fits::fitsHeader][hciReduce]" )
496 std::vector<std::string> cleanHistory;
497 for(
auto &card : cleanHeader )
501 cleanHistory.push_back( card.comment() );
505 REQUIRE( cleanHistory == std::vector<std::string>{
"Git status for mxlib_uncomp:",
" sha1=abc123" } );
510 std::vector<std::string> modifiedHistory;
511 for(
auto &card : modifiedHeader )
515 modifiedHistory.push_back( card.comment() );
519 REQUIRE( modifiedHistory ==
520 std::vector<std::string>{
"Git status for mxlib_uncomp:",
" sha1=abc123, modified" } );
void fitsHeaderGitStatus(fitsHeaderT &head, const std::string &repoName, const char *sha1, int modified)
Write the status of a Git repository to HISTORY in a FITS header.
error_t headersToValues(std::vector< dataT > &v, std::vector< size_t > &bad, std::vector< fitsHeaderT > &heads, const std::string &keyw)
Convert the values in a std::vector of fits headers into a std::vector of values.