LCOV - code coverage report
Current view: top level - gcc - selftest-json.cc (source / functions) Coverage Total Hit
Test: gcc.info Lines: 100.0 % 42 42
Test Date: 2025-03-15 13:07:15 Functions: 100.0 % 8 8
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /* Selftest support for JSON.
       2                 :             :    Copyright (C) 2024-2025 Free Software Foundation, Inc.
       3                 :             :    Contributed by David Malcolm <dmalcolm@redhat.com>.
       4                 :             : 
       5                 :             : This file is part of GCC.
       6                 :             : 
       7                 :             : GCC is free software; you can redistribute it and/or modify it under
       8                 :             : the terms of the GNU General Public License as published by the Free
       9                 :             : Software Foundation; either version 3, or (at your option) any later
      10                 :             : version.
      11                 :             : 
      12                 :             : GCC is distributed in the hope that it will be useful, but WITHOUT ANY
      13                 :             : WARRANTY; without even the implied warranty of MERCHANTABILITY or
      14                 :             : FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
      15                 :             : for more details.
      16                 :             : 
      17                 :             : You should have received a copy of the GNU General Public License
      18                 :             : along with GCC; see the file COPYING3.  If not see
      19                 :             : <http://www.gnu.org/licenses/>.  */
      20                 :             : 
      21                 :             : #include "config.h"
      22                 :             : #include "system.h"
      23                 :             : #include "coretypes.h"
      24                 :             : #include "diagnostic.h"
      25                 :             : #include "selftest.h"
      26                 :             : #include "selftest-json.h"
      27                 :             : 
      28                 :             : /* The selftest code should entirely disappear in a production
      29                 :             :    configuration, hence we guard all of it with #if CHECKING_P.  */
      30                 :             : 
      31                 :             : #if CHECKING_P
      32                 :             : 
      33                 :             : namespace selftest {
      34                 :             : 
      35                 :             : /* Assert that VALUE is a non-null json::string
      36                 :             :    equalling EXPECTED_VALUE.
      37                 :             :    Use LOC for any failures.  */
      38                 :             : 
      39                 :             : void
      40                 :        1256 : assert_json_string_eq (const location &loc,
      41                 :             :                        const json::value *value,
      42                 :             :                        const char *expected_value)
      43                 :             : {
      44                 :        1256 :   ASSERT_EQ_AT (loc, value->get_kind (), json::JSON_STRING);
      45                 :        1256 :   const json::string *str = static_cast<const json::string *> (value);
      46                 :        1256 :   ASSERT_STREQ_AT (loc, expected_value, str->get_string ());
      47                 :        1256 : }
      48                 :             : 
      49                 :             : /* Assert that VALUE is a non-null json::object,
      50                 :             :    returning it as such, failing at LOC if this isn't the case.  */
      51                 :             : 
      52                 :             : const json::object *
      53                 :        5864 : expect_json_object (const location &loc,
      54                 :             :                     const json::value *value)
      55                 :             : {
      56                 :        5864 :   ASSERT_NE_AT (loc, value, nullptr);
      57                 :        5864 :   ASSERT_EQ_AT (loc, value->get_kind (), json::JSON_OBJECT);
      58                 :        5864 :   return static_cast<const json::object *> (value);
      59                 :             : }
      60                 :             : 
      61                 :             : /* Assert that VALUE is a non-null json::object that has property
      62                 :             :    PROPERTY_NAME.
      63                 :             :    Return the value of the property.
      64                 :             :    Use LOC for any failures.  */
      65                 :             : 
      66                 :             : const json::value *
      67                 :        5832 : expect_json_object_with_property (const location &loc,
      68                 :             :                                   const json::value *value,
      69                 :             :                                   const char *property_name)
      70                 :             : {
      71                 :        5832 :   const json::object *obj = expect_json_object (loc, value);
      72                 :        5832 :   const json::value *property_value = obj->get (property_name);
      73                 :        5832 :   ASSERT_NE_AT (loc, property_value, nullptr);
      74                 :        5832 :   return property_value;
      75                 :             : }
      76                 :             : 
      77                 :             : /* Assert that VALUE is a non-null json::object that has property
      78                 :             :    PROPERTY_NAME, and that the value of that property is a non-null
      79                 :             :    json::integer_number equalling EXPECTED_VALUE.
      80                 :             :    Use LOC for any failures.  */
      81                 :             : 
      82                 :             : void
      83                 :        2176 : assert_json_int_property_eq (const location &loc,
      84                 :             :                              const json::value *value,
      85                 :             :                              const char *property_name,
      86                 :             :                              long expected_value)
      87                 :             : {
      88                 :        2176 :   const json::value *property_value
      89                 :        2176 :     = expect_json_object_with_property (loc, value, property_name);
      90                 :        2176 :   ASSERT_EQ_AT (loc, property_value->get_kind (), json::JSON_INTEGER);
      91                 :        2176 :   long actual_value
      92                 :        2176 :     = static_cast<const json::integer_number *> (property_value)->get ();
      93                 :        2176 :   ASSERT_EQ_AT (loc, expected_value, actual_value);
      94                 :        2176 : }
      95                 :             : 
      96                 :             : /* Assert that VALUE is a non-null json::object that has property
      97                 :             :    PROPERTY_NAME, and that the property value is a non-null JSON object.
      98                 :             :    Return the value of the property as a json::object.
      99                 :             :    Use LOC for any failures.  */
     100                 :             : 
     101                 :             : const json::object *
     102                 :        1752 : expect_json_object_with_object_property (const location &loc,
     103                 :             :                                          const json::value *value,
     104                 :             :                                          const char *property_name)
     105                 :             : {
     106                 :        1752 :   const json::value *property_value
     107                 :        1752 :     = expect_json_object_with_property (loc, value, property_name);
     108                 :        1752 :   ASSERT_EQ_AT (loc, property_value->get_kind (), json::JSON_OBJECT);
     109                 :        1752 :   return static_cast<const json::object *> (property_value);
     110                 :             : }
     111                 :             : 
     112                 :             : /* Assert that VALUE is a non-null json::object that has property
     113                 :             :    PROPERTY_NAME, and that the property value is a non-null JSON array.
     114                 :             :    Return the value of the property as a json::array.
     115                 :             :    Use LOC for any failures.  */
     116                 :             : 
     117                 :             : const json::array *
     118                 :         632 : expect_json_object_with_array_property (const location &loc,
     119                 :             :                                         const json::value *value,
     120                 :             :                                         const char *property_name)
     121                 :             : {
     122                 :         632 :   const json::value *property_value
     123                 :         632 :     = expect_json_object_with_property (loc, value, property_name);
     124                 :         632 :   ASSERT_EQ_AT (loc, property_value->get_kind (), json::JSON_ARRAY);
     125                 :         632 :   return static_cast<const json::array *> (property_value);
     126                 :             : }
     127                 :             : 
     128                 :             : /* Assert that VALUE is a non-null json::object that has property
     129                 :             :    PROPERTY_NAME, and that the property value is a non-null JSON string.
     130                 :             :    Return the value of the property as a json::string.
     131                 :             :    Use LOC for any failures.  */
     132                 :             : 
     133                 :             : const json::string *
     134                 :          24 : expect_json_object_with_string_property (const location &loc,
     135                 :             :                                          const json::value *value,
     136                 :             :                                          const char *property_name)
     137                 :             : {
     138                 :          24 :   const json::value *property_value
     139                 :          24 :     = expect_json_object_with_property (loc, value, property_name);
     140                 :          24 :   ASSERT_EQ_AT (loc, property_value->get_kind (), json::JSON_STRING);
     141                 :          24 :   return static_cast<const json::string *> (property_value);
     142                 :             : }
     143                 :             : 
     144                 :             : /* Assert that VALUE is a non-null json::object that has property
     145                 :             :    PROPERTY_NAME, and that the value of that property is a non-null
     146                 :             :    JSON string equalling EXPECTED_VALUE.
     147                 :             :    Use LOC for any failures.  */
     148                 :             : 
     149                 :             : void
     150                 :        1248 : assert_json_string_property_eq (const location &loc,
     151                 :             :                                 const json::value *value,
     152                 :             :                                 const char *property_name,
     153                 :             :                                 const char *expected_value)
     154                 :             : {
     155                 :        1248 :   const json::value *property_value
     156                 :        1248 :     = expect_json_object_with_property (loc, value, property_name);
     157                 :        1248 :   assert_json_string_eq (loc, property_value, expected_value);
     158                 :        1248 : }
     159                 :             : 
     160                 :             : } // namespace selftest
     161                 :             : 
     162                 :             : #endif /* #if CHECKING_P */
        

Generated by: LCOV version 2.1-beta

LCOV profile is generated on x86_64 machine using following configure options: configure --disable-bootstrap --enable-coverage=opt --enable-languages=c,c++,fortran,go,jit,lto,rust,m2 --enable-host-shared. GCC test suite is run with the built compiler.