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: 2026-02-28 14:20:25 Functions: 100.0 % 8 8
Legend: Lines:     hit not hit

            Line data    Source code
       1              : /* Selftest support for JSON.
       2              :    Copyright (C) 2024-2026 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         5872 : expect_json_object (const location &loc,
      54              :                     const json::value *value)
      55              : {
      56         5872 :   ASSERT_NE_AT (loc, value, nullptr);
      57         5872 :   ASSERT_EQ_AT (loc, value->get_kind (), json::JSON_OBJECT);
      58         5872 :   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         5840 : expect_json_object_with_property (const location &loc,
      68              :                                   const json::value *value,
      69              :                                   const char *property_name)
      70              : {
      71         5840 :   const json::object *obj = expect_json_object (loc, value);
      72         5840 :   const json::value *property_value = obj->get (property_name);
      73         5840 :   ASSERT_NE_AT (loc, property_value, nullptr);
      74         5840 :   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         2184 : assert_json_int_property_eq (const location &loc,
      84              :                              const json::value *value,
      85              :                              const char *property_name,
      86              :                              long expected_value)
      87              : {
      88         2184 :   const json::value *property_value
      89         2184 :     = expect_json_object_with_property (loc, value, property_name);
      90         2184 :   ASSERT_EQ_AT (loc, property_value->get_kind (), json::JSON_INTEGER);
      91         2184 :   long actual_value
      92         2184 :     = static_cast<const json::integer_number *> (property_value)->get ();
      93         2184 :   ASSERT_EQ_AT (loc, expected_value, actual_value);
      94         2184 : }
      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.4-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.