Quinoa all test code coverage report
Current view: top level - Main - UnitTestPrint.hpp (source / functions) Hit Total Coverage
Commit: Quinoa_v0.3-957-gb4f0efae0 Lines: 27 36 75.0 %
Date: 2021-11-11 18:25:50 Functions: 4 4 100.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 37 106 34.9 %

           Branch data     Line data    Source code
       1                 :            : // *****************************************************************************
       2                 :            : /*!
       3                 :            :   \file      src/Main/UnitTestPrint.hpp
       4                 :            :   \copyright 2012-2015 J. Bakosi,
       5                 :            :              2016-2018 Los Alamos National Security, LLC.,
       6                 :            :              2019-2021 Triad National Security, LLC.
       7                 :            :              All rights reserved. See the LICENSE file for details.
       8                 :            :   \brief     UnitTest's printer
       9                 :            :   \details   UnitTest's printer
      10                 :            : */
      11                 :            : // *****************************************************************************
      12                 :            : #ifndef UnitTestPrint_h
      13                 :            : #define UnitTestPrint_h
      14                 :            : 
      15                 :            : #include <sstream>
      16                 :            : 
      17                 :            : #include "Types.hpp"
      18                 :            : #include "Print.hpp"
      19                 :            : #include "Exception.hpp"
      20                 :            : 
      21                 :            : namespace unittest {
      22                 :            : 
      23                 :            : //! UnitTestPrint : tk::Print
      24                 :            : class UnitTestPrint : public tk::Print {
      25                 :            : 
      26                 :            :   public:
      27                 :            :     //! Constructor
      28                 :            :     //! \param[in] screen Screen output filename
      29                 :            :     //! \param[in,out] str Verbose stream
      30                 :            :     //! \param[in] mode Open mode for screen output file, see
      31                 :            :     //!   http://en.cppreference.com/w/cpp/io/ios_base/openmode
      32                 :            :     //! \param[in,out] qstr Quiet stream
      33                 :            :     //! \see tk::Print::Print
      34                 :       3314 :     explicit UnitTestPrint( const std::string& screen = {},
      35                 :            :                             std::ostream& str = std::clog,
      36                 :            :                             std::ios_base::openmode mode = std::ios_base::out,
      37                 :       3314 :                             std::ostream& qstr = std::cout ) :
      38                 :       3314 :       Print( screen, str, mode, qstr ) {}
      39                 :            : 
      40                 :            :     //! Print unit tests header (with legend)
      41                 :            :     //! \param[in] t Section title
      42                 :            :     //! \param[in] group String attempting to match unit test groups
      43                 :          1 :     void unithead( const std::string& t, const std::string& group ) const {
      44 [ +  - ][ +  - ]:          1 :       std::string g = group.empty() ? "all" : group;
         [ -  - ][ +  - ]
                 [ -  - ]
      45                 :          2 :       m_stream << m_section_title_fmt % m_section_indent
      46 [ +  - ][ +  - ]:          1 :                                       % m_section_bullet
      47 [ +  - ][ +  - ]:          1 :                                       % t;
      48                 :          1 :       m_stream << m_section_underline_fmt
      49         [ +  - ]:          1 :                   % m_section_indent
      50         [ +  - ]:          2 :                   % std::string( m_section_indent.size() + 2 + t.size(),
      51 [ +  - ][ +  - ]:          1 :                                 '-' );
      52 [ +  - ][ +  - ]:          3 :       raw( m_item_indent + "Groups: " + g + " (use -g str to match groups)\n" +
         [ +  - ][ +  - ]
      53 [ +  - ][ +  - ]:          3 :            m_item_indent + "Legend: [done/failed] group:test : result\n\n" );
      54                 :          1 :     }
      55                 :            : 
      56                 :            :     //! Print one-liner info for test
      57                 :            :     //! \details Columns:
      58                 :            :     //!   [done/failed]
      59                 :            :     //!   - done: number of tests completed so far
      60                 :            :     //!   - failed: number of failed tests so far
      61                 :            :     //!   name of the test group
      62                 :            :     //!   name of the test
      63                 :            :     //!   result (with additional info if failed)
      64                 :            :     //!   Assumed fields for status:
      65                 :            :     //!   - status[0]: test group name
      66                 :            :     //!   - status[1]: test name
      67                 :            :     //!   - status[2]: result (tut::test_result::result_type as string)
      68                 :            :     //!   - status[3]: exception message for failed test
      69                 :            :     //!   - status[4]: exception type id for failed test
      70                 :       3312 :     void test( std::size_t ncomplete,
      71                 :            :                std::size_t nfail,
      72                 :            :                const std::vector< std::string >& status )
      73                 :            :     {
      74         [ +  + ]:       3312 :       if (status[2] != "8") {             // if not dummy
      75         [ +  - ]:        525 :         std::stringstream ss;
      76 [ +  - ][ +  - ]:        525 :         ss << "[" << ncomplete << "/" << nfail << "] " << status[0] << ":"
         [ +  - ][ +  - ]
      77 [ +  - ][ +  - ]:        525 :            << status[1];
         [ +  - ][ +  - ]
      78                 :        525 :         m_stream <<
      79 [ +  - ][ +  - ]:       1050 :           m_item_widename_value_fmt % m_item_indent % ss.str()
                 [ +  - ]
      80 [ +  - ][ +  - ]:       1575 :                                     % result( status[2], status[3], status[4] )
                 [ +  - ]
      81         [ +  - ]:        525 :           << std::flush;
      82                 :            :       }
      83                 :       3312 :     }
      84                 :            : 
      85                 :            :   private:
      86                 :            :     //! Return human-readable test result based on result code
      87                 :            :     //! \param[in] code Result code
      88                 :            :     //! \param[in] msg Message to append
      89                 :            :     //! \param[in] ex Expection message to attach to exceptions cases
      90                 :        525 :     std::string result( const std::string& code,
      91                 :            :                         const std::string& msg,
      92                 :            :                         const std::string& ex ) const
      93                 :            :     {
      94 [ +  - ][ +  - ]:        525 :       if (code == "0") return "ok";
      95         [ -  - ]:          0 :       else if (code == "1") return "fail: " + msg;
      96 [ -  - ][ -  - ]:          0 :       else if (code == "2") return "except: " + msg + ex;
      97         [ -  - ]:          0 :       else if (code == "3") return "warning: " + msg;
      98         [ -  - ]:          0 :       else if (code == "4") return "terminate: " + msg;
      99 [ -  - ][ -  - ]:          0 :       else if (code == "5") return "ex_ctor: " + msg + ex;
     100 [ -  - ][ -  - ]:          0 :       else if (code == "6") return "rethrown: " + msg + ex;
     101         [ -  - ]:          0 :       else if (code == "7") return "skipped: " + msg;
     102 [ -  - ][ -  - ]:          0 :       else if (code == "8") return "dummy";
     103 [ -  - ][ -  - ]:          0 :       else Throw( "No such unit test result code found" );
                 [ -  - ]
     104                 :            :     }
     105                 :            : };
     106                 :            : 
     107                 :            : } // unittest::
     108                 :            : 
     109                 :            : #endif // UnitTestPrint_h

Generated by: LCOV version 1.14