xref: /qemu/tests/unit/check-qstring.c (revision 41836a9f7e4da3a265989d79f35c44f659f7b3cf)
15de65a07SLuiz Capitulino /*
25de65a07SLuiz Capitulino  * QString unit-tests.
35de65a07SLuiz Capitulino  *
45de65a07SLuiz Capitulino  * Copyright (C) 2009 Red Hat Inc.
55de65a07SLuiz Capitulino  *
65de65a07SLuiz Capitulino  * Authors:
75de65a07SLuiz Capitulino  *  Luiz Capitulino <lcapitulino@redhat.com>
8*41836a9fSLuiz Capitulino  *
9*41836a9fSLuiz Capitulino  * This work is licensed under the terms of the GNU LGPL, version 2.1 or later.
10*41836a9fSLuiz Capitulino  * See the COPYING.LIB file in the top-level directory.
115de65a07SLuiz Capitulino  */
125de65a07SLuiz Capitulino #include <check.h>
135de65a07SLuiz Capitulino 
145de65a07SLuiz Capitulino #include "qstring.h"
155de65a07SLuiz Capitulino #include "qemu-common.h"
165de65a07SLuiz Capitulino 
175de65a07SLuiz Capitulino /*
185de65a07SLuiz Capitulino  * Public Interface test-cases
195de65a07SLuiz Capitulino  *
205de65a07SLuiz Capitulino  * (with some violations to access 'private' data)
215de65a07SLuiz Capitulino  */
225de65a07SLuiz Capitulino 
235de65a07SLuiz Capitulino START_TEST(qstring_from_str_test)
245de65a07SLuiz Capitulino {
255de65a07SLuiz Capitulino     QString *qstring;
265de65a07SLuiz Capitulino     const char *str = "QEMU";
275de65a07SLuiz Capitulino 
285de65a07SLuiz Capitulino     qstring = qstring_from_str(str);
295de65a07SLuiz Capitulino     fail_unless(qstring != NULL);
305de65a07SLuiz Capitulino     fail_unless(qstring->base.refcnt == 1);
315de65a07SLuiz Capitulino     fail_unless(strcmp(str, qstring->string) == 0);
325de65a07SLuiz Capitulino     fail_unless(qobject_type(QOBJECT(qstring)) == QTYPE_QSTRING);
335de65a07SLuiz Capitulino 
345de65a07SLuiz Capitulino     // destroy doesn't exit yet
355de65a07SLuiz Capitulino     qemu_free(qstring->string);
365de65a07SLuiz Capitulino     qemu_free(qstring);
375de65a07SLuiz Capitulino }
385de65a07SLuiz Capitulino END_TEST
395de65a07SLuiz Capitulino 
405de65a07SLuiz Capitulino START_TEST(qstring_destroy_test)
415de65a07SLuiz Capitulino {
425de65a07SLuiz Capitulino     QString *qstring = qstring_from_str("destroy test");
435de65a07SLuiz Capitulino     QDECREF(qstring);
445de65a07SLuiz Capitulino }
455de65a07SLuiz Capitulino END_TEST
465de65a07SLuiz Capitulino 
475de65a07SLuiz Capitulino START_TEST(qstring_get_str_test)
485de65a07SLuiz Capitulino {
495de65a07SLuiz Capitulino     QString *qstring;
505de65a07SLuiz Capitulino     const char *ret_str;
515de65a07SLuiz Capitulino     const char *str = "QEMU/KVM";
525de65a07SLuiz Capitulino 
535de65a07SLuiz Capitulino     qstring = qstring_from_str(str);
545de65a07SLuiz Capitulino     ret_str = qstring_get_str(qstring);
555de65a07SLuiz Capitulino     fail_unless(strcmp(ret_str, str) == 0);
565de65a07SLuiz Capitulino 
575de65a07SLuiz Capitulino     QDECREF(qstring);
585de65a07SLuiz Capitulino }
595de65a07SLuiz Capitulino END_TEST
605de65a07SLuiz Capitulino 
61f08932c8SLuiz Capitulino START_TEST(qstring_append_chr_test)
62f08932c8SLuiz Capitulino {
63f08932c8SLuiz Capitulino     int i;
64f08932c8SLuiz Capitulino     QString *qstring;
65f08932c8SLuiz Capitulino     const char *str = "qstring append char unit-test";
66f08932c8SLuiz Capitulino 
67f08932c8SLuiz Capitulino     qstring = qstring_new();
68f08932c8SLuiz Capitulino 
69f08932c8SLuiz Capitulino     for (i = 0; str[i]; i++)
70f08932c8SLuiz Capitulino         qstring_append_chr(qstring, str[i]);
71f08932c8SLuiz Capitulino 
72f08932c8SLuiz Capitulino     fail_unless(strcmp(str, qstring_get_str(qstring)) == 0);
73f08932c8SLuiz Capitulino     QDECREF(qstring);
74f08932c8SLuiz Capitulino }
75f08932c8SLuiz Capitulino END_TEST
76f08932c8SLuiz Capitulino 
7764084a03SLuiz Capitulino START_TEST(qstring_from_substr_test)
7864084a03SLuiz Capitulino {
7964084a03SLuiz Capitulino     QString *qs;
8064084a03SLuiz Capitulino 
8164084a03SLuiz Capitulino     qs = qstring_from_substr("virtualization", 3, 9);
8264084a03SLuiz Capitulino     fail_unless(qs != NULL);
8364084a03SLuiz Capitulino     fail_unless(strcmp(qstring_get_str(qs), "tualiza") == 0);
8464084a03SLuiz Capitulino 
8564084a03SLuiz Capitulino     QDECREF(qs);
8664084a03SLuiz Capitulino }
8764084a03SLuiz Capitulino END_TEST
8864084a03SLuiz Capitulino 
8964084a03SLuiz Capitulino 
905de65a07SLuiz Capitulino START_TEST(qobject_to_qstring_test)
915de65a07SLuiz Capitulino {
925de65a07SLuiz Capitulino     QString *qstring;
935de65a07SLuiz Capitulino 
945de65a07SLuiz Capitulino     qstring = qstring_from_str("foo");
955de65a07SLuiz Capitulino     fail_unless(qobject_to_qstring(QOBJECT(qstring)) == qstring);
965de65a07SLuiz Capitulino 
975de65a07SLuiz Capitulino     QDECREF(qstring);
985de65a07SLuiz Capitulino }
995de65a07SLuiz Capitulino END_TEST
1005de65a07SLuiz Capitulino 
1015de65a07SLuiz Capitulino static Suite *qstring_suite(void)
1025de65a07SLuiz Capitulino {
1035de65a07SLuiz Capitulino     Suite *s;
1045de65a07SLuiz Capitulino     TCase *qstring_public_tcase;
1055de65a07SLuiz Capitulino 
1065de65a07SLuiz Capitulino     s = suite_create("QString test-suite");
1075de65a07SLuiz Capitulino 
1085de65a07SLuiz Capitulino     qstring_public_tcase = tcase_create("Public Interface");
1095de65a07SLuiz Capitulino     suite_add_tcase(s, qstring_public_tcase);
1105de65a07SLuiz Capitulino     tcase_add_test(qstring_public_tcase, qstring_from_str_test);
1115de65a07SLuiz Capitulino     tcase_add_test(qstring_public_tcase, qstring_destroy_test);
1125de65a07SLuiz Capitulino     tcase_add_test(qstring_public_tcase, qstring_get_str_test);
113f08932c8SLuiz Capitulino     tcase_add_test(qstring_public_tcase, qstring_append_chr_test);
11464084a03SLuiz Capitulino     tcase_add_test(qstring_public_tcase, qstring_from_substr_test);
1155de65a07SLuiz Capitulino     tcase_add_test(qstring_public_tcase, qobject_to_qstring_test);
1165de65a07SLuiz Capitulino 
1175de65a07SLuiz Capitulino     return s;
1185de65a07SLuiz Capitulino }
1195de65a07SLuiz Capitulino 
1205de65a07SLuiz Capitulino int main(void)
1215de65a07SLuiz Capitulino {
1225de65a07SLuiz Capitulino 	int nf;
1235de65a07SLuiz Capitulino 	Suite *s;
1245de65a07SLuiz Capitulino 	SRunner *sr;
1255de65a07SLuiz Capitulino 
1265de65a07SLuiz Capitulino 	s = qstring_suite();
1275de65a07SLuiz Capitulino 	sr = srunner_create(s);
1285de65a07SLuiz Capitulino 
1295de65a07SLuiz Capitulino 	srunner_run_all(sr, CK_NORMAL);
1305de65a07SLuiz Capitulino 	nf = srunner_ntests_failed(sr);
1315de65a07SLuiz Capitulino 	srunner_free(sr);
1325de65a07SLuiz Capitulino 
1335de65a07SLuiz Capitulino 	return (nf == 0) ? EXIT_SUCCESS : EXIT_FAILURE;
1345de65a07SLuiz Capitulino }
135