(root)/
glib-2.79.0/
glib/
tests/
strvbuilder.c
       1  /*
       2   * Copyright © 2020 Canonical Ltd.
       3   * Copyright © 2021 Alexandros Theodotou
       4   *
       5   * SPDX-License-Identifier: LicenseRef-old-glib-tests
       6   *
       7   * This work is provided "as is"; redistribution and modification
       8   * in whole or in part, in any medium, physical or electronic is
       9   * permitted without restriction.
      10   *
      11   * This work is distributed in the hope that it will be useful,
      12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
      13   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
      14   *
      15   * In no event shall the authors or contributors be liable for any
      16   * direct, indirect, incidental, special, exemplary, or consequential
      17   * damages (including, but not limited to, procurement of substitute
      18   * goods or services; loss of use, data, or profits; or business
      19   * interruption) however caused and on any theory of liability, whether
      20   * in contract, strict liability, or tort (including negligence or
      21   * otherwise) arising in any way out of the use of this software, even
      22   * if advised of the possibility of such damage.
      23   */
      24  
      25  #include "glib.h"
      26  
      27  static void
      28  test_strvbuilder_empty (void)
      29  {
      30    GStrvBuilder *builder;
      31    GStrv result;
      32  
      33    builder = g_strv_builder_new ();
      34    result = g_strv_builder_end (builder);
      35    g_assert_nonnull (result);
      36    g_assert_cmpint (g_strv_length (result), ==, 0);
      37  
      38    g_strfreev (result);
      39    g_strv_builder_unref (builder);
      40  }
      41  
      42  static void
      43  test_strvbuilder_add (void)
      44  {
      45    GStrvBuilder *builder;
      46    GStrv result;
      47    const gchar *expected[] = { "one", "two", "three", NULL };
      48  
      49    builder = g_strv_builder_new ();
      50    g_strv_builder_add (builder, "one");
      51    g_strv_builder_add (builder, "two");
      52    g_strv_builder_add (builder, "three");
      53    result = g_strv_builder_end (builder);
      54    g_assert_nonnull (result);
      55    g_assert_true (g_strv_equal ((const gchar *const *) result, expected));
      56  
      57    g_strfreev (result);
      58    g_strv_builder_unref (builder);
      59  }
      60  
      61  static void
      62  test_strvbuilder_addv (void)
      63  {
      64    GStrvBuilder *builder;
      65    GStrv result;
      66    const gchar *expected[] = { "one", "two", "three", NULL };
      67  
      68    builder = g_strv_builder_new ();
      69    g_strv_builder_addv (builder, expected);
      70    result = g_strv_builder_end (builder);
      71    g_assert_nonnull (result);
      72    g_assert_cmpstrv ((const gchar *const *) result, expected);
      73  
      74    g_strfreev (result);
      75    g_strv_builder_unref (builder);
      76  }
      77  
      78  static void
      79  test_strvbuilder_add_many (void)
      80  {
      81    GStrvBuilder *builder;
      82    GStrv result;
      83    const gchar *expected[] = { "one", "two", "three", NULL };
      84  
      85    builder = g_strv_builder_new ();
      86    g_strv_builder_add_many (builder, "one", "two", "three", NULL);
      87    result = g_strv_builder_end (builder);
      88    g_assert_nonnull (result);
      89    g_assert_cmpstrv ((const gchar *const *) result, expected);
      90  
      91    g_strfreev (result);
      92    g_strv_builder_unref (builder);
      93  }
      94  
      95  static void
      96  test_strvbuilder_take (void)
      97  {
      98    GStrvBuilder *builder;
      99    GStrv result;
     100    const gchar *expected[] = { "one", "two", "three", NULL };
     101  
     102    builder = g_strv_builder_new ();
     103    g_strv_builder_take (builder, g_strdup ("one"));
     104    g_strv_builder_add (builder, "two");
     105    g_strv_builder_take (builder, g_strdup ("three"));
     106    result = g_strv_builder_end (builder);
     107    g_assert_nonnull (result);
     108    g_assert_true (g_strv_equal ((const gchar *const *) result, expected));
     109  
     110    g_strfreev (result);
     111    g_strv_builder_unref (builder);
     112  }
     113  
     114  static void
     115  test_strvbuilder_ref (void)
     116  {
     117    GStrvBuilder *builder;
     118  
     119    builder = g_strv_builder_new ();
     120    g_strv_builder_ref (builder);
     121    g_strv_builder_unref (builder);
     122    g_strv_builder_unref (builder);
     123  }
     124  
     125  int
     126  main (int argc,
     127        char *argv[])
     128  {
     129    g_test_init (&argc, &argv, NULL);
     130  
     131    g_test_add_func ("/strvbuilder/empty", test_strvbuilder_empty);
     132    g_test_add_func ("/strvbuilder/add", test_strvbuilder_add);
     133    g_test_add_func ("/strvbuilder/addv", test_strvbuilder_addv);
     134    g_test_add_func ("/strvbuilder/add_many", test_strvbuilder_add_many);
     135    g_test_add_func ("/strvbuilder/take", test_strvbuilder_take);
     136    g_test_add_func ("/strvbuilder/ref", test_strvbuilder_ref);
     137  
     138    return g_test_run ();
     139  }