solstice

Compute collected power and efficiencies of a solar plant
git clone git://git.meso-star.com/solstice.git
Log | Files | Refs | README | LICENSE

commit 326b3440bd2099eed34002f69bf4b552ce6966d7
parent 83d41230d116c77687feeef314628b343aaf941c
Author: Vincent Forest <vincent.forest@meso-star.com>
Date:   Fri, 28 Jul 2017 10:09:58 +0200

Forbid spaces in the name of an entity/anchor

Diffstat:
Msrc/parser/solparser_entity.c | 7+++++++
Msrc/parser/test_solparser2.c | 35++++++++++++++++++++++++++++-------
Msrc/parser/test_solparser_normal_map.c | 4++--
Msrc/parser/test_solparser_spectrum.c | 2+-
4 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/src/parser/solparser_entity.c b/src/parser/solparser_entity.c @@ -95,6 +95,13 @@ parse_identifier_string if(strchr(str_cget(str), '.')) { log_err(parser, name, "invalid character `.' in the name `%s'.\n", str_cget(str)); + res = RES_BAD_ARG; + goto error; + } + if(strchr(str_cget(str), ' ') || strchr(str_cget(str), '\t')) { + log_err(parser, name, "invalid space or tabulation in the name `%s'.\n", + str_cget(str)); + res = RES_BAD_ARG; goto error; } diff --git a/src/parser/test_solparser2.c b/src/parser/test_solparser2.c @@ -44,6 +44,7 @@ main(int argc, char** argv) size_t nmtls = 0; size_t ngeoms = 0; double tmp[3]; + long fp; FILE* stream; (void)argc, (void)argv; @@ -57,9 +58,29 @@ main(int argc, char** argv) fprintf(stream, " - sphere: { radius: 1 }\n"); fprintf(stream, " material: { matte: { reflectivity: 1 } }\n"); fprintf(stream, "- entity:\n"); - fprintf(stream, " name: lvl 0\n"); fprintf(stream, " primary: 0\n"); fprintf(stream, " geometry: *sphere\n"); + + fp = ftell(stream); + fprintf(stream, " name: invalid name\n"); + rewind(stream); + CHECK(solparser_setup(parser, NULL, stream), RES_OK); + CHECK(solparser_load(parser), RES_BAD_ARG); + + NCHECK(fseek(stream, fp, SEEK_SET), -1); + fprintf(stream, " name: invalid\tname\n"); + rewind(stream); + CHECK(solparser_setup(parser, NULL, stream), RES_OK); + CHECK(solparser_load(parser), RES_BAD_ARG); + + NCHECK(fseek(stream, fp, SEEK_SET), -1); + fprintf(stream, " name: invalid.name\n"); + rewind(stream); + CHECK(solparser_setup(parser, NULL, stream), RES_OK); + CHECK(solparser_load(parser), RES_BAD_ARG); + + NCHECK(fseek(stream, fp, SEEK_SET), -1); + fprintf(stream, " name: \t\t\t lvl0 \t \n"); fprintf(stream, " transform: { translation: [1,2,3], rotation: [4,5,6]}\n"); fprintf(stream, " children:\n"); fprintf(stream, " - name: lvl1a\n"); @@ -118,7 +139,7 @@ main(int argc, char** argv) entity_id = solparser_entity_iterator_get(&it); entity = solparser_get_entity(parser, entity_id); - CHECK(strcmp("lvl 0", str_cget(&entity->name)), 0); + CHECK(strcmp("lvl0", str_cget(&entity->name)), 0); CHECK(solparser_entity_get_children_count(entity), 2); CHECK(entity->type, SOLPARSER_ENTITY_GEOMETRY); geom_id = entity->data.geometry; @@ -192,17 +213,17 @@ main(int argc, char** argv) CHECK(entity2->type, SOLPARSER_ENTITY_GEOMETRY); CHECK(entity2->data.geometry.i, geom_id.i); - entity3 = solparser_find_entity(parser, "lvl 0"); + entity3 = solparser_find_entity(parser, "lvl0"); CHECK(entity3, entity); entity3 = solparser_find_entity(parser, "lvl1a"); CHECK(entity3, NULL); - entity3 = solparser_find_entity(parser, "lvl 0.lvl1a"); + entity3 = solparser_find_entity(parser, "lvl0.lvl1a"); CHECK(entity3, entity1a); - entity3 = solparser_find_entity(parser, "lvl 0.lvl1b"); + entity3 = solparser_find_entity(parser, "lvl0.lvl1b"); CHECK(entity3, entity1b); - entity3 = solparser_find_entity(parser, "lvl 0.lvl1b.lvl2"); + entity3 = solparser_find_entity(parser, "lvl0.lvl1b.lvl2"); CHECK(entity3, entity2); - entity3 = solparser_find_entity(parser,"lvl 0.lvl1b.bad_name"); + entity3 = solparser_find_entity(parser,"lvl0.lvl1b.bad_name"); CHECK(entity3, NULL); sun = solparser_get_sun(parser); diff --git a/src/parser/test_solparser_normal_map.c b/src/parser/test_solparser_normal_map.c @@ -186,7 +186,7 @@ test_mirror(struct solparser* parser) fprintf(stream, "- sun: { dni: 1, spectrum: [{wavelength: 1, data: 1} ] }\n"); fprintf(stream, "- entity: \n"); - fprintf(stream, " name: my entity\n"); + fprintf(stream, " name: my_entity\n"); fprintf(stream, " primary: 0\n"); fprintf(stream, " geometry: \n"); fprintf(stream, " - cuboid: { size: [1, 1, 1] }\n"); @@ -207,7 +207,7 @@ test_mirror(struct solparser* parser) entity_id = solparser_entity_iterator_get(&it); entity = solparser_get_entity(parser, entity_id); - CHECK(strcmp("my entity", str_cget(&entity->name)), 0); + CHECK(strcmp("my_entity", str_cget(&entity->name)), 0); CHECK(solparser_entity_get_children_count(entity), 0); CHECK(entity->primary, 0); CHECK(entity->type, SOLPARSER_ENTITY_GEOMETRY); diff --git a/src/parser/test_solparser_spectrum.c b/src/parser/test_solparser_spectrum.c @@ -42,7 +42,7 @@ test_sun(struct solparser* parser) fprintf(stream, " spectrum: *my_spectrum\n"); fprintf(stream, "- material: &matte { matte: { reflectivity: 1 } }\n"); fprintf(stream, "- entity:\n"); - fprintf(stream, " name: foo bar\n"); + fprintf(stream, " name: foo-bar\n"); fprintf(stream, " primary: 0\n"); fprintf(stream, " geometry: [{sphere: {radius: 1}, material: *matte}]\n"); rewind(stream);