summaryrefslogtreecommitdiffstats
path: root/tests
diff options
context:
space:
mode:
authorGravatar Jeremie Guichard <djebrest@gmail.com>2018-04-09 10:09:34 +0200
committerGravatar Dirk Hohndel <dirk@hohndel.org>2018-04-09 07:59:51 -0700
commit7753352e6210ae69c2a79bdf2387eaca46becc64 (patch)
tree88c2594af6ff7c87b7923c7b3625653f3b5d7cfe /tests
parentf1830cd44e75ac552e09dfd79f6ec9e0d90f8808 (diff)
downloadsubsurface-7753352e6210ae69c2a79bdf2387eaca46becc64.tar.gz
Change taglist_get_tagstring to support 'unlimited' tag list size
Previous taglist_get_tagstring signature/implementation did not allow handling of cases where inputted buffer could not contain all tags. New implementation allocates buffer based on pre-computed size allowing to insert all tags in the returned string. Added get_taglist_string in qthelper to handle conversion to QString Added TestTagList with tests for taglist_get_tagstring Signed-off-by: Jeremie Guichard <djebrest@gmail.com>
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt2
-rw-r--r--tests/testtaglist.cpp82
-rw-r--r--tests/testtaglist.h20
3 files changed, 104 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 2efacd706..a9c65bd09 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -87,6 +87,7 @@ TEST(TestGitStorage testgitstorage.cpp)
TEST(TestPreferences testpreferences.cpp)
TEST(TestPicture testpicture.cpp)
TEST(TestMerge testmerge.cpp)
+TEST(TestTagList testtaglist.cpp)
add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
@@ -102,6 +103,7 @@ add_custom_target(check COMMAND ${CMAKE_CTEST_COMMAND}
TestRenumber
TestPicture
TestMerge
+ TestTagList
)
# useful for debugging CMake issues
diff --git a/tests/testtaglist.cpp b/tests/testtaglist.cpp
new file mode 100644
index 000000000..afe5049f1
--- /dev/null
+++ b/tests/testtaglist.cpp
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: GPL-2.0
+#include "testtaglist.h"
+#include "core/dive.h"
+
+void TestTagList::initTestCase()
+{
+ taglist_init_global();
+}
+
+void TestTagList::cleanupTestCase()
+{
+ taglist_free(g_tag_list);
+ g_tag_list = NULL;
+}
+
+void TestTagList::testGetTagstringNoTags()
+{
+ struct tag_entry *tag_list = NULL;
+ char *tagstring = taglist_get_tagstring(tag_list);
+ QVERIFY(tagstring != NULL);
+ QCOMPARE(*tagstring, '\0');
+}
+
+void TestTagList::testGetTagstringSingleTag()
+{
+ struct tag_entry *tag_list = NULL;
+ taglist_add_tag(&tag_list, "A new tag");
+ char *tagstring = taglist_get_tagstring(tag_list);
+ QVERIFY(tagstring != NULL);
+ QCOMPARE(QString::fromUtf8(tagstring), QString::fromUtf8("A new tag"));
+ free(tagstring);
+}
+
+void TestTagList::testGetTagstringMultipleTags()
+{
+ struct tag_entry *tag_list = NULL;
+ taglist_add_tag(&tag_list, "A new tag");
+ taglist_add_tag(&tag_list, "A new tag 1");
+ taglist_add_tag(&tag_list, "A new tag 2");
+ taglist_add_tag(&tag_list, "A new tag 3");
+ taglist_add_tag(&tag_list, "A new tag 4");
+ taglist_add_tag(&tag_list, "A new tag 5");
+ char *tagstring = taglist_get_tagstring(tag_list);
+ QVERIFY(tagstring != NULL);
+ QCOMPARE(QString::fromUtf8(tagstring),
+ QString::fromUtf8(
+ "A new tag, "
+ "A new tag 1, "
+ "A new tag 2, "
+ "A new tag 3, "
+ "A new tag 4, "
+ "A new tag 5"));
+ free(tagstring);
+}
+
+void TestTagList::testGetTagstringWithAnEmptyTag()
+{
+ struct tag_entry *tag_list = NULL;
+ taglist_add_tag(&tag_list, "A new tag");
+ taglist_add_tag(&tag_list, "A new tag 1");
+ taglist_add_tag(&tag_list, "");
+ char *tagstring = taglist_get_tagstring(tag_list);
+ QVERIFY(tagstring != NULL);
+ QCOMPARE(QString::fromUtf8(tagstring),
+ QString::fromUtf8(
+ "A new tag, "
+ "A new tag 1"));
+ free(tagstring);
+}
+
+void TestTagList::testGetTagstringEmptyTagOnly()
+{
+ struct tag_entry *tag_list = NULL;
+ taglist_add_tag(&tag_list, "");
+ char *tagstring = taglist_get_tagstring(tag_list);
+ QVERIFY(tagstring != NULL);
+ QCOMPARE(QString::fromUtf8(tagstring),
+ QString::fromUtf8(""));
+ free(tagstring);
+}
+
+QTEST_GUILESS_MAIN(TestTagList)
diff --git a/tests/testtaglist.h b/tests/testtaglist.h
new file mode 100644
index 000000000..7e6e94742
--- /dev/null
+++ b/tests/testtaglist.h
@@ -0,0 +1,20 @@
+// SPDX-License-Identifier: GPL-2.0
+#ifndef TESTTAGLIST_H
+#define TESTTAGLIST_H
+
+#include <QtTest>
+
+class TestTagList : public QObject {
+ Q_OBJECT
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+
+ void testGetTagstringNoTags();
+ void testGetTagstringSingleTag();
+ void testGetTagstringMultipleTags();
+ void testGetTagstringWithAnEmptyTag();
+ void testGetTagstringEmptyTagOnly();
+};
+
+#endif