From 584a2a22ea40cdc030db5b1d70b23dddcc06a556 Mon Sep 17 00:00:00 2001 From: Thomas Helland Date: Fri, 19 May 2017 22:07:17 +0200 Subject: [PATCH] util: Add tests for the string buffer MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit More tests could probably be added, but this should cover concatenation, resizing, clearing, formatted printing, and checking the length, so it should be quite complete. Signed-off-by: Thomas Helland Reviewed-by: Nicolai Hähnle Tested-by: Dieter Nützel V2: Address review feedback from Timothy, plus fixes - Use a large enough char array - Actually test the formatted appending - Test that clear function resets string length V3: Port to gtest V4: Fix test makefile Fix copyright header Fix missing extern C Use more appropriate name for C-file Add tests for append_char --- configure.ac | 1 + src/util/Makefile.am | 5 +- src/util/tests/string_buffer/Makefile.am | 40 ++++++ .../string_buffer/string_buffer_test.cpp | 119 ++++++++++++++++++ 4 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 src/util/tests/string_buffer/Makefile.am create mode 100644 src/util/tests/string_buffer/string_buffer_test.cpp diff --git a/configure.ac b/configure.ac index 70e5b088626..cfc97d9f061 100644 --- a/configure.ac +++ b/configure.ac @@ -2942,6 +2942,7 @@ AC_CONFIG_FILES([Makefile src/mesa/state_tracker/tests/Makefile src/util/Makefile src/util/tests/hash_table/Makefile + src/util/tests/string_buffer/Makefile src/util/xmlpool/Makefile src/vulkan/Makefile]) diff --git a/src/util/Makefile.am b/src/util/Makefile.am index c37afff7520..b57da3cd948 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -19,7 +19,10 @@ # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. -SUBDIRS = xmlpool . tests/hash_table +SUBDIRS = . \ + xmlpool \ + tests/hash_table \ + tests/string_buffer include Makefile.sources diff --git a/src/util/tests/string_buffer/Makefile.am b/src/util/tests/string_buffer/Makefile.am new file mode 100644 index 00000000000..bd04d86349e --- /dev/null +++ b/src/util/tests/string_buffer/Makefile.am @@ -0,0 +1,40 @@ +# Copyright © 2017 Thomas Helland +# +# Permission is hereby granted, free of charge, to any person obtaining a +# copy of this software and associated documentation files (the "Software"), +# to deal in the Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, distribute, sublicense, +# and/or sell copies of the Software, and to permit persons to whom the +# Software is furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice (including the next +# paragraph) shall be included in all copies or substantial portions of the +# Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL +# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS +# IN THE SOFTWARE. + +AM_CPPFLAGS = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/include \ + -I$(top_srcdir)/src/gtest/include \ + $(PTHREAD_CFLAGS) \ + $(DEFINES) + +TESTS = string_buffer_test + +check_PROGRAMS = $(TESTS) + +string_buffer_test_SOURCES = \ + string_buffer_test.cpp + +string_buffer_test_LDADD = \ + $(top_builddir)/src/gtest/libgtest.la \ + $(top_builddir)/src/util/libmesautil.la \ + $(PTHREAD_LIBS) \ + $(DLOPEN_LIBS) diff --git a/src/util/tests/string_buffer/string_buffer_test.cpp b/src/util/tests/string_buffer/string_buffer_test.cpp new file mode 100644 index 00000000000..c3d43cb67b5 --- /dev/null +++ b/src/util/tests/string_buffer/string_buffer_test.cpp @@ -0,0 +1,119 @@ +/* + * Copyright © 2017 Thomas Helland + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice (including the next + * paragraph) shall be included in all copies or substantial portions of the + * Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS + * IN THE SOFTWARE. + * + */ + +#include +#include +#include +#include +#include +#include "util/string_buffer.h" + +/** + * \file string_buffer_test.cpp + * + * Test the string buffer implementation + */ + +#define INITIAL_BUF_SIZE 6 +class string_buffer : public ::testing::Test { +public: + + struct _mesa_string_buffer *buf; + const char *str1 = "test1"; + const char *str2 = "test2"; + const char *str3 = "test1test2"; + char str4[80]; + char str5[40]; + + virtual void SetUp(); + virtual void TearDown(); +}; + +void +string_buffer::SetUp() +{ + buf = _mesa_string_buffer_create(NULL, INITIAL_BUF_SIZE); +} + +void +string_buffer::TearDown() +{ + /* Finally, clean up after us */ + _mesa_string_buffer_destroy(buf); +} + +static uint32_t +space_left_in_buffer(_mesa_string_buffer *buf) +{ + return buf->capacity - buf->length - 1; +} + +TEST_F(string_buffer, string_buffer_tests) +{ + /* The string terminator needs one byte, so there should one "missing" */ + EXPECT_TRUE(space_left_in_buffer(buf) == INITIAL_BUF_SIZE - 1); + + /* Start by appending str1 */ + EXPECT_TRUE(_mesa_string_buffer_append(buf, str1)); + EXPECT_TRUE(space_left_in_buffer(buf) == + INITIAL_BUF_SIZE - strlen(str1) - 1); + EXPECT_TRUE(strcmp(buf->buf, str1) == 0); + + /* Add more, so that the string is resized */ + EXPECT_TRUE(_mesa_string_buffer_append(buf, str2)); + + /* The string should now be equal to str3 */ + EXPECT_TRUE(strcmp(buf->buf, str3) == 0); + + /* Check that the length of the string is reset when clearing */ + _mesa_string_buffer_clear(buf); + EXPECT_TRUE(buf->length == 0); + EXPECT_TRUE(strlen(buf->buf) == 0); + + /* Test a string with some formatting */ + sprintf(str4, "Testing formatting %d, %f", 100, 1.0); + EXPECT_TRUE(_mesa_string_buffer_printf(buf, "Testing formatting %d, %f", 100, 1.0)); + EXPECT_TRUE(strcmp(buf->buf, str4) == 0); + + /* Compile a string with some other formatting */ + sprintf(str5, "Testing formatting %d, %x", 100, 0xDEADBEAF); + + /* Concatenate str5 to str4 */ + strcat(str4, str5); + + /* Now use the formatted append function again */ + EXPECT_TRUE(_mesa_string_buffer_printf(buf, "Testing formatting %d, %x", 100, 0xDEADBEAF)); + + /* The string buffer should now be equal to str4 */ + EXPECT_TRUE(strcmp(buf->buf, str4) == 0); + + _mesa_string_buffer_clear(buf); + + /* Test appending by one char at a time */ + EXPECT_TRUE(_mesa_string_buffer_append_char(buf, 'a')); + EXPECT_TRUE(buf->length == 1); + EXPECT_TRUE(strcmp(buf->buf, "a") == 0); + EXPECT_TRUE(_mesa_string_buffer_append_char(buf, 'a')); + EXPECT_TRUE(strcmp(buf->buf, "aa") == 0); +} -- 2.30.2