2
0

check-qlist.c 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. /*
  2. * QList unit-tests.
  3. *
  4. * Copyright (C) 2009 Red Hat Inc.
  5. *
  6. * Authors:
  7. * Luiz Capitulino <lcapitulino@redhat.com>
  8. *
  9. * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
  10. * See the COPYING.LIB file in the top-level directory.
  11. */
  12. #include <check.h>
  13. #include "qint.h"
  14. #include "qlist.h"
  15. /*
  16. * Public Interface test-cases
  17. *
  18. * (with some violations to access 'private' data)
  19. */
  20. START_TEST(qlist_new_test)
  21. {
  22. QList *qlist;
  23. qlist = qlist_new();
  24. fail_unless(qlist != NULL);
  25. fail_unless(qlist->base.refcnt == 1);
  26. fail_unless(qobject_type(QOBJECT(qlist)) == QTYPE_QLIST);
  27. // destroy doesn't exist yet
  28. g_free(qlist);
  29. }
  30. END_TEST
  31. START_TEST(qlist_append_test)
  32. {
  33. QInt *qi;
  34. QList *qlist;
  35. QListEntry *entry;
  36. qi = qint_from_int(42);
  37. qlist = qlist_new();
  38. qlist_append(qlist, qi);
  39. entry = QTAILQ_FIRST(&qlist->head);
  40. fail_unless(entry != NULL);
  41. fail_unless(entry->value == QOBJECT(qi));
  42. // destroy doesn't exist yet
  43. QDECREF(qi);
  44. g_free(entry);
  45. g_free(qlist);
  46. }
  47. END_TEST
  48. START_TEST(qobject_to_qlist_test)
  49. {
  50. QList *qlist;
  51. qlist = qlist_new();
  52. fail_unless(qobject_to_qlist(QOBJECT(qlist)) == qlist);
  53. // destroy doesn't exist yet
  54. g_free(qlist);
  55. }
  56. END_TEST
  57. START_TEST(qlist_destroy_test)
  58. {
  59. int i;
  60. QList *qlist;
  61. qlist = qlist_new();
  62. for (i = 0; i < 42; i++)
  63. qlist_append(qlist, qint_from_int(i));
  64. QDECREF(qlist);
  65. }
  66. END_TEST
  67. static int iter_called;
  68. static const int iter_max = 42;
  69. static void iter_func(QObject *obj, void *opaque)
  70. {
  71. QInt *qi;
  72. fail_unless(opaque == NULL);
  73. qi = qobject_to_qint(obj);
  74. fail_unless(qi != NULL);
  75. fail_unless((qint_get_int(qi) >= 0) && (qint_get_int(qi) <= iter_max));
  76. iter_called++;
  77. }
  78. START_TEST(qlist_iter_test)
  79. {
  80. int i;
  81. QList *qlist;
  82. qlist = qlist_new();
  83. for (i = 0; i < iter_max; i++)
  84. qlist_append(qlist, qint_from_int(i));
  85. iter_called = 0;
  86. qlist_iter(qlist, iter_func, NULL);
  87. fail_unless(iter_called == iter_max);
  88. QDECREF(qlist);
  89. }
  90. END_TEST
  91. static Suite *QList_suite(void)
  92. {
  93. Suite *s;
  94. TCase *qlist_public_tcase;
  95. s = suite_create("QList suite");
  96. qlist_public_tcase = tcase_create("Public Interface");
  97. suite_add_tcase(s, qlist_public_tcase);
  98. tcase_add_test(qlist_public_tcase, qlist_new_test);
  99. tcase_add_test(qlist_public_tcase, qlist_append_test);
  100. tcase_add_test(qlist_public_tcase, qobject_to_qlist_test);
  101. tcase_add_test(qlist_public_tcase, qlist_destroy_test);
  102. tcase_add_test(qlist_public_tcase, qlist_iter_test);
  103. return s;
  104. }
  105. int main(void)
  106. {
  107. int nf;
  108. Suite *s;
  109. SRunner *sr;
  110. s = QList_suite();
  111. sr = srunner_create(s);
  112. srunner_run_all(sr, CK_NORMAL);
  113. nf = srunner_ntests_failed(sr);
  114. srunner_free(sr);
  115. return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
  116. }