LCOV - code coverage report
Current view: top level - gobject/tests - deprecated-properties.c (source / functions) Coverage Total Hit
Test: unnamed Lines: 84.1 % 113 95
Test Date: 2025-06-17 11:50:15 Functions: 90.9 % 11 10
Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : /*
       2                 :             :  * Copyright 2022 Simon McVittie
       3                 :             :  * SPDX-License-Identifier: LGPL-2.1-or-later
       4                 :             :  */
       5                 :             : 
       6                 :             : #include <glib-object.h>
       7                 :             : #include <glib.h>
       8                 :             : 
       9                 :             : typedef struct
      10                 :             : {
      11                 :             :   GObject parent;
      12                 :             :   int normal;
      13                 :             :   int normal_construct;
      14                 :             :   int deprecated;
      15                 :             :   int deprecated_construct;
      16                 :             : } MyObject;
      17                 :             : 
      18                 :             : typedef struct
      19                 :             : {
      20                 :             :   GObjectClass parent;
      21                 :             : } MyObjectClass;
      22                 :             : 
      23                 :             : typedef enum
      24                 :             : {
      25                 :             :   PROP_0,
      26                 :             :   PROP_NORMAL,
      27                 :             :   PROP_NORMAL_CONSTRUCT,
      28                 :             :   PROP_DEPRECATED,
      29                 :             :   PROP_DEPRECATED_CONSTRUCT,
      30                 :             :   N_PROPS
      31                 :             : } Property;
      32                 :             : 
      33                 :             : static GParamSpec *props[N_PROPS] = { NULL };
      34                 :             : 
      35                 :             : static GType my_object_get_type (void);
      36                 :             : 
      37                 :           9 : G_DEFINE_TYPE (MyObject, my_object, G_TYPE_OBJECT);
      38                 :             : 
      39                 :             : static void
      40                 :           3 : my_object_init (MyObject *self)
      41                 :             : {
      42                 :           3 : }
      43                 :             : 
      44                 :             : static void
      45                 :          12 : my_object_set_property (GObject *object,
      46                 :             :                         guint prop_id,
      47                 :             :                         const GValue *value,
      48                 :             :                         GParamSpec *param_spec)
      49                 :             : {
      50                 :          12 :   MyObject *self = (MyObject *) object;
      51                 :             : 
      52                 :          12 :   switch ((Property) prop_id)
      53                 :             :     {
      54                 :           2 :     case PROP_NORMAL:
      55                 :           2 :       self->normal = g_value_get_int (value);
      56                 :           2 :       break;
      57                 :             : 
      58                 :           4 :     case PROP_NORMAL_CONSTRUCT:
      59                 :           4 :       self->normal_construct = g_value_get_int (value);
      60                 :           4 :       break;
      61                 :             : 
      62                 :           2 :     case PROP_DEPRECATED:
      63                 :           2 :       self->deprecated = g_value_get_int (value);
      64                 :           2 :       break;
      65                 :             : 
      66                 :           4 :     case PROP_DEPRECATED_CONSTRUCT:
      67                 :           4 :       self->deprecated_construct = g_value_get_int (value);
      68                 :           4 :       break;
      69                 :             : 
      70                 :           0 :     case PROP_0:
      71                 :             :     case N_PROPS:
      72                 :             :     default:
      73                 :             :       g_assert_not_reached ();
      74                 :             :     }
      75                 :          12 : }
      76                 :             : 
      77                 :             : static void
      78                 :           0 : my_object_get_property (GObject *object,
      79                 :             :                         guint prop_id,
      80                 :             :                         GValue *value,
      81                 :             :                         GParamSpec *param_spec)
      82                 :             : {
      83                 :           0 :   MyObject *self = (MyObject *) object;
      84                 :             : 
      85                 :           0 :   switch ((Property) prop_id)
      86                 :             :     {
      87                 :           0 :     case PROP_NORMAL:
      88                 :           0 :       g_value_set_int (value, self->normal);
      89                 :           0 :       break;
      90                 :             : 
      91                 :           0 :     case PROP_NORMAL_CONSTRUCT:
      92                 :           0 :       g_value_set_int (value, self->normal_construct);
      93                 :           0 :       break;
      94                 :             : 
      95                 :           0 :     case PROP_DEPRECATED:
      96                 :           0 :       g_value_set_int (value, self->deprecated);
      97                 :           0 :       break;
      98                 :             : 
      99                 :           0 :     case PROP_DEPRECATED_CONSTRUCT:
     100                 :           0 :       g_value_set_int (value, self->deprecated_construct);
     101                 :           0 :       break;
     102                 :             : 
     103                 :           0 :     case PROP_0:
     104                 :             :     case N_PROPS:
     105                 :             :     default:
     106                 :             :       g_assert_not_reached ();
     107                 :             :     }
     108                 :           0 : }
     109                 :             : 
     110                 :             : static void
     111                 :           3 : my_object_class_init (MyObjectClass *cls)
     112                 :             : {
     113                 :           3 :   GObjectClass *object_class = G_OBJECT_CLASS (cls);
     114                 :             : 
     115                 :           3 :   props[PROP_NORMAL] = g_param_spec_int ("normal", NULL, NULL,
     116                 :             :                                          G_MININT, G_MAXINT, -1,
     117                 :             :                                          (G_PARAM_READWRITE |
     118                 :             :                                           G_PARAM_STATIC_STRINGS));
     119                 :           3 :   props[PROP_NORMAL_CONSTRUCT] = g_param_spec_int ("normal-construct", NULL, NULL,
     120                 :             :                                                    G_MININT, G_MAXINT, -1,
     121                 :             :                                                    (G_PARAM_READWRITE |
     122                 :             :                                                     G_PARAM_STATIC_STRINGS |
     123                 :             :                                                     G_PARAM_CONSTRUCT));
     124                 :           3 :   props[PROP_DEPRECATED] = g_param_spec_int ("deprecated", NULL, NULL,
     125                 :             :                                              G_MININT, G_MAXINT, -1,
     126                 :             :                                              (G_PARAM_READWRITE |
     127                 :             :                                               G_PARAM_STATIC_STRINGS |
     128                 :             :                                               G_PARAM_DEPRECATED));
     129                 :           3 :   props[PROP_DEPRECATED_CONSTRUCT] = g_param_spec_int ("deprecated-construct", NULL, NULL,
     130                 :             :                                                        G_MININT, G_MAXINT, -1,
     131                 :             :                                                        (G_PARAM_READWRITE |
     132                 :             :                                                         G_PARAM_STATIC_STRINGS |
     133                 :             :                                                         G_PARAM_CONSTRUCT |
     134                 :             :                                                         G_PARAM_DEPRECATED));
     135                 :           3 :   object_class->get_property = my_object_get_property;
     136                 :           3 :   object_class->set_property = my_object_set_property;
     137                 :           3 :   g_object_class_install_properties (object_class, N_PROPS, props);
     138                 :           3 : }
     139                 :             : 
     140                 :             : static void
     141                 :           2 : test_construct (void)
     142                 :             : {
     143                 :           2 :   if (g_test_subprocess ())
     144                 :             :     {
     145                 :             :       MyObject *o;
     146                 :             : 
     147                 :             :       /* Don't crash on deprecation warnings, so we can see all of them */
     148                 :           1 :       g_log_set_always_fatal (G_LOG_FATAL_MASK);
     149                 :           1 :       g_log_set_fatal_mask ("GLib-GObject", G_LOG_FATAL_MASK);
     150                 :             : 
     151                 :           1 :       o = g_object_new (my_object_get_type (),
     152                 :             :                         "normal", 1,
     153                 :             :                         "normal-construct", 2,
     154                 :             :                         "deprecated", 3,
     155                 :             :                         "deprecated-construct", 4,
     156                 :             :                         NULL);
     157                 :           1 :       g_printerr ("Constructed object");
     158                 :           1 :       g_assert_cmpint (o->normal, ==, 1);
     159                 :           1 :       g_assert_cmpint (o->normal_construct, ==, 2);
     160                 :           1 :       g_assert_cmpint (o->deprecated, ==, 3);
     161                 :           1 :       g_assert_cmpint (o->deprecated_construct, ==, 4);
     162                 :           1 :       g_clear_object (&o);
     163                 :           1 :       return;
     164                 :             :     }
     165                 :             : 
     166                 :           1 :   g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
     167                 :           1 :   g_test_trap_assert_stderr ("*The property MyObject:deprecated-construct is deprecated*");
     168                 :           1 :   g_test_trap_assert_stderr ("*The property MyObject:deprecated is deprecated*");
     169                 :           1 :   g_test_trap_assert_stderr_unmatched ("*The property MyObject:normal*");
     170                 :           1 :   g_test_trap_assert_passed ();
     171                 :             : }
     172                 :             : 
     173                 :             : static void
     174                 :           2 : test_def_construct (void)
     175                 :             : {
     176                 :           2 :   if (g_test_subprocess ())
     177                 :             :     {
     178                 :             :       MyObject *o;
     179                 :             : 
     180                 :             :       /* Don't crash on deprecation warnings, so we can see all of them */
     181                 :           1 :       g_log_set_always_fatal (G_LOG_FATAL_MASK);
     182                 :           1 :       g_log_set_fatal_mask ("GLib-GObject", G_LOG_FATAL_MASK);
     183                 :             : 
     184                 :           1 :       o = g_object_new (my_object_get_type (),
     185                 :             :                         NULL);
     186                 :           1 :       g_printerr ("Constructed object");
     187                 :           1 :       g_assert_cmpint (o->normal, ==, 0);
     188                 :           1 :       g_assert_cmpint (o->normal_construct, ==, -1);
     189                 :           1 :       g_assert_cmpint (o->deprecated, ==, 0);
     190                 :           1 :       g_assert_cmpint (o->deprecated_construct, ==, -1);
     191                 :           1 :       g_clear_object (&o);
     192                 :           1 :       return;
     193                 :             :     }
     194                 :             : 
     195                 :           1 :   g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2748");
     196                 :           1 :   g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
     197                 :           1 :   g_test_trap_assert_stderr_unmatched ("*The property MyObject:deprecated*");
     198                 :           1 :   g_test_trap_assert_stderr_unmatched ("*The property MyObject:normal*");
     199                 :           1 :   g_test_trap_assert_passed ();
     200                 :             : }
     201                 :             : 
     202                 :             : static void
     203                 :           2 : test_set (void)
     204                 :             : {
     205                 :           2 :   if (g_test_subprocess ())
     206                 :             :     {
     207                 :             :       MyObject *o;
     208                 :             : 
     209                 :             :       /* Don't crash on deprecation warnings, so we can see all of them */
     210                 :           1 :       g_log_set_always_fatal (G_LOG_FATAL_MASK);
     211                 :           1 :       g_log_set_fatal_mask ("GLib-GObject", G_LOG_FATAL_MASK);
     212                 :             : 
     213                 :           1 :       o = g_object_new (my_object_get_type (),
     214                 :             :                         NULL);
     215                 :           1 :       g_printerr ("Constructed object");
     216                 :           1 :       g_assert_cmpint (o->normal, ==, 0);
     217                 :           1 :       g_assert_cmpint (o->normal_construct, ==, -1);
     218                 :           1 :       g_assert_cmpint (o->deprecated, ==, 0);
     219                 :           1 :       g_assert_cmpint (o->deprecated_construct, ==, -1);
     220                 :             : 
     221                 :           1 :       g_object_set (o,
     222                 :             :                     "normal", 1,
     223                 :             :                     "normal-construct", 2,
     224                 :             :                     "deprecated", 3,
     225                 :             :                     "deprecated-construct", 4,
     226                 :             :                     NULL);
     227                 :           1 :       g_printerr ("Set properties");
     228                 :           1 :       g_assert_cmpint (o->normal, ==, 1);
     229                 :           1 :       g_assert_cmpint (o->normal_construct, ==, 2);
     230                 :           1 :       g_assert_cmpint (o->deprecated, ==, 3);
     231                 :           1 :       g_assert_cmpint (o->deprecated_construct, ==, 4);
     232                 :             : 
     233                 :           1 :       g_clear_object (&o);
     234                 :           1 :       return;
     235                 :             :     }
     236                 :             : 
     237                 :           1 :   g_test_bug ("https://gitlab.gnome.org/GNOME/glib/-/issues/2748");
     238                 :           1 :   g_test_trap_subprocess (NULL, 0, G_TEST_SUBPROCESS_DEFAULT);
     239                 :           1 :   g_test_trap_assert_stderr ("*The property MyObject:deprecated-construct is deprecated*");
     240                 :           1 :   g_test_trap_assert_stderr ("*The property MyObject:deprecated is deprecated*");
     241                 :           1 :   g_test_trap_assert_stderr_unmatched ("*The property MyObject:normal*");
     242                 :           1 :   g_test_trap_assert_passed ();
     243                 :             : }
     244                 :             : 
     245                 :             : int
     246                 :           4 : main (int argc, char *argv[])
     247                 :             : {
     248                 :           4 :   g_test_init (&argc, &argv, NULL);
     249                 :             : 
     250                 :           4 :   g_setenv ("G_ENABLE_DIAGNOSTIC", "1", TRUE);
     251                 :             : 
     252                 :           4 :   g_test_set_nonfatal_assertions ();
     253                 :           4 :   g_test_add_func ("/deprecated-properties/construct", test_construct);
     254                 :           4 :   g_test_add_func ("/deprecated-properties/default-construct", test_def_construct);
     255                 :           4 :   g_test_add_func ("/deprecated-properties/set", test_set);
     256                 :           4 :   return g_test_run ();
     257                 :             : }
        

Generated by: LCOV version 2.0-1