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

Validator: removed ids for tags

For a rationale, see commit 'Validator: removed ids for attrs'
parent b839584e
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ long_line_behaviour=1
long_line_column=72
[files]
current_page=33
current_page=53
FILE_NAME_0=139;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2FREADME;0;8
FILE_NAME_1=134;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitignore;0;8
FILE_NAME_2=1737;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fconfigure.ac;0;8
......@@ -61,9 +61,9 @@ FILE_NAME_28=1867;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fp
FILE_NAME_29=3036;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.c;0;8
FILE_NAME_30=1159;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator.h;0;8
FILE_NAME_31=1111;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_html.h;0;8
FILE_NAME_32=15982;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8
FILE_NAME_33=1600;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8
FILE_NAME_34=1124;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag_data.h;0;8
FILE_NAME_32=11962;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.c;0;8
FILE_NAME_33=1068;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag.h;0;8
FILE_NAME_34=1287;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_tag_data.h;0;8
FILE_NAME_35=16395;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.c;0;8
FILE_NAME_36=1051;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr.h;0;8
FILE_NAME_37=1413;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fsrc%2Flib%2Fsefht%2Fvalidator_attr_data.h;0;8
......@@ -82,9 +82,9 @@ FILE_NAME_49=24;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprg
FILE_NAME_50=4221;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text.c;0;8
FILE_NAME_51=994;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_text_mark.c;0;8
FILE_NAME_52=2447;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator.c;0;8
FILE_NAME_53=3880;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_tag.c;0;8
FILE_NAME_53=7456;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_tag.c;0;8
FILE_NAME_54=28881;C;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftests%2Ftest_validator_attr.c;0;8
FILE_NAME_55=547;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
FILE_NAME_55=548;None;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Ftodo.txt;0;8
FILE_NAME_56=201;YAML;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2F.gitlab-ci.yml;0;4
FILE_NAME_57=71;Sh;0;EUTF-8;1;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Fupload.sh.in;0;8
FILE_NAME_58=806;Sh;0;EUTF-8;0;1;0;%2Fhome%2Fjonathan%2FDokumente%2Fprojekte%2Fprgm%2Finternet%2Fweb%2FSeFHT%2Fgitlab-ci%2Frelease.sh.in;0;4
......
......@@ -40,11 +40,9 @@ static inline
void
init_tags (/*@special@*/ struct SH_Validator * validator)
/*@defines validator->tags,
validator->tag_n,
validator->last_tag@*/
validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/;
/*@modifies validator->tag_n@*/;
static inline
bool
......@@ -53,11 +51,9 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
const size_t size,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags,
validator->tag_n,
validator->last_tag@*/
validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -67,11 +63,9 @@ bool
init_tags_spec_html5 (/*@special@*/ struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags,
validator->tag_n,
validator->last_tag@*/
validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -82,11 +76,9 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
const struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->tags,
copy->tag_n,
copy->last_tag@*/
copy->tag_n@*/
/*@modifies copy->tags@*/
/*@modifies copy->tag_n@*/
/*@modifies copy->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -111,47 +103,17 @@ find_tag (const struct SH_Validator * validator,
/*@modifies index@*/;
static inline
Tag
bool
add_tag (struct SH_Validator * validator,
const char * tag,
size_t index,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
/*@unused@*/
static inline
bool
is_tag_id (const struct SH_Validator * validator, Tag id)
/*@*/;
static inline
bool
is_tag_name (const struct SH_Validator * validator, const char * name)
/*@*/;
/*@unused@*/
static inline
/*@null@*/
/*@only@*/
char *
get_tag_name_by_id (const struct SH_Validator * validator, Tag id,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
static inline
Tag
get_tag_id_by_name (const struct SH_Validator * validator,
const char * name,
/*@out@*/ size_t * index)
/*@modifies index@*/;
static inline
bool
remove_tag (struct SH_Validator * validator,
......@@ -159,7 +121,6 @@ remove_tag (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/;
......@@ -169,15 +130,12 @@ static inline
void
init_tags (/*@special@*/ struct SH_Validator * validator)
/*@defines validator->tags,
validator->tag_n,
validator->last_tag@*/
validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
{
validator->tags = malloc (0);
validator->tag_n = 0;
validator->last_tag = TAG_ERR;
return;
}
......@@ -186,11 +144,9 @@ bool
init_tags_spec_html5 (/*@special@*/ struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags,
validator->tag_n,
validator->last_tag@*/
validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -207,21 +163,17 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
const size_t size,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines validator->tags,
validator->tag_n,
validator->last_tag@*/
validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
size_t index;
Tag id;
/* overflow detection */
if ((size > TAG_MAX - 1)
|| (size >= (SIZE_MAX / sizeof (struct tag_info))))
if ((size >= (SIZE_MAX / sizeof (struct tag_info))))
{
set_status (status, E_DOMAIN, 2,
"maximum number of tags reached");
......@@ -247,11 +199,10 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
/* ignore duplicate tags */
if (!find_tag (validator, spec[index].tag, &position))
{
char * name;
size_t index2;
struct tag_info tag_data;
name = strdup (spec[index].tag);
if (NULL == name)
tag_data.name = strdup (spec[index].tag);
if (NULL == tag_data.name)
{
set_status (status, E_ALLOC, 3,
"strdup failed");
......@@ -259,28 +210,18 @@ init_tags_from_spec (/*@special@*/ struct SH_Validator * validator,
return FALSE;
}
/* only names are initialized */
for (index2 = tag_n; index2 > position; index2--)
for (size_t i = tag_n; i > position; i--)
{
tags[index2].name = tags[index2-1].name;
tags[i] = tags[i-1];
}
tags[position].name = name;
tags[position] = tag_data;
tag_n++;
}
}
#undef tag_n
#undef tags
/* initialize ids */
id = TAG_ERR;
for (index = 0; index < validator->tag_n; index++)
{
validator->tags[index].id = id = NEXT_TAG (id);
}
validator->last_tag = id;
set_success (status);
return TRUE;
}
......@@ -290,9 +231,7 @@ bool
copy_tag (/*@special@*/ struct tag_info * copy,
const struct tag_info * tag,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->id,
copy->name@*/
/*@modifies copy->id@*/
/*@defines copy->name@*/
/*@modifies copy->name@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
......@@ -307,7 +246,6 @@ copy_tag (/*@special@*/ struct tag_info * copy,
return FALSE;
}
copy->id = tag->id;
copy->name = name;
return TRUE;
......@@ -318,11 +256,9 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
const struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@defines copy->tags,
copy->tag_n,
copy->last_tag@*/
copy->tag_n@*/
/*@modifies copy->tags@*/
/*@modifies copy->tag_n@*/
/*@modifies copy->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -336,9 +272,6 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
if (copy->tags == NULL)
{
set_status (status, E_ALLOC, 5, "malloc failed");
copy->tag_n = 0;
copy->last_tag = TAG_ERR;
return FALSE;
}
......@@ -355,7 +288,6 @@ copy_tags (/*@special@*/ struct SH_Validator * copy,
}
copy->tag_n = validator->tag_n;
copy->last_tag = validator->last_tag;
return TRUE;
}
......@@ -428,37 +360,39 @@ find_tag (const struct SH_Validator * validator,
}
static inline
Tag
bool
add_tag (struct SH_Validator * validator,
const char * tag,
size_t index,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
Tag tag_id;
char * name;
struct tag_info tag_data;
struct tag_info * new_tags;
/* abort on overflow:
* - no unused Tag or
* - no unused index */
if ((validator->last_tag == TAG_MAX)
|| ((validator->tag_n == SIZE_MAX)
|| ((validator->tag_n + 1)
> (SIZE_MAX / sizeof (struct tag_info)))))
if ((validator->tag_n == SIZE_MAX)
|| ((validator->tag_n + 1)
> (SIZE_MAX / sizeof (struct tag_info))))
{
set_status (status, E_DOMAIN, 2,
"maximum number of tags reached");
return TAG_ERR;
return FALSE;
}
/* allocate new space */
tag_data.name = strdup (tag);
if (NULL == tag_data.name)
{
set_status (status, E_ALLOC, 3, "strdup failed");
return FALSE;
}
/* allocate new space */
/* The addition and the multiplication is save,
* because we have tested for this
* in the first condition. */
......@@ -474,109 +408,22 @@ add_tag (struct SH_Validator * validator,
#ifdef S_SPLINT_S
validator->tags = (void *) 0x12345;
#endif
return TAG_ERR;
return FALSE;
}
validator->tags = new_tags;
tag_id = NEXT_TAG (validator->last_tag);
name = strdup (tag);
if (NULL == name)
for (size_t i = validator->tag_n; i > index; i--)
{
set_status (status, E_ALLOC, 4, "strdup failed");
return TAG_ERR;
validator->tags[i] = validator->tags[i-1];
}
for (size_t index2 = validator->tag_n; index2 > index; index2--)
{
validator->tags[index2] = validator->tags[index2-1];
}
validator->tags[index].id = tag_id;
validator->tags[index].name = name;
/* commit changes */
validator->tags[index] = tag_data;
validator->tag_n++;
validator->last_tag = tag_id;
set_success (status);
return tag_id;
}
/*@unused@*/
static inline
bool
is_tag_id (const struct SH_Validator * validator, Tag id)
/*@*/
{
size_t index;
for (index = 0; index < validator->tag_n; index++)
{
if (id == validator->tags[index].id)
{
return TRUE;
}
}
return FALSE;
}
static inline
bool
is_tag_name (const struct SH_Validator * validator, const char * name)
/*@*/
{
size_t index;
return find_tag (validator, name, &index);
}
/*@unused@*/
static inline
/*@null@*/
/*@only@*/
char *
get_tag_name_by_id (const struct SH_Validator * validator, Tag id,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
size_t index;
char * name;
for (index = 0; index < validator->tag_n; index++)
{
if (id == validator->tags[index].id)
{
name = strdup (validator->tags[index].name);
if (NULL == name)
{
set_status (status, E_ALLOC, 3,
"strdup failed");
return NULL;
}
return name;
}
}
return NULL;
}
static inline
Tag
get_tag_id_by_name (const struct SH_Validator * validator,
const char * name,
/*@out@*/ size_t * index)
/*@modifies index@*/
{
if (!find_tag (validator, name, index))
{
return TAG_ERR;
}
return validator->tags[*index].id;
return TRUE;
}
static inline
......@@ -599,7 +446,6 @@ remove_tag (struct SH_Validator * validator,
/*@null@*/ /*@out@*/ struct SH_Status * status)
/*@modifies validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......@@ -655,10 +501,11 @@ SH_Validator_check_tag (struct SH_Validator * validator,
const char * tag)
/*@*/
{
return is_tag_name (validator, tag);
size_t index;
return find_tag (validator, tag, &index);
}
Tag
bool
/*@alt void@*/
SH_Validator_register_tag (struct SH_Validator * validator,
const char * tag,
......@@ -666,20 +513,17 @@ SH_Validator_register_tag (struct SH_Validator * validator,
struct SH_Status * status)
/*@modifies validator->tags@*/
/*@modifies validator->tag_n@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
{
size_t index;
Tag tag_id;
/* tag already registered */
tag_id = get_tag_id_by_name (validator, tag, &index);
if (tag_id != TAG_ERR)
if (find_tag (validator, tag, &index))
{
set_success (status);
return tag_id;
return TRUE;
}
return add_tag (validator, tag, index, status);
......@@ -692,7 +536,6 @@ SH_Validator_deregister_tag (struct SH_Validator * validator,
struct SH_Status * status)
/*@modifies validator->tag_n@*/
/*@modifies validator->tags@*/
/*@modifies validator->last_tag@*/
/*@globals fileSystem@*/
/*@modifies fileSystem@*/
/*@modifies status@*/
......
......@@ -36,13 +36,7 @@
#include "status.h"
typedef unsigned int Tag;
#define TAG_ERR (Tag) 0
#define TAG_MIN (Tag) 1
#define TAG_MAX (Tag) UINT_MAX
Tag
bool
/*@alt void@*/
SH_Validator_register_tag (SH_Validator * validator,
const char * tag,
......
......@@ -31,15 +31,11 @@
struct tag_info
{
Tag id;
/*@only@*/ char * name;
};
#define NEXT_TAG(tag) (tag + 1)
#define TAG_DATA \
/*@only@*/ struct tag_info * tags; \
size_t tag_n; \
Tag last_tag; \
#endif /* SEFHT_VALIDATOR_TAG_DATA_H */
......@@ -59,7 +59,6 @@ START_TEST(test_validator_no_status)
ck_assert_ptr_ne (NULL, validator);
ck_assert_int_eq (0, validator->tag_n);
ck_assert_int_eq (TAG_ERR, validator->last_tag);
SH_Validator_free (validator);
}
......@@ -76,7 +75,6 @@ START_TEST(test_validator_with_status)
ck_assert_int_eq (status.status, SUCCESS);
ck_assert_int_eq (0, validator->tag_n);
ck_assert_int_eq (TAG_ERR, validator->last_tag);
SH_Validator_free (validator);
}
......@@ -98,18 +96,17 @@ START_TEST(test_validator_copy_no_status)
ck_assert_ptr_ne (NULL, copy->tags);
ck_assert_ptr_ne (validator->tags, copy->tags);
ck_assert_int_eq (validator->tag_n, copy->tag_n);
ck_assert_int_eq (validator->last_tag, copy->last_tag);
#define TEST_STR(S) ck_assert_ptr_ne (validator->S, copy->S); \
ck_assert_str_eq (validator->S, copy->S);
for (size_t index = 0; index < copy->tag_n; index++)
{
ck_assert_int_eq (validator->tags[index].id,
copy->tags[index].id);
ck_assert_ptr_ne (validator->tags[index].name,
copy->tags[index].name);
ck_assert_str_eq (validator->tags[index].name,
copy->tags[index].name);
TEST_STR (tags[index].name);
}
#undef TEST_STR
SH_Validator_free (copy);
SH_Validator_free (validator);
}
......@@ -134,18 +131,17 @@ START_TEST(test_validator_copy_with_status)
ck_assert_ptr_ne (NULL, copy->tags);
ck_assert_ptr_ne (validator->tags, copy->tags);
ck_assert_int_eq (validator->tag_n, copy->tag_n);
ck_assert_int_eq (validator->last_tag, copy->last_tag);
#define TEST_STR(S) ck_assert_ptr_ne (validator->S, copy->S); \
ck_assert_str_eq (validator->S, copy->S);
for (size_t index = 0; index < copy->tag_n; index++)
{
ck_assert_int_eq (validator->tags[index].id,
copy->tags[index].id);
ck_assert_ptr_ne (validator->tags[index].name,
copy->tags[index].name);
ck_assert_str_eq (validator->tags[index].name,
copy->tags[index].name);
TEST_STR (tags[index].name);
}
#undef TEST_STR
SH_Validator_free (copy);
SH_Validator_free (validator);
}
......@@ -161,17 +157,13 @@ START_TEST(test_validator_spec_no_status)
ck_assert_ptr_ne (NULL, validator->tags);
ck_assert_int_eq (3, validator->tag_n);
ck_assert_int_eq (3, validator->last_tag);
ck_assert_int_eq (1, validator->tags[0].id);
ck_assert_ptr_ne (HTML_[1].tag, validator->tags[0].name);
ck_assert_str_eq (HTML_[1].tag, validator->tags[0].name);
ck_assert_int_eq (2, validator->tags[1].id);
ck_assert_ptr_ne (HTML_[3].tag, validator->tags[1].name);
ck_assert_str_eq (HTML_[3].tag, validator->tags[1].name);
ck_assert_int_eq (3, validator->tags[2].id);
ck_assert_ptr_ne (HTML_[0].tag, validator->tags[2].name);
ck_assert_str_eq (HTML_[0].tag, validator->tags[2].name);
......@@ -193,17 +185,13 @@ START_TEST(test_validator_spec_with_status)
ck_assert_ptr_ne (NULL, validator->tags);
ck_assert_int_eq (3, validator->tag_n);
ck_assert_int_eq (3, validator->last_tag);
ck_assert_int_eq (1, validator->tags[0].id);
ck_assert_ptr_ne (HTML_[1].tag, validator->tags[0].name);
ck_assert_str_eq (HTML_[1].tag, validator->tags[0].name);
ck_assert_int_eq (2, validator->tags[1].id);
ck_assert_ptr_ne (HTML_[3].tag, validator->tags[1].name);
ck_assert_str_eq (HTML_[3].tag, validator->tags[1].name);
ck_assert_int_eq (3, validator->tags[2].id);
ck_assert_ptr_ne (HTML_[0].tag, validator->tags[2].name);
ck_assert_str_eq (HTML_[0].tag, validator->tags[2].name);
......@@ -221,49 +209,43 @@ START_TEST(test_validator_tag_register_no_status)
const char * tag4 = "p";
const char * tag5 = "img";
char * tagN;
Tag tag;
Tag tag_;
bool result;
/* setup */
validator = SH_Validator_new (NULL);
ck_assert_ptr_ne (NULL, validator);
/* test - register */
tag = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (1, tag);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, tag);
result = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (validator->tags[0].id, tag);
ck_assert_str_eq (validator->tags[0].name, tag1);
ck_assert_int_eq (1, validator->tag_n);
ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
/* test - duplicate registration */
tag_ = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (tag_, tag);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, tag);
result = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (validator->tags[0].id, tag);
ck_assert_str_eq (validator->tags[0].name, tag1);
ck_assert_int_eq (1, validator->tag_n);
ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
/* test - order */
tag = SH_Validator_register_tag (validator, tag3, NULL);
ck_assert_int_eq (tag, 2);
tag = SH_Validator_register_tag (validator, tag4, NULL);
ck_assert_int_eq (tag, 3);
result = SH_Validator_register_tag (validator, tag3, NULL);
ck_assert_int_eq (TRUE, result);
tag = SH_Validator_register_tag (validator, tag5, NULL);
ck_assert_int_eq (tag, 4);
result = SH_Validator_register_tag (validator, tag4, NULL);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (validator->tag_n, 4);
result = SH_Validator_register_tag (validator, tag5, NULL);
ck_assert_int_eq (TRUE, result);
ck_assert_str_eq (validator->tags[0].name, tag3);
ck_assert_str_eq (validator->tags[1].name, tag1);
ck_assert_str_eq (validator->tags[2].name, tag5);
ck_assert_str_eq (validator->tags[3].name, tag4);
ck_assert_int_eq (4, validator->tag_n);
ck_assert_str_eq (tag3, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[1].name);
ck_assert_str_eq (tag5, validator->tags[2].name);
ck_assert_str_eq (tag4, validator->tags[3].name);
/* test - overflow detection */
/* make method fail by filling with garbage until
......@@ -282,25 +264,15 @@ START_TEST(test_validator_tag_register_no_status)
{
sprintf (tagN, "tag%zu", validator->tag_n);
}
while (TAG_ERR != SH_Validator_register_tag (validator, tagN, NULL));
while (SH_Validator_register_tag (validator, tagN, NULL));
free (tagN);
/* test overflow #1 */
tag = SH_Validator_register_tag (validator, tag2, NULL);
ck_assert_int_eq (TAG_ERR, tag);
ck_assert_int_eq (validator->tag_n, 10);
/* test overflow #2 */
validator->tag_n = 1;
validator->last_tag = TAG_MAX;
tag = SH_Validator_register_tag (validator, tag2, NULL);
ck_assert_int_eq (TAG_ERR, tag);
/* test overflow */
result = SH_Validator_register_tag (validator, tag2, NULL);
ck_assert_int_eq (FALSE, result);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, TAG_MAX);
ck_assert_int_eq (10, validator->tag_n);
/* cleanup */
/* also free garbage created for overflow test */
......@@ -318,8 +290,7 @@ START_TEST(test_validator_tag_register_with_status)
const char * tag4 = "p";
const char * tag5 = "img";
char * tagN;
Tag tag;
Tag tag_;
bool result;
/* setup */
validator = SH_Validator_new (NULL);
......@@ -327,50 +298,45 @@ START_TEST(test_validator_tag_register_with_status)
/* test - register */
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag1, &status);
ck_assert_int_eq (1, tag);
result = SH_Validator_register_tag (validator, tag1, &status);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (SUCCESS, status.status);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, tag);
ck_assert_int_eq (validator->tags[0].id, tag);
ck_assert_str_eq (validator->tags[0].name, tag1);
ck_assert_int_eq (1, validator->tag_n);
ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
/* test - duplicate registration */
_status_preinit (status);
tag_ = SH_Validator_register_tag (validator, tag1, &status);
ck_assert_int_eq (tag_, tag);
result = SH_Validator_register_tag (validator, tag1, &status);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (SUCCESS, status.status);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, tag);
ck_assert_int_eq (validator->tags[0].id, tag);
ck_assert_str_eq (validator->tags[0].name, tag1);
ck_assert_int_eq (1, validator->tag_n);
ck_assert_ptr_ne (tag1, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[0].name);
/* test - order */
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag3, &status);
ck_assert_int_eq (tag, 2);
result = SH_Validator_register_tag (validator, tag3, &status);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (status.status, SUCCESS);
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag4, &status);
ck_assert_int_eq (tag, 3);
result = SH_Validator_register_tag (validator, tag4, &status);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (status.status, SUCCESS);
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag5, &status);
ck_assert_int_eq (tag, 4);
result = SH_Validator_register_tag (validator, tag5, &status);
ck_assert_int_eq (TRUE, result);
ck_assert_int_eq (status.status, SUCCESS);
ck_assert_int_eq (validator->tag_n, 4);
ck_assert_str_eq (validator->tags[0].name, tag3);
ck_assert_str_eq (validator->tags[1].name, tag1);
ck_assert_str_eq (validator->tags[2].name, tag5);
ck_assert_str_eq (validator->tags[3].name, tag4);
ck_assert_int_eq (4, validator->tag_n);
ck_assert_str_eq (tag3, validator->tags[0].name);
ck_assert_str_eq (tag1, validator->tags[1].name);
ck_assert_str_eq (tag5, validator->tags[2].name);
ck_assert_str_eq (tag4, validator->tags[3].name);
/* test - overflow detection */
/* make method fail by filling with garbage until
......@@ -389,30 +355,18 @@ START_TEST(test_validator_tag_register_with_status)
{
sprintf (tagN, "tag%zu", validator->tag_n);
}
while (TAG_ERR != SH_Validator_register_tag (validator, tagN, NULL));
while (SH_Validator_register_tag (validator, tagN, NULL));
free (tagN);
/* test overflow #1 */
/* test overflow */
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag2, &status);
ck_assert_int_eq (TAG_ERR, tag);
result = SH_Validator_register_tag (validator, tag2, &status);
ck_assert_int_eq (FALSE, result);
ck_assert_int_eq (E_DOMAIN, status.status);
ck_assert_int_eq (validator->tag_n, 10);
/* test overflow #2 */
validator->tag_n = 1;
validator->last_tag = TAG_MAX;
_status_preinit (status);
tag = SH_Validator_register_tag (validator, tag2, &status);
ck_assert_int_eq (TAG_ERR, tag);
ck_assert_int_eq (E_DOMAIN, status.status);
ck_assert_int_eq (validator->tag_n, 1);
ck_assert_int_eq (validator->last_tag, TAG_MAX);
/* cleanup */
/* also free garbage created for overflow test */
validator->tag_n = 10;
......@@ -425,15 +379,14 @@ START_TEST(test_validator_tag_check)
const char * tag1 = "html";
const char * tag2 = "html";
const char * tag3 = "head";
Tag tag;
bool result;
/* setup */
validator = SH_Validator_new (NULL);
ck_assert_ptr_ne (NULL, validator);
tag = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_ne (TAG_ERR, tag);
result = SH_Validator_register_tag (validator, tag1, NULL);
ck_assert_int_eq (TRUE, result);
/* test */
result = SH_Validator_check_tag (validator, tag1);
......
......@@ -22,5 +22,4 @@ Fragment:
- support for mapping special chars -> html entities
Validator:
- remove unnecessary ids
- tests missing for deregister_tag
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment