Xyst test code coverage report
Current view: top level - Base - Writer.cpp (source / functions) Coverage Total Hit
Commit: 1fb74642dd9d7732b67f32dec2f2762e238d3fa7 Lines: 50.0 % 22 11
Test Date: 2025-08-13 22:46:33 Functions: 100.0 % 2 2
Legend: Lines:     hit not hit
Branches: + taken - not taken # not executed
Branches: 37.9 % 29 11

             Branch data     Line data    Source code
       1                 :             : // *****************************************************************************
       2                 :             : /*!
       3                 :             :   \file      src/Base/Writer.cpp
       4                 :             :   \copyright 2012-2015 J. Bakosi,
       5                 :             :              2016-2018 Los Alamos National Security, LLC.,
       6                 :             :              2019-2021 Triad National Security, LLC.,
       7                 :             :              2022-2025 J. Bakosi
       8                 :             :              All rights reserved. See the LICENSE file for details.
       9                 :             :   \brief     Writer base class definition
      10                 :             :   \details   Writer base class definition. Writer base serves as a base class
      11                 :             :     for various file writers. It does generic low-level I/O, e.g., opening and
      12                 :             :     closing a file, and associated error handling.
      13                 :             : */
      14                 :             : // *****************************************************************************
      15                 :             : 
      16                 :             : #include <string>
      17                 :             : #include <exception>
      18                 :             : #include <cstdio>
      19                 :             : 
      20                 :             : #include "Writer.hpp"
      21                 :             : #include "Exception.hpp"
      22                 :             : 
      23                 :             : using tk::Writer;
      24                 :             : 
      25                 :        6322 : Writer::Writer( const std::string& filename, std::ios_base::openmode mode ) :
      26         [ +  - ]:        6322 :   m_filename( filename ), m_outFile()
      27                 :             : // *****************************************************************************
      28                 :             : //  Constructor: Acquire file handle
      29                 :             : //! \param[in] filename Name of file to open for writing
      30                 :             : //! \param[in] mode Open mode, see
      31                 :             : //!   http://en.cppreference.com/w/cpp/io/ios_base/openmode
      32                 :             : // *****************************************************************************
      33                 :             : {
      34                 :             :   // Doing this if-test gives the derived class an option to pass an empty
      35                 :             :   // string in case the file does not need to be opened, because e.g., there is
      36                 :             :   // no data that needs to be written, without contaminating client-code with
      37                 :             :   // this if-test.
      38         [ +  + ]:        6322 :   if (!m_filename.empty()) {
      39         [ +  - ]:        6321 :     m_outFile.open( m_filename, mode );
      40 [ +  - ][ -  + ]:        6321 :     ErrChk( m_outFile.good(), "Failed to open file: " + m_filename );
         [ -  - ][ -  - ]
                 [ -  - ]
      41                 :             :   }
      42                 :        6322 : }
      43                 :             : 
      44                 :       12644 : Writer::~Writer() noexcept
      45                 :             : // *****************************************************************************
      46                 :             : //  Destructor: Release file handle
      47                 :             : //! \details Exception safety: no-throw guarantee: never throws exceptions.
      48                 :             : //!   Error handling, while done by throwing and catching exceptions, results in
      49                 :             : //!   warnings to terminal. We use C-style printf, since that will not throw
      50                 :             : //!   exceptions.
      51                 :             : // *****************************************************************************
      52                 :             : {
      53         [ +  + ]:        6322 :   if (!m_filename.empty()) {
      54                 :             :     try {
      55                 :             : 
      56         [ +  - ]:        6321 :       m_outFile.close();
      57                 :             : 
      58 [ +  - ][ -  + ]:        6321 :       if ( m_outFile.fail() )
      59         [ -  - ]:           0 :         printf( ">>> WARNING: Failed to close file: %s\n", m_filename.c_str() );
      60                 :             : 
      61                 :             :     } // emit only a warning on error
      62    [ -  - ][ - ]:           0 :       catch ( Exception& e ) {
      63                 :           0 :         e.handleException();
      64                 :           0 :       }
      65                 :           0 :       catch ( std::exception& e ) {
      66                 :           0 :         printf( ">>> WARNING: std::exception in Writer destructor: %s\n",
      67                 :           0 :                 e.what() );
      68                 :           0 :       }
      69                 :           0 :       catch (...) {
      70                 :           0 :         printf( ">>> WARNING: UNKNOWN EXCEPTION in Writer destructor\n" );
      71                 :           0 :       }
      72                 :             :   }
      73                 :        6322 : }
        

Generated by: LCOV version 2.0-1