Skip to content
Snippets Groups Projects
Commit 787e7288 authored by Jonathan Schöbel's avatar Jonathan Schöbel
Browse files

Fragment: reading child methods

The methods
- SH_Fragment_get_child (by index)
- SH_Fragment_is_child (non recursive) and
- SH_Fragment_is_descendant (recursive)
were added.
parent c57027bc
Branches
Tags
No related merge requests found
......@@ -36,8 +36,8 @@ FILE_NAME_3=1067;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fpr
FILE_NAME_4=1148;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Fcms.h;0;8
FILE_NAME_5=4173;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Fdata.c;0;8
FILE_NAME_6=1099;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Fdata.h;0;8
FILE_NAME_7=3189;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Ffragment.c;0;8
FILE_NAME_8=1562;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Ffragment.h;0;8
FILE_NAME_7=2660;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Ffragment.c;0;8
FILE_NAME_8=1574;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Ffragment.h;0;8
FILE_NAME_9=3600;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Ftext.c;0;8
FILE_NAME_10=1397;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Ftext.h;0;8
FILE_NAME_11=3094;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Fvalidator.c;0;8
......@@ -49,7 +49,7 @@ FILE_NAME_16=847;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fpr
FILE_NAME_17=1043;Make;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2FMakefile.am;0;8
FILE_NAME_18=1113;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_cms.c;0;8
FILE_NAME_19=3059;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_data.c;0;8
FILE_NAME_20=3838;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_fragment.c;0;8
FILE_NAME_20=4888;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_fragment.c;0;8
FILE_NAME_21=5331;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text.c;0;8
FILE_NAME_22=6057;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
FILE_NAME_23=55;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
......
......@@ -147,6 +147,64 @@ SH_Fragment_get_tag (struct SH_Fragment * fragment,
return tag;
}
struct SH_Fragment *
SH_Fragment_get_child (struct SH_Fragment * fragment, size_t index,
struct SH_Error * error)
{
if (index >= fragment->child_n)
{
ERROR1 ("Fragment: Child index out of range.\n");
if (error != NULL)
{
error->type = VALUE_ERROR;
}
return NULL;
}
if (error != NULL)
{
error->type = SUCCESS;
}
return fragment->childs[index];
}
bool
SH_Fragment_is_child (struct SH_Fragment * fragment,
struct SH_Fragment * child)
{
size_t index;
for (index = 0; index < fragment->child_n; index++)
{
if (fragment->childs[index] == child)
{
return TRUE;
}
}
return FALSE;
}
bool
SH_Fragment_is_descendant (struct SH_Fragment * fragment,
struct SH_Fragment * child)
{
size_t index;
for (index = 0; index < fragment->child_n; index++)
{
if (fragment->childs[index] == child
|| SH_Fragment_is_descendant (fragment->childs[index],
child))
{
return TRUE;
}
}
return FALSE;
}
bool
SH_Fragment_append_child (struct SH_Fragment * fragment,
struct SH_Fragment * child,
......
......@@ -53,6 +53,16 @@ void SH_Fragment_free (struct SH_Fragment * fragment,
char * SH_Fragment_get_tag (struct SH_Fragment * fragment,
struct SH_Error * error);
struct SH_Fragment * SH_Fragment_get_child (struct SH_Fragment * fragment,
size_t index,
struct SH_Error * error);
bool SH_Fragment_is_child (struct SH_Fragment * fragment,
struct SH_Fragment * child);
bool SH_Fragment_is_descendant (struct SH_Fragment * fragment,
struct SH_Fragment * child);
bool SH_Fragment_append_child (struct SH_Fragment * fragment,
struct SH_Fragment * child,
struct SH_Error * error);
......
......@@ -151,6 +151,121 @@ START_TEST(test_fragment_child)
}
END_TEST
START_TEST(test_fragment_get_child)
{
struct SH_Error error;
struct SH_Fragment * parent;
struct SH_Fragment * child1;
struct SH_Fragment * child2;
struct SH_Data * data;
data = SH_Data_new (NULL);
parent = SH_Fragment_new ("html", data, NULL);
child1 = SH_Fragment_new ("body", data, NULL);
SH_Fragment_append_child (parent, child1, NULL);
/* without error */
child2 = SH_Fragment_get_child (parent, 0, NULL);
ck_assert_ptr_eq (child1, child2);
child2 = SH_Fragment_get_child (parent, 1, NULL);
ck_assert_ptr_eq (NULL, child2);
/* with error */
error.type = UNDEFINED;
child2 = SH_Fragment_get_child (parent, 0, &error);
ck_assert_ptr_eq (child1, child2);
ck_assert_int_eq (error.type, SUCCESS);
error.type = UNDEFINED;
child2 = SH_Fragment_get_child (parent, 1, &error);
ck_assert_ptr_eq (NULL, child2);
ck_assert_int_eq (error.type, VALUE_ERROR);
SH_Fragment_free (parent, NULL);
SH_Data_free (data, NULL);
}
END_TEST
START_TEST(test_fragment_is_child)
{
struct SH_Fragment * parent;
struct SH_Fragment * child1;
struct SH_Fragment * child2;
struct SH_Data * data;
bool boolean;
data = SH_Data_new (NULL);
parent = SH_Fragment_new ("html", data, NULL);
child1 = SH_Fragment_new ("head", data, NULL);
child2 = SH_Fragment_new ("title", data, NULL);
SH_Fragment_append_child (parent, child1, NULL);
SH_Fragment_append_child (child1, child2, NULL);
boolean = SH_Fragment_is_child (parent, child1);
ck_assert_int_eq (boolean, TRUE);
boolean = SH_Fragment_is_child (parent, child2);
ck_assert_int_eq (boolean, FALSE);
boolean = SH_Fragment_is_child (child1, child2);
ck_assert_int_eq (boolean, TRUE);
SH_Fragment_free (parent, NULL);
SH_Data_free (data, NULL);
}
END_TEST
START_TEST(test_fragment_is_descendant)
{
struct SH_Fragment * parent;
struct SH_Fragment * child1;
struct SH_Fragment * child2;
struct SH_Fragment * child3;
struct SH_Data * data;
bool boolean;
data = SH_Data_new (NULL);
parent = SH_Fragment_new ("html", data, NULL);
child1 = SH_Fragment_new ("head", data, NULL);
child2 = SH_Fragment_new ("body", data, NULL);
child3 = SH_Fragment_new ("title", data, NULL);
SH_Fragment_append_child (parent, child1, NULL);
SH_Fragment_append_child (parent, child2, NULL);
SH_Fragment_append_child (child1, child3, NULL);
boolean = SH_Fragment_is_descendant (parent, child1);
ck_assert_int_eq (boolean, TRUE);
boolean = SH_Fragment_is_descendant (parent, child2);
ck_assert_int_eq (boolean, TRUE);
boolean = SH_Fragment_is_descendant (parent, child3);
ck_assert_int_eq (boolean, TRUE);
boolean = SH_Fragment_is_descendant (child1, child2);
ck_assert_int_eq (boolean, FALSE);
boolean = SH_Fragment_is_descendant (child1, child3);
ck_assert_int_eq (boolean, TRUE);
boolean = SH_Fragment_is_descendant (child2, child3);
ck_assert_int_eq (boolean, FALSE);
SH_Fragment_free (parent, NULL);
SH_Data_free (data, NULL);
}
END_TEST
START_TEST(test_fragment_html)
{
struct SH_Error error;
......@@ -200,6 +315,9 @@ Suite * fragment_suite (void)
tcase_add_test (tc_core, test_fragment);
tcase_add_test (tc_core, test_fragment_tag);
tcase_add_test (tc_core, test_fragment_child);
tcase_add_test (tc_core, test_fragment_get_child);
tcase_add_test (tc_core, test_fragment_is_child);
tcase_add_test (tc_core, test_fragment_is_descendant);
tcase_add_test (tc_core, test_fragment_html);
suite_add_tcase (s, tc_core);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment