diff --git a/.gitattributes b/.gitattributes index a62b543f8..740e840eb 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,6 +5,7 @@ *.md text *.txt text *.lua text +*.bat text # Shell scripts should *always* be LF, regardless of platfrom s/* text eol=lf diff --git a/src/json.c b/src/json.c index 224341db2..b826b1926 100644 --- a/src/json.c +++ b/src/json.c @@ -68,6 +68,9 @@ int json_export(stream * out, unsigned int flags) { cJSON_AddNumberToObject(data, "x", r->x); cJSON_AddNumberToObject(data, "y", r->y); cJSON_AddStringToObject(data, "type", r->terrain->_name); + if (r->land) { + cJSON_AddStringToObject(data, "name", r->land->name); + } } } if (factions && (flags & EXPORT_FACTIONS)) { diff --git a/src/json_test.c b/src/json_test.c index 5672e9c97..71daae17c 100644 --- a/src/json_test.c +++ b/src/json_test.c @@ -3,22 +3,102 @@ #include #include #include "json.h" -#include "bind_eressea.h" +#include "tests.h" + +#include +#include + +#include + +#include + +static char *strip(char *str) { + char *s = str, *b = str, *e = str; + // b is where text begins, e where it ends, s where we insert it. + for (; *b && isspace(*b); ++b) {}; + for (e = b; *e && !isspace(*e); ++e) {}; + while (*b) { + memcpy(s, b, e - b); + s += e - b; + for (b = e; *b && isspace(*b); ++b) {}; + for (e = b; *e && !isspace(*e); ++e) {}; + } + *s = 0; + return str; +} static void test_export_no_regions(CuTest * tc) { char buf[1024]; stream out = { 0 }; int err; - + mstream_init(&out); err = json_export(&out, EXPORT_REGIONS); CuAssertIntEquals(tc, 0, err); out.api->rewind(out.handle); out.api->read(out.handle, buf, sizeof(buf)); - CuAssertStrEquals(tc, "{\n}\n", buf); + CuAssertStrEquals(tc, "{}", strip(buf)); mstream_done(&out); } - + +static cJSON *export_a_region(CuTest * tc, const struct terrain_type *terrain, region **_r) { + char buf[1024]; + stream out = { 0 }; + int err; + region *r; + cJSON *json, *attr; + + r = test_create_region(0, 0, terrain); + + mstream_init(&out); + err = json_export(&out, EXPORT_REGIONS); + CuAssertIntEquals(tc, 0, err); + out.api->rewind(out.handle); + out.api->read(out.handle, buf, sizeof(buf)); + mstream_done(&out); + + json = cJSON_Parse(buf); + CuAssertPtrNotNull(tc, json); + CuAssertIntEquals(tc, cJSON_Object, json->type); + json = json->child; + CuAssertPtrEquals(tc, 0, json->next); + CuAssertIntEquals(tc, cJSON_Object, json->type); + CuAssertStrEquals(tc, "regions", json->string); + json = json->child; + CuAssertIntEquals(tc, r->uid, atoi(json->string)); + CuAssertPtrNotNull(tc, attr = cJSON_GetObjectItem(json, "x")); + CuAssertIntEquals(tc, r->x, attr->valueint); + CuAssertPtrNotNull(tc, attr = cJSON_GetObjectItem(json, "y")); + CuAssertIntEquals(tc, r->y, attr->valueint); + CuAssertPtrNotNull(tc, attr = cJSON_GetObjectItem(json, "type")); + CuAssertStrEquals(tc, terrain->_name, attr->valuestring); + + if (_r) *_r = r; + return json; +} + +static void test_export_land_region(CuTest * tc) { + region *r; + struct terrain_type *terrain; + cJSON *json, *attr; + test_cleanup(); + terrain = test_create_terrain("plain", LAND_REGION); + json = export_a_region(tc, terrain, &r); + CuAssertPtrNotNull(tc, attr = cJSON_GetObjectItem(json, "name")); + CuAssertStrEquals(tc, r->land->name, attr->valuestring); + cJSON_Delete(json); +} + +static void test_export_ocean_region(CuTest * tc) { + struct terrain_type *terrain; + cJSON *json; + test_cleanup(); + terrain = test_create_terrain("ocean", SEA_REGION); + json = export_a_region(tc, terrain, 0); + CuAssertPtrEquals(tc, 0, cJSON_GetObjectItem(json, "name")); + cJSON_Delete(json); +} + static void test_export_no_factions(CuTest * tc) { char buf[1024]; stream out = { 0 }; @@ -29,13 +109,15 @@ static void test_export_no_factions(CuTest * tc) { CuAssertIntEquals(tc, 0, err); out.api->rewind(out.handle); out.api->read(out.handle, buf, sizeof(buf)); - CuAssertStrEquals(tc, "{\n}\n", buf); + CuAssertStrEquals(tc, "{}", strip(buf)); mstream_done(&out); } CuSuite *get_json_suite(void) { CuSuite *suite = CuSuiteNew(); SUITE_ADD_TEST(suite, test_export_no_regions); + SUITE_ADD_TEST(suite, test_export_ocean_region); + SUITE_ADD_TEST(suite, test_export_land_region); SUITE_ADD_TEST(suite, test_export_no_factions); return suite; } diff --git a/vs2013-build.bat b/vs2013-build.bat index 5d2bae190..e4f5e0d19 100644 --- a/vs2013-build.bat +++ b/vs2013-build.bat @@ -1,7 +1,10 @@ @ECHO OFF SET VSVERSION=12 -SET ERESSEA=%Userprofile%/Documents/Eressea +SET SRCDIR=%CD% +CD .. +SET ERESSEA=%CD% +CD %SRCDIR% mkdir build-vs%VSVERSION% cd build-vs%VSVERSION% "%ProgramFiles(x86)%\CMake 2.8\bin\cmake.exe" -G "Visual Studio %VSVERSION%" -DCMAKE_PREFIX_PATH="%ProgramFiles(x86)%/Lua/5.1;%ERESSEA%/dependencies-win32" -DCMAKE_MODULE_PATH="%ERESSEA%/server/cmake/Modules" -DCMAKE_SUPPRESS_REGENERATION=TRUE ..