LCOV - code coverage report
Current view: top level - gobject/tests - enums.c (source / functions) Coverage Total Hit
Test: unnamed Lines: 100.0 % 124 124
Test Date: 2024-11-26 05:23:01 Functions: 100.0 % 8 8
Branches: - 0 0

             Branch data     Line data    Source code
       1                 :             : #include <glib-object.h>
       2                 :             : 
       3                 :             : static const GEnumValue my_enum_values[] =
       4                 :             : {
       5                 :             :   { 1, "the first value", "one" },
       6                 :             :   { 2, "the second value", "two" },
       7                 :             :   { 3, "the third value", "three" },
       8                 :             :   { 0, NULL, NULL }
       9                 :             : };
      10                 :             : 
      11                 :             : static void
      12                 :           1 : test_enum_basic (void)
      13                 :             : {
      14                 :             :   GType type;
      15                 :             :   GEnumClass *class;
      16                 :             :   GEnumValue *val;
      17                 :           1 :   GValue value = G_VALUE_INIT;
      18                 :             :   gchar *to_string;
      19                 :             : 
      20                 :           1 :   type = g_enum_register_static ("MyEnum", my_enum_values);
      21                 :             : 
      22                 :           1 :   g_value_init (&value, type);
      23                 :           1 :   g_assert_true (G_VALUE_HOLDS_ENUM (&value));
      24                 :             : 
      25                 :           1 :   g_value_set_enum (&value, 2);
      26                 :           1 :   g_assert_cmpint (g_value_get_enum (&value), ==, 2);
      27                 :           1 :   g_value_unset (&value);
      28                 :             : 
      29                 :           1 :   class = g_type_class_ref (type);
      30                 :             : 
      31                 :           1 :   g_assert_cmpint (class->minimum, ==, 1);
      32                 :           1 :   g_assert_cmpint (class->maximum, ==, 3);
      33                 :           1 :   g_assert_cmpint (class->n_values, ==, 3);
      34                 :             : 
      35                 :           1 :   val = g_enum_get_value (class, 2);
      36                 :           1 :   g_assert_nonnull (val);
      37                 :           1 :   g_assert_cmpstr (val->value_name, ==, "the second value");
      38                 :           1 :   val = g_enum_get_value (class, 15);
      39                 :           1 :   g_assert_null (val);
      40                 :             : 
      41                 :           1 :   val = g_enum_get_value_by_name (class, "the third value");
      42                 :           1 :   g_assert_nonnull (val);
      43                 :           1 :   g_assert_cmpint (val->value, ==, 3);
      44                 :           1 :   val = g_enum_get_value_by_name (class, "the color purple");
      45                 :           1 :   g_assert_null (val);
      46                 :             : 
      47                 :           1 :   val = g_enum_get_value_by_nick (class, "one");
      48                 :           1 :   g_assert_nonnull (val);
      49                 :           1 :   g_assert_cmpint (val->value, ==, 1);
      50                 :           1 :   val = g_enum_get_value_by_nick (class, "purple");
      51                 :           1 :   g_assert_null (val);
      52                 :             : 
      53                 :           1 :   to_string = g_enum_to_string (type, 2);
      54                 :           1 :   g_assert_cmpstr (to_string, ==, "the second value");
      55                 :           1 :   g_free (to_string);
      56                 :             : 
      57                 :           1 :   to_string = g_enum_to_string (type, 15);
      58                 :           1 :   g_assert_cmpstr (to_string, ==, "15");
      59                 :           1 :   g_free (to_string);
      60                 :             : 
      61                 :           1 :   g_type_class_unref (class);
      62                 :           1 : }
      63                 :             : 
      64                 :             : static const GFlagsValue my_flag_values[] =
      65                 :             : {
      66                 :             :   { 0, "no flags", "none" },
      67                 :             :   { 1, "the first flag", "one" },
      68                 :             :   { 2, "the second flag", "two" },
      69                 :             :   { 8, "the third flag", "three" },
      70                 :             :   { 0, NULL, NULL }
      71                 :             : };
      72                 :             : 
      73                 :             : static const GFlagsValue no_default_flag_values[] =
      74                 :             : {
      75                 :             :   { 1, "the first flag", "one" },
      76                 :             :   { 0, NULL, NULL }
      77                 :             : };
      78                 :             : 
      79                 :             : static void
      80                 :           1 : test_flags_transform_to_string (const GValue *value)
      81                 :             : {
      82                 :           1 :   GValue tmp = G_VALUE_INIT;
      83                 :             : 
      84                 :           1 :   g_value_init (&tmp, G_TYPE_STRING);
      85                 :           1 :   g_value_transform (value, &tmp);
      86                 :           1 :   g_value_unset (&tmp);
      87                 :           1 : }
      88                 :             : 
      89                 :             : static void
      90                 :           1 : test_flags_basic (void)
      91                 :             : {
      92                 :             :   GType type, no_default_type;
      93                 :             :   GFlagsClass *class;
      94                 :             :   GFlagsValue *val;
      95                 :           1 :   GValue value = G_VALUE_INIT;
      96                 :             :   gchar *to_string;
      97                 :             : 
      98                 :           1 :   type = g_flags_register_static ("MyFlags", my_flag_values);
      99                 :           1 :   no_default_type = g_flags_register_static ("NoDefaultFlags",
     100                 :             :                                              no_default_flag_values);
     101                 :             : 
     102                 :           1 :   g_value_init (&value, type);
     103                 :           1 :   g_assert_true (G_VALUE_HOLDS_FLAGS (&value));
     104                 :             : 
     105                 :           1 :   g_value_set_flags (&value, 2|8);
     106                 :           1 :   g_assert_cmpint (g_value_get_flags (&value), ==, 2|8);
     107                 :             : 
     108                 :           1 :   class = g_type_class_ref (type);
     109                 :             : 
     110                 :           1 :   g_assert_cmpint (class->mask, ==, 1|2|8);
     111                 :           1 :   g_assert_cmpint (class->n_values, ==, 4);
     112                 :             : 
     113                 :           1 :   val = g_flags_get_first_value (class, 2|8);
     114                 :           1 :   g_assert_nonnull (val);
     115                 :           1 :   g_assert_cmpstr (val->value_name, ==, "the second flag");
     116                 :           1 :   val = g_flags_get_first_value (class, 16);
     117                 :           1 :   g_assert_null (val);
     118                 :             : 
     119                 :           1 :   val = g_flags_get_value_by_name (class, "the third flag");
     120                 :           1 :   g_assert_nonnull (val);
     121                 :           1 :   g_assert_cmpint (val->value, ==, 8);
     122                 :           1 :   val = g_flags_get_value_by_name (class, "the color purple");
     123                 :           1 :   g_assert_null (val);
     124                 :             : 
     125                 :           1 :   val = g_flags_get_value_by_nick (class, "one");
     126                 :           1 :   g_assert_nonnull (val);
     127                 :           1 :   g_assert_cmpint (val->value, ==, 1);
     128                 :           1 :   val = g_flags_get_value_by_nick (class, "purple");
     129                 :           1 :   g_assert_null (val);
     130                 :             : 
     131                 :           1 :   test_flags_transform_to_string (&value);
     132                 :           1 :   g_value_unset (&value);
     133                 :             : 
     134                 :           1 :   to_string = g_flags_to_string (type, 1|8);
     135                 :           1 :   g_assert_cmpstr (to_string, ==, "the first flag | the third flag");
     136                 :           1 :   g_free (to_string);
     137                 :             : 
     138                 :           1 :   to_string = g_flags_to_string (type, 0);
     139                 :           1 :   g_assert_cmpstr (to_string, ==, "no flags");
     140                 :           1 :   g_free (to_string);
     141                 :             : 
     142                 :           1 :   to_string = g_flags_to_string (type, 16);
     143                 :           1 :   g_assert_cmpstr (to_string, ==, "0x10");
     144                 :           1 :   g_free (to_string);
     145                 :             : 
     146                 :           1 :   to_string = g_flags_to_string (type, 1|16);
     147                 :           1 :   g_assert_cmpstr (to_string, ==, "the first flag | 0x10");
     148                 :           1 :   g_free (to_string);
     149                 :             : 
     150                 :           1 :   to_string = g_flags_to_string (no_default_type, 0);
     151                 :           1 :   g_assert_cmpstr (to_string, ==, "0x0");
     152                 :           1 :   g_free (to_string);
     153                 :             : 
     154                 :           1 :   to_string = g_flags_to_string (no_default_type, 16);
     155                 :           1 :   g_assert_cmpstr (to_string, ==, "0x10");
     156                 :           1 :   g_free (to_string);
     157                 :             : 
     158                 :           1 :   g_type_class_unref (class);
     159                 :           1 : }
     160                 :             : 
     161                 :             : typedef enum {
     162                 :             :   TEST_ENUM_FIRST_VALUE,
     163                 :             :   TEST_ENUM_SECOND_VALUE,
     164                 :             :   TEST_ENUM_THIRD_VALUE
     165                 :             : } TestEnum;
     166                 :             : 
     167                 :             : GType test_enum_get_type (void);
     168                 :             : 
     169                 :           1 : G_DEFINE_ENUM_TYPE (TestEnum, test_enum,
     170                 :             :   G_DEFINE_ENUM_VALUE (TEST_ENUM_FIRST_VALUE, "first-value"),
     171                 :             :   G_DEFINE_ENUM_VALUE (TEST_ENUM_SECOND_VALUE, "second-value"),
     172                 :             :   G_DEFINE_ENUM_VALUE (TEST_ENUM_THIRD_VALUE, "third-value"))
     173                 :             : 
     174                 :             : static void
     175                 :           1 : test_enum_define_type (void)
     176                 :             : {
     177                 :           1 :   GEnumClass *class = g_type_class_ref (test_enum_get_type ());
     178                 :             :   GEnumValue *val;
     179                 :             : 
     180                 :           1 :   g_assert_cmpint (class->minimum, ==, 0);
     181                 :           1 :   g_assert_cmpint (class->maximum, ==, 2);
     182                 :           1 :   g_assert_cmpint (class->n_values, ==, 3);
     183                 :             : 
     184                 :           1 :   val = g_enum_get_value (class, 2);
     185                 :           1 :   g_assert_nonnull (val);
     186                 :           1 :   g_assert_cmpstr (val->value_nick, ==, "third-value");
     187                 :           1 :   val = g_enum_get_value (class, 15);
     188                 :           1 :   g_assert_null (val);
     189                 :             : 
     190                 :           1 :   g_type_class_unref (class);
     191                 :           1 : }
     192                 :             : 
     193                 :             : typedef enum {
     194                 :             :   TEST_FLAGS_DEFAULT = 0,
     195                 :             :   TEST_FLAGS_FIRST   = 1 << 0,
     196                 :             :   TEST_FLAGS_SECOND  = 1 << 1,
     197                 :             :   TEST_FLAGS_THIRD   = 1 << 2
     198                 :             : } TestFlags;
     199                 :             : 
     200                 :             : GType test_flags_get_type (void);
     201                 :             : 
     202                 :           2 : G_DEFINE_FLAGS_TYPE (TestFlags, test_flags,
     203                 :             :   G_DEFINE_ENUM_VALUE (TEST_FLAGS_DEFAULT, "default"),
     204                 :             :   G_DEFINE_ENUM_VALUE (TEST_FLAGS_FIRST, "first"),
     205                 :             :   G_DEFINE_ENUM_VALUE (TEST_FLAGS_SECOND, "second"),
     206                 :             :   G_DEFINE_ENUM_VALUE (TEST_FLAGS_THIRD, "third"))
     207                 :             : 
     208                 :             : static void
     209                 :           1 : test_flags_define_type (void)
     210                 :             : {
     211                 :           1 :   GFlagsClass *class = g_type_class_ref (test_flags_get_type ());
     212                 :             :   GFlagsValue *val;
     213                 :             :   char *to_string;
     214                 :             : 
     215                 :           1 :   g_assert_cmpint (class->mask, ==, 1 | 2 | 4);
     216                 :           1 :   g_assert_cmpint (class->n_values, ==, 4);
     217                 :             : 
     218                 :           1 :   val = g_flags_get_first_value (class, 2|4);
     219                 :           1 :   g_assert_nonnull (val);
     220                 :           1 :   g_assert_cmpstr (val->value_nick, ==, "second");
     221                 :             : 
     222                 :           1 :   val = g_flags_get_first_value (class, 8);
     223                 :           1 :   g_assert_null (val);
     224                 :             : 
     225                 :           1 :   to_string = g_flags_to_string (test_flags_get_type (), 0);
     226                 :           1 :   g_assert_cmpstr (to_string, ==, "TEST_FLAGS_DEFAULT");
     227                 :           1 :   g_free (to_string);
     228                 :             : 
     229                 :           1 :   g_type_class_unref (class);
     230                 :           1 : }
     231                 :             : 
     232                 :             : int
     233                 :           1 : main (int argc, char *argv[])
     234                 :             : {
     235                 :           1 :   g_test_init (&argc, &argv, NULL);
     236                 :             : 
     237                 :           1 :   g_test_add_func ("/enum/basic", test_enum_basic);
     238                 :           1 :   g_test_add_func ("/enum/define-type", test_enum_define_type);
     239                 :           1 :   g_test_add_func ("/flags/basic", test_flags_basic);
     240                 :           1 :   g_test_add_func ("/flags/define-type", test_flags_define_type);
     241                 :             : 
     242                 :           1 :   return g_test_run ();
     243                 :             : }
        

Generated by: LCOV version 2.0-1