From ead560413ff7ad7b4853921faed2284fd89049c7 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonathan=20Sch=C3=B6bel?= <jonathan@xn--schbel-yxa.info>
Date: Sat, 3 Jun 2023 16:01:27 +0200
Subject: [PATCH] NodeFragment: added tests for insert Attr methods.

Hand in still missing tests.
---
 sefht.geany                |    2 +-
 tests/test_node_fragment.c | 1162 ++++++++++++++++++++++++++++++++++++
 2 files changed, 1163 insertions(+), 1 deletion(-)

diff --git a/sefht.geany b/sefht.geany
index 0714a82..6518873 100644
--- a/sefht.geany
+++ b/sefht.geany
@@ -60,7 +60,7 @@ FILE_NAME_27=1078;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp
 FILE_NAME_28=1044;Make;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2FMakefile.am;0;8
 FILE_NAME_29=1085;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_cms.c;0;8
 FILE_NAME_30=3283;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_data.c;0;8
-FILE_NAME_31=12038;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_node_fragment.c;0;8
+FILE_NAME_31=89037;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_node_fragment.c;0;8
 FILE_NAME_32=15195;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_attr.c;0;8
 FILE_NAME_33=11068;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text.c;0;8
 FILE_NAME_34=5744;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
diff --git a/tests/test_node_fragment.c b/tests/test_node_fragment.c
index 88f9ff0..4f4ab5f 100644
--- a/tests/test_node_fragment.c
+++ b/tests/test_node_fragment.c
@@ -519,6 +519,1156 @@ START_TEST(test_node_fragment_attr_get_with_status)
 }
 END_TEST
 
+START_TEST(test_node_fragment_attr_insert_no_status)
+{
+	char * name;
+	char * value;
+	SH_Attr * attr;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	struct SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test insert - success */
+	attr = SH_Attr_copy (attr1, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = insert_attr (fragment, attr, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (1, fragment->attr_n);
+	ck_assert_int_le (1, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[0].value);
+
+	/* test insert before - success */
+	attr = SH_Attr_copy (attr2, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = insert_attr (fragment, attr, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (2, fragment->attr_n);
+	ck_assert_int_le (2, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	/* test insert after - success */
+	attr = SH_Attr_copy (attr3, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = insert_attr (fragment, attr, 2, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert_int_le (3, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (value, fragment->attrs[2].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	ck_assert_str_eq (attr3->name, fragment->attrs[2].name);
+	ck_assert_str_eq (attr3->value, fragment->attrs[2].value);
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_with_status)
+{
+	struct SH_Status status;
+	char * name;
+	char * value;
+	SH_Attr * attr;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	struct SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test insert - success */
+	attr = SH_Attr_copy (attr1, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = insert_attr (fragment, attr, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (1, fragment->attr_n);
+	ck_assert_int_le (1, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[0].value);
+
+	/* test insert before - success */
+	attr = SH_Attr_copy (attr2, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = insert_attr (fragment, attr, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (2, fragment->attr_n);
+	ck_assert_int_le (2, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	/* test insert after - success */
+	attr = SH_Attr_copy (attr3, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = insert_attr (fragment, attr, 2, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert_int_le (3, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (value, fragment->attrs[2].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	ck_assert_str_eq (attr3->name, fragment->attrs[2].name);
+	ck_assert_str_eq (attr3->value, fragment->attrs[2].value);
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_new_no_status)
+{
+	char * name;
+	char * value;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	struct SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test insert - success */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	result = insert_attr_new (fragment, name, value, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (1, fragment->attr_n);
+	ck_assert_int_le (1, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (attr1->name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (attr1->value, fragment->attrs[0].value);
+
+	/* test insert before - success */
+	name = Attr_get_name (attr2);
+	value = Attr_get_value (attr2);
+
+	result = insert_attr_new (fragment, name, value, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (2, fragment->attr_n);
+	ck_assert_int_le (2, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_ptr_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_ptr_eq (attr1->value, fragment->attrs[1].value);
+
+	/* test insert after - success */
+	name = Attr_get_name (attr3);
+	value = Attr_get_value (attr3);
+
+	result = insert_attr_new (fragment, name, value, 2, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert_int_le (3, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_ptr_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_ptr_eq (attr1->value, fragment->attrs[1].value);
+
+	ck_assert_ptr_eq (attr3->name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (attr3->value, fragment->attrs[2].value);
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	free (attr1);
+	free (attr2);
+	free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_new_with_status)
+{
+	struct SH_Status status;
+	char * name;
+	char * value;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	struct SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test insert - success */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	_status_preinit (status);
+	result = insert_attr_new (fragment, name, value, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (1, fragment->attr_n);
+	ck_assert_int_le (1, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (attr1->name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (attr1->value, fragment->attrs[0].value);
+
+	/* test insert before - success */
+	name = Attr_get_name (attr2);
+	value = Attr_get_value (attr2);
+
+	_status_preinit (status);
+	result = insert_attr_new (fragment, name, value, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (2, fragment->attr_n);
+	ck_assert_int_le (2, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_ptr_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_ptr_eq (attr1->value, fragment->attrs[1].value);
+
+	/* test insert after - success */
+	name = Attr_get_name (attr3);
+	value = Attr_get_value (attr3);
+
+	_status_preinit (status);
+	result = insert_attr_new (fragment, name, value, 2, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert_int_le (3, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_ptr_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_ptr_eq (attr1->value, fragment->attrs[1].value);
+
+	ck_assert_ptr_eq (attr3->name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (attr3->value, fragment->attrs[2].value);
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	free (attr1);
+	free (attr2);
+	free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_copy_no_status)
+{
+	char * name;
+	char * value;
+	SH_Attr * attr;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	struct SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test insert - success */
+	attr = SH_Attr_copy (attr1, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = insert_attr_copy (fragment, attr, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (1, fragment->attr_n);
+	ck_assert_int_le (1, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[0].value);
+
+	/* test insert before - success */
+	attr = SH_Attr_copy (attr2, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = insert_attr_copy (fragment, attr, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (2, fragment->attr_n);
+	ck_assert_int_le (2, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	/* test insert after - success */
+	attr = SH_Attr_copy (attr3, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = insert_attr_copy (fragment, attr, 2, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert_int_le (3, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_ne (name, fragment->attrs[2].name);
+	ck_assert_ptr_ne (value, fragment->attrs[2].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	ck_assert_str_eq (attr3->name, fragment->attrs[2].name);
+	ck_assert_str_eq (attr3->value, fragment->attrs[2].value);
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_copy_with_status)
+{
+	struct SH_Status status;
+	char * name;
+	char * value;
+	SH_Attr * attr;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	struct SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test insert - success */
+	attr = SH_Attr_copy (attr1, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = insert_attr_copy (fragment, attr, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (1, fragment->attr_n);
+	ck_assert_int_le (1, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[0].value);
+
+	/* test insert before - success */
+	attr = SH_Attr_copy (attr2, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = insert_attr_copy (fragment, attr, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (2, fragment->attr_n);
+	ck_assert_int_le (2, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	/* test insert after - success */
+	attr = SH_Attr_copy (attr3, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = insert_attr_copy (fragment, attr, 2, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert_int_le (3, fragment->attr_s);
+	ck_assert_int_eq (ATTR_CHUNK, fragment->attr_s);
+
+	ck_assert_ptr_ne (name, fragment->attrs[2].name);
+	ck_assert_ptr_ne (value, fragment->attrs[2].value);
+
+	ck_assert_str_eq (attr2->name, fragment->attrs[0].name);
+	ck_assert_str_eq (attr2->value, fragment->attrs[0].value);
+
+	ck_assert_str_eq (attr1->name, fragment->attrs[1].name);
+	ck_assert_str_eq (attr1->value, fragment->attrs[1].value);
+
+	ck_assert_str_eq (attr3->name, fragment->attrs[2].name);
+	ck_assert_str_eq (attr3->value, fragment->attrs[2].value);
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_insert_no_status)
+{
+	char * name;
+	char * value;
+	SH_Attr * attr;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test - out of bounds */
+	result = SH_NodeFragment_insert_attr (fragment, attr1, 1, NULL);
+	ck_assert_int_eq (FALSE, result);
+
+	/* test */
+	attr = SH_Attr_copy (attr2, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = SH_NodeFragment_insert_attr (fragment, attr, 0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert before */
+	attr = SH_Attr_copy (attr1, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = SH_NodeFragment_prepend_attr (fragment, attr, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert after */
+	attr = SH_Attr_copy (attr3, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	result = SH_NodeFragment_append_attr (fragment, attr, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_eq (name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (value, fragment->attrs[2].value);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert (Attr_is_equal (attr1, &fragment->attrs[0]));
+	ck_assert (Attr_is_equal (attr2, &fragment->attrs[1]));
+	ck_assert (Attr_is_equal (attr3, &fragment->attrs[2]));
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_insert_with_status)
+{
+	struct SH_Status status;
+	char * name;
+	char * value;
+	SH_Attr * attr;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test - out of bounds */
+	_status_preinit (status);
+	result = SH_NodeFragment_insert_attr (fragment, attr1, 1, &status);
+	ck_assert_int_eq (FALSE, result);
+	ck_assert_int_eq (E_VALUE, status.status);
+
+	/* test */
+	attr = SH_Attr_copy (attr2, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_insert_attr (fragment, attr, 0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert before */
+	attr = SH_Attr_copy (attr1, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_prepend_attr (fragment, attr, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert after */
+	attr = SH_Attr_copy (attr3, NULL);
+	ck_assert_ptr_ne (NULL, attr);
+
+	name = Attr_get_name (attr);
+	value = Attr_get_value (attr);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_append_attr (fragment, attr, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_eq (name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (value, fragment->attrs[2].value);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert (Attr_is_equal (attr1, &fragment->attrs[0]));
+	ck_assert (Attr_is_equal (attr2, &fragment->attrs[1]));
+	ck_assert (Attr_is_equal (attr3, &fragment->attrs[2]));
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_insert_new_no_status)
+{
+	char * name;
+	char * value;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test - out of bounds */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	result = SH_NodeFragment_insert_attr_new (fragment, name, value,
+	                                          1, NULL);
+	ck_assert_int_eq (FALSE, result);
+
+	/* test */
+	name = Attr_get_name (attr2);
+	value = Attr_get_value (attr2);
+
+	result = SH_NodeFragment_insert_attr_new (fragment, name, value,
+	                                          0, NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert before */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	result = SH_NodeFragment_prepend_attr_new (fragment, name, value,
+	                                           NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert after */
+	name = Attr_get_name (attr3);
+	value = Attr_get_value (attr3);
+
+	result = SH_NodeFragment_append_attr_new (fragment, name, value,
+	                                          NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_eq (name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (value, fragment->attrs[2].value);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert (Attr_is_equal (attr1, &fragment->attrs[0]));
+	ck_assert (Attr_is_equal (attr2, &fragment->attrs[1]));
+	ck_assert (Attr_is_equal (attr3, &fragment->attrs[2]));
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	free (attr1);
+	free (attr2);
+	free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_insert_new_with_status)
+{
+	struct SH_Status status;
+	char * name;
+	char * value;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test - out of bounds */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_insert_attr_new (fragment, name, value,
+	                                          1, &status);
+	ck_assert_int_eq (FALSE, result);
+	ck_assert_int_eq (E_VALUE, status.status);
+
+	/* test */
+	name = Attr_get_name (attr2);
+	value = Attr_get_value (attr2);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_insert_attr_new (fragment, name, value,
+	                                          0, &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert before */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_prepend_attr_new (fragment, name, value,
+	                                           &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_eq (name, fragment->attrs[0].name);
+	ck_assert_ptr_eq (value, fragment->attrs[0].value);
+
+	/* test - insert after */
+	name = Attr_get_name (attr3);
+	value = Attr_get_value (attr3);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_append_attr_new (fragment, name, value,
+	                                          &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_eq (name, fragment->attrs[2].name);
+	ck_assert_ptr_eq (value, fragment->attrs[2].value);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert (Attr_is_equal (attr1, &fragment->attrs[0]));
+	ck_assert (Attr_is_equal (attr2, &fragment->attrs[1]));
+	ck_assert (Attr_is_equal (attr3, &fragment->attrs[2]));
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	free (attr1);
+	free (attr2);
+	free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_insert_copy_no_status)
+{
+	char * name;
+	char * value;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test - out of bounds */
+	result = SH_NodeFragment_insert_attr_copy (fragment, attr1, 1,
+	                                           NULL);
+	ck_assert_int_eq (FALSE, result);
+
+	/* test */
+	name = Attr_get_name (attr2);
+	value = Attr_get_value (attr2);
+
+	result = SH_NodeFragment_insert_attr_copy (fragment, attr2, 0,
+	                                           NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	/* test - insert before */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	result = SH_NodeFragment_prepend_attr_copy (fragment, attr1,
+	                                           NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	/* test - insert after */
+	name = Attr_get_name (attr3);
+	value = Attr_get_value (attr3);
+
+	result = SH_NodeFragment_append_attr_copy (fragment, attr3,
+	                                           NULL);
+	ck_assert_int_eq (TRUE, result);
+
+	ck_assert_ptr_ne (name, fragment->attrs[2].name);
+	ck_assert_ptr_ne (value, fragment->attrs[2].value);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert (Attr_is_equal (attr1, &fragment->attrs[0]));
+	ck_assert (Attr_is_equal (attr2, &fragment->attrs[1]));
+	ck_assert (Attr_is_equal (attr3, &fragment->attrs[2]));
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
+START_TEST(test_node_fragment_attr_insert_insert_copy_with_status)
+{
+	struct SH_Status status;
+	char * name;
+	char * value;
+	SH_Attr * attr1;
+	SH_Attr * attr2;
+	SH_Attr * attr3;
+	SH_Data * data;
+	SH_NodeFragment * fragment;
+	bool result;
+
+	/* setup */
+	attr1 = SH_Attr_new ("name1", "value1", NULL);
+	ck_assert_ptr_ne (NULL, attr1);
+
+	attr2 = SH_Attr_new ("name2", "value2", NULL);
+	ck_assert_ptr_ne (NULL, attr2);
+
+	attr3 = SH_Attr_new ("name3", "value3", NULL);
+	ck_assert_ptr_ne (NULL, attr3);
+
+	data = SH_Data_new (NULL);
+	ck_assert_ptr_ne (NULL, data);
+
+	fragment = (SH_NodeFragment *)SH_NodeFragment_new ("html", data,
+	                                                   NULL);
+	ck_assert_ptr_ne (NULL, fragment);
+
+	/* test - out of bounds */
+	_status_preinit (status);
+	result = SH_NodeFragment_insert_attr_copy (fragment, attr1, 1,
+	                                           &status);
+	ck_assert_int_eq (FALSE, result);
+	ck_assert_int_eq (E_VALUE, status.status);
+
+	/* test */
+	name = Attr_get_name (attr2);
+	value = Attr_get_value (attr2);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_insert_attr_copy (fragment, attr2, 0,
+	                                           &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	/* test - insert before */
+	name = Attr_get_name (attr1);
+	value = Attr_get_value (attr1);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_prepend_attr_copy (fragment, attr1,
+	                                           &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_ne (name, fragment->attrs[0].name);
+	ck_assert_ptr_ne (value, fragment->attrs[0].value);
+
+	/* test - insert after */
+	name = Attr_get_name (attr3);
+	value = Attr_get_value (attr3);
+
+	_status_preinit (status);
+	result = SH_NodeFragment_append_attr_copy (fragment, attr3,
+	                                           &status);
+	ck_assert_int_eq (TRUE, result);
+	ck_assert_int_eq (SUCCESS, status.status);
+
+	ck_assert_ptr_ne (name, fragment->attrs[2].name);
+	ck_assert_ptr_ne (value, fragment->attrs[2].value);
+
+	ck_assert_int_eq (3, fragment->attr_n);
+	ck_assert (Attr_is_equal (attr1, &fragment->attrs[0]));
+	ck_assert (Attr_is_equal (attr2, &fragment->attrs[1]));
+	ck_assert (Attr_is_equal (attr3, &fragment->attrs[2]));
+
+	/* cleanup */
+	SH_NodeFragment_free (fragment);
+	SH_Data_free (data);
+	SH_Attr_free (attr1);
+	SH_Attr_free (attr2);
+	SH_Attr_free (attr3);
+}
+END_TEST
+
 START_TEST(test_node_fragment_child_alloc)
 {
 	#define alloc_size get_child_alloc_size
@@ -1913,6 +3063,18 @@ Suite * fragment_suite (void)
 	tcase_add_test (tc_core, test_node_fragment_attr_alloc);
 	tcase_add_test (tc_core, test_node_fragment_attr_get_no_status);
 	tcase_add_test (tc_core, test_node_fragment_attr_get_with_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_no_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_with_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_new_no_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_new_with_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_copy_no_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_copy_with_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_insert_no_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_insert_with_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_insert_new_no_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_insert_new_with_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_insert_copy_no_status);
+	tcase_add_test (tc_core, test_node_fragment_attr_insert_insert_copy_with_status);
 	tcase_add_test (tc_core, test_node_fragment_child_alloc);
 	tcase_add_test (tc_core, test_node_fragment_child);
 	tcase_add_test (tc_core, test_node_fragment_get_child);
-- 
GitLab