summaryrefslogtreecommitdiffstats
path: root/storage/maria/libmarias3/docs/contributors/test_cases.rst
diff options
context:
space:
mode:
Diffstat (limited to 'storage/maria/libmarias3/docs/contributors/test_cases.rst')
-rw-r--r--storage/maria/libmarias3/docs/contributors/test_cases.rst162
1 files changed, 162 insertions, 0 deletions
diff --git a/storage/maria/libmarias3/docs/contributors/test_cases.rst b/storage/maria/libmarias3/docs/contributors/test_cases.rst
new file mode 100644
index 00000000..f6796f04
--- /dev/null
+++ b/storage/maria/libmarias3/docs/contributors/test_cases.rst
@@ -0,0 +1,162 @@
+Writing Test Cases
+==================
+
+libMariaS3 uses DDM4's YATL library to create unit tests, this provides macros to test if the outcomes are as expected.
+
+Adding a Test Case
+------------------
+
+Test cases are basic C applications in the ``tests/`` directory. To add a test case to the suite. To add a test edit the ``include.am`` and add the following (replacing *mytest* with whatever the test is called):
+
+.. code-block:: makefile
+
+ t_mytest_SOURCES= tests/mytest.c
+ t_mytest_LDADD= src/libmarias3.la
+ check_PROGRAMS+= t/mytest
+ noinst_PROGRAMS+= t/mytest
+
+
+Using YATL
+----------
+
+YATL is needed to make sure conditions within the test program are met. To include it in your test application, add the following:
+
+.. code-block:: c
+
+ #include <yatl/lite.h>
+
+A test skip can be added if certain conditions aren't met:
+
+.. code-block:: c
+
+ SKIP_IF_(!is_connected, "Cannot connected to a database server")
+
+There are many types of assert provided as can be seen in the next section, they can be used as follows:
+
+.. code-block:: c
+
+ ASSERT_EQ_(3, column, "Column count unexpected)
+ ASSERT_FALSE_(false_condition, "False condition is not false")
+ ASSERT_STREQ_("test", some_data, "Unexpected data")
+
+YATL Library
+------------
+
+Parameter Definitions
+^^^^^^^^^^^^^^^^^^^^^
+
+.. c:type:: __expression
+
+ An expression typically used in an ``if`` statement.
+
+.. c:type:: __expected
+
+ An expected variable or expression
+
+.. c:type:: __actual
+
+ The actual variable or expression
+
+.. c:type:: __expected_str
+
+ The expected string
+
+.. c:type:: __actual_str
+
+ The actual string to compare with
+
+.. c:type:: __length
+
+ The length of a string for comparison
+
+Function Definitions
+^^^^^^^^^^^^^^^^^^^^
+
+.. c:macro:: SKIP_IF(__expression)
+
+ Skips the test if the expression is true
+
+.. c:macro:: SKIP_IF_(__expression, ...)
+
+ Skips the test if the expression is true and uses a printf style format message
+
+.. c:macro:: ASSERT_TRUE(__expression)
+
+ Make sure the expression is true, test will fail if it is false
+
+.. c:macro:: ASSERT_FALSE(__expression)
+
+ Make sure the expression is false, test will fail if it is true
+
+.. c:macro:: ASSERT_FALSE_(__expression, ...)
+
+ Make sure the expression is false and use a printf style format message to fail if it is true.
+
+.. c:macro:: ASSERT_NULL_(__expression, ...)
+
+ Make sure the expression is :c:type:`NULL` and use a printf style format message to fail if it isn't.
+
+.. c:macro:: ASSERT_NOT_NULL(__expression)
+
+ Make sure the expression is not :c:type:`NULL`, test will fail if it is :c:type:`NULL`.
+
+.. c:macro:: ASSERT_NOT_NULL_(__expression, ...)
+
+ Make sure the expression is not :c:type:`NULL` and use a printf style format message to fail if it is.
+
+.. c:macro:: ASSERT_TRUE_(__expression, ...)
+
+ Make sure the expression is ``true`` and use a printf style format message to fail if it is not.
+
+.. c:macro:: ASSERT_EQ(__expected, __actual)
+
+ Make sure that one condition or variable matches another one.
+
+ .. note::
+ Not suitable for string matching
+
+.. c:macro:: ASSERT_EQ_(__expected, __actual, ...)
+
+ Make sure that one condition or variable matches another one and use a printf style format message to fail if the do not match.
+
+ .. note::
+ Not suitable for string matching
+
+.. c:macro:: ASSERT_NEQ(__expected, __actual)
+
+ Make sure that one condition or variable does not match another one.
+
+ .. note::
+ Not suitable for string matching
+
+.. c:macro:: ASSERT_NEQ_(__expected, __actual, ...)
+
+ Make sure that one condition or variable does not match another one and use a printf style format message to fail if they do match.
+
+ .. note::
+ Not suitable for string matching
+
+.. c:macro:: ASSERT_STREQ(__expected_str, __actual_str)
+
+ Compare one ``NUL`` terminated string with another one and fail if they do not match.
+
+.. c:macro:: ASSERT_STREQ_(__expected_str, __actual_str, ...)
+
+ Compare one ``NUL`` terminated string with another one and use a printf style format message to fail if they do not match.
+
+.. c:macro:: ASSERT_STREQL_(__expected_str, __actual_str, __length, ...)
+
+ Compare a string of :c:type:`__length` to another one and use a printf style format message to fail if they do not match.
+
+ .. note::
+ This is designed for use with non-NUL-terminated strings.
+
+.. c:macro:: ASSERT_STRNE(__expected_str, __actual_str)
+
+ Compare one ``NUL`` terminated string with another one and fail if they match.
+
+.. c:macro:: ASSERT_STRNE_(__expected_str, __actual_str, ...)
+
+ Compare one ``NUL`` terminated string with another one and use a printf style format message to fail if they match.
+
+