static int check_bad_xml (void *cache) { /* parsing a not-well-formed XML Sample */ FILE *fl; int sz = 0; int rd; unsigned char *xml = NULL; unsigned char *p_result = NULL; int len; char *err1; char *err2; char *version = gaia_libxml2_version (); if (version == NULL) { fprintf (stderr, "unable to get the library version\n"); return 0; } free (version); /* loading the XMLDocument */ fl = fopen ("books-bad.xml", "rb"); if (!fl) { fprintf (stderr, "cannot open \"books-bad.xml\"\n"); return 0; } if (fseek (fl, 0, SEEK_END) == 0) sz = ftell (fl); xml = malloc (sz); rewind (fl); rd = fread (xml, 1, sz, fl); if (rd != sz) { fprintf (stderr, "read error \"books-bad.xml\"\n"); return 0; } fclose (fl); /* parsing the XMLDocument */ gaiaXmlToBlob (cache, xml, rd, 1, NULL, &p_result, &len, &err1, &err2); if (p_result != NULL) { fprintf (stderr, "this is not a well-formed XML !!!\n"); return 0; } free (xml); return 1; }
static int check_bad_schema (void *cache) { /* validating by invalid Schema */ FILE *fl; int sz = 0; int rd; unsigned char *xml = NULL; unsigned char *p_result = NULL; int len; char *err1; char *err2; /* loading the XMLDocument */ fl = fopen ("books.xml", "rb"); if (!fl) { fprintf (stderr, "cannot open \"books.xml\"\n"); return 0; } if (fseek (fl, 0, SEEK_END) == 0) sz = ftell (fl); xml = malloc (sz); rewind (fl); rd = fread (xml, 1, sz, fl); if (rd != sz) { fprintf (stderr, "read error \"books.xml\"\n"); return 0; } fclose (fl); /* validating the XMLDocument */ gaiaXmlToBlob (cache, xml, rd, 1, "books-bad.xsd", &p_result, &len, &err1, &err2); if (p_result != NULL) { fprintf (stderr, "this is not a valid XML !!!\n"); return 0; } free (xml); return 1; }
int main (int argc, char *argv[]) { int ret; sqlite3 *handle; char *err_msg = NULL; char **results; int rows; int columns; unsigned char *blob; int blob_len; char *hexBlob; unsigned char *xml; int len; char *sql; void *cache = spatialite_alloc_connection(); if (argc > 1 || argv[0] == NULL) argc = 1; /* silencing stupid compiler warnings */ ret = sqlite3_open_v2 (":memory:", &handle, SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE, NULL); if (ret != SQLITE_OK) { fprintf(stderr, "cannot open in-memory db: %s\n", sqlite3_errmsg (handle)); sqlite3_close(handle); return -1; } spatialite_init_ex (handle, cache, 0); ret = sqlite3_exec (handle, "SELECT InitSpatialMetadata(1, 'WGS84')", NULL, NULL, &err_msg); if (ret != SQLITE_OK) { fprintf(stderr, "Unexpected InitSpatialMetadata result: %i, (%s)\n", ret, err_msg); sqlite3_free (err_msg); return -2; } #ifdef ENABLE_LIBXML2 /* only if LIBXML2 is supported */ ret = sqlite3_get_table (handle, "SELECT CreateStylingTables(1)", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error CreateStylingTables: %s\n", err_msg); sqlite3_free (err_msg); return -3; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -4; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #0 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -5; } sqlite3_free_table(results); blob = load_blob("empty.png", &blob_len); if (blob == NULL) return -6; hexBlob = build_hex_blob(blob, blob_len); free(blob); if (hexBlob == NULL) return -7; sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-A', x%Q)", hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterExternalGraphic #1: %s\n", err_msg); sqlite3_free (err_msg); return -8; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -9; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #1 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -10; } sqlite3_free_table(results); sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-A', x%Q, 'title', 'abstract', 'file_name')", hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); free(hexBlob); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterExternalGraphic #2: %s\n", err_msg); sqlite3_free (err_msg); return -11; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -12; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #2 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -13; } sqlite3_free_table(results); xml = load_xml("thunderstorm_mild.svg", &len); if (xml == NULL) return -14; gaiaXmlToBlob (cache, xml, len, 1, NULL, &blob, &blob_len, NULL, NULL); free(xml); if (blob == NULL) { fprintf (stderr, "this is not a well-formed XML !!!\n"); return -15; } hexBlob = build_hex_blob(blob, blob_len); free(blob); if (hexBlob == NULL) return -16; sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-B', x%Q, 'title', 'abstract', 'file_name')", hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterExternalGraphic #3: %s\n", err_msg); sqlite3_free (err_msg); return -17; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -18; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #3 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -19; } sqlite3_free_table(results); sql = sqlite3_mprintf("SELECT RegisterExternalGraphic('url-B', x%Q)", hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); free(hexBlob); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterExternalGraphic #4: %s\n", err_msg); sqlite3_free (err_msg); return -20; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -21; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #4 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -22; } sqlite3_free_table(results); ret = sqlite3_exec (handle, "CREATE TABLE table1 (id INTEGER PRIMARY KEY AUTOINCREMENT)", NULL, NULL, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error Create Table table1: %s\n", err_msg); sqlite3_free (err_msg); return -23; } ret = sqlite3_get_table (handle, "SELECT AddGeometryColumn('table1', 'geom', 4326, 'POINT', 'XY')", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error AddGeometryColumn: %s\n", err_msg); sqlite3_free (err_msg); return -24; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -25; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #5 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -26; } sqlite3_free_table(results); xml = load_xml("stazioni_se.xml", &len); if (xml == NULL) return -27; gaiaXmlToBlob (cache, xml, len, 1, NULL, &blob, &blob_len, NULL, NULL); free(xml); if (blob == NULL) { fprintf (stderr, "this is not a well-formed XML !!!\n"); return -28; } hexBlob = build_hex_blob(blob, blob_len); free(blob); if (hexBlob == NULL) return -29; sql = sqlite3_mprintf("SELECT RegisterVectorStyledLayer('table1', 'geom', x%Q)", hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterVectorStyledLayer #6: %s\n", err_msg); sqlite3_free (err_msg); return -30; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -31; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #6 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -32; } sqlite3_free_table(results); sql = sqlite3_mprintf("SELECT RegisterVectorStyledLayer('table1', 'geom', 0, x%Q)", hexBlob); free(hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterVectorStyledLayer #7: %s\n", err_msg); sqlite3_free (err_msg); return -33; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -34; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #7 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -35; } sqlite3_free_table(results); xml = load_xml("raster_se.xml", &len); if (xml == NULL) return -36; gaiaXmlToBlob (cache, xml, len, 1, NULL, &blob, &blob_len, NULL, NULL); free(xml); if (blob == NULL) { fprintf (stderr, "this is not a well-formed XML !!!\n"); return -37; } hexBlob = build_hex_blob(blob, blob_len); free(blob); if (hexBlob == NULL) return -38; sql = sqlite3_mprintf("SELECT RegisterRasterStyledLayer('srtm', x%Q)", hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterRasterStyledLayer #8: %s\n", err_msg); sqlite3_free (err_msg); return -39; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -40; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #8 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -41; } sqlite3_free_table(results); sql = sqlite3_mprintf("SELECT RegisterRasterStyledLayer('srtm', 0, x%Q)", hexBlob); free(hexBlob); ret = sqlite3_get_table (handle, sql, &results, &rows, &columns, &err_msg); sqlite3_free(sql); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterRasterStyledLayer #9: %s\n", err_msg); sqlite3_free (err_msg); return -42; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -43; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #9 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -44; } sqlite3_free_table(results); ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'srtm', 0)", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterStyledGroup #10: %s\n", err_msg); sqlite3_free (err_msg); return -45; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -46; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #10 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -47; } sqlite3_free_table(results); ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'table1', 'geom', 0)", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterStyledGroup #11: %s\n", err_msg); sqlite3_free (err_msg); return -48; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -49; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #12 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -50; } sqlite3_free_table(results); ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'srtm', 0, 4)", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterStyledGroup #13: %s\n", err_msg); sqlite3_free (err_msg); return -51; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -52; } if (strcmp(results[1 * columns + 0], "0") != 0) { fprintf (stderr, "Unexpected #13 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -53; } sqlite3_free_table(results); ret = sqlite3_get_table (handle, "SELECT RegisterStyledGroup('group', 'table1', 'geom', 0, 1)", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterStyledGroup #14: %s\n", err_msg); sqlite3_free (err_msg); return -54; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -55; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #14 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -56; } sqlite3_free_table(results); ret = sqlite3_get_table (handle, "SELECT SetStyledGroupInfos('group', 'title', 'abstract')", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterStyledGroup #15: %s\n", err_msg); sqlite3_free (err_msg); return -57; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -58; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #15 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -59; } sqlite3_free_table(results); ret = sqlite3_get_table (handle, "SELECT SetStyledGroupInfos('group-bis', 'title', 'abstract')", &results, &rows, &columns, &err_msg); if (ret != SQLITE_OK) { fprintf (stderr, "Error RegisterStyledGroup #16: %s\n", err_msg); sqlite3_free (err_msg); return 60; } if ((rows != 1) || (columns != 1)) { sqlite3_free_table(results); fprintf (stderr, "Unexpected row / column count: %i x %i\n", rows, columns); return -61; } if (strcmp(results[1 * columns + 0], "1") != 0) { fprintf (stderr, "Unexpected #16 result (got %s, expected 1)", results[1 * columns + 0]); sqlite3_free_table(results); return -62; } sqlite3_free_table(results); #endif ret = sqlite3_close (handle); if (ret != SQLITE_OK) { fprintf (stderr, "sqlite3_close() error: %s\n", sqlite3_errmsg (handle)); return -57; } spatialite_cleanup_ex (cache); #ifdef ENABLE_LIBXML2 /* only if LIBXML2 is supported */ xmlCleanupParser(); #endif return 0; }
static int check_mline_gpx (sqlite3 * handle, void *cache, const char *path) { /* parsing an XML Sample */ FILE *fl; int sz = 0; int rd; unsigned char *xml = NULL; int uncompressed_sz; unsigned char *p_result = NULL; gaiaGeomCollPtr geom; gaiaLinestringPtr ln; double x; double y; double z; double m; /* loading the XMLDocument */ fl = fopen (path, "rb"); if (!fl) { fprintf (stderr, "cannot open \"%s\"\n", path); return 0; } if (fseek (fl, 0, SEEK_END) == 0) sz = ftell (fl); xml = malloc (sz); rewind (fl); rd = fread (xml, 1, sz, fl); if (rd != sz) { fprintf (stderr, "read error \"%s\"\n", path); return 0; } fclose (fl); /* parsing the GPX document (no validation / not compressed) */ gaiaXmlToBlob (cache, xml, rd, 0, NULL, &p_result, &uncompressed_sz, NULL, NULL); if (p_result == NULL) { fprintf (stderr, "unable to parse(gpx)\"%s\"\n", path); return 0; } geom = gaiaXmlBlobMLineFromGPX (p_result, uncompressed_sz, handle); if (geom == NULL) { fprintf (stderr, "XB_MLineFromGPX: unexpected failure \"%s\"\n", path); return 0; } if (geom->Srid != 4326) { fprintf (stderr, "XB_MLineFromGPX: invalid SRID (%d) \"%s\"\n", geom->Srid, path); return 0; } ln = geom->FirstLinestring; if (ln == NULL) { fprintf (stderr, "XB_MLineFromGPX: not a Linestring \"%s\"\n", path); return 0; } if (ln->Points < 5) { fprintf (stderr, "XB_MLineFromGPX: too few points \"%s\"\n", path); return 0; } gaiaGetPointXYZM (ln->Coords, 4, &x, &y, &z, &m); if (strcmp (path, "Gpx-sample.gpx") == 0) { if (x != 37.808177) { fprintf (stderr, "XB_MLineFromGPX: unexpected X=%f \"%s\"\n", x, path); return 0; } if (y != 55.753587) { fprintf (stderr, "XB_MLineFromGPX: unexpected Y=%f \"%s\"\n", y, path); return 0; } if (z != 135.0) { fprintf (stderr, "XB_MLineFromGPX: unexpected Z=%f \"%s\"\n", z, path); return 0; } if (m < 2454970.667060 || m > 2454970.667061) { fprintf (stderr, "XB_MLineFromGPX: unexpected M=%f \"%s\"\n", m, path); return 0; } } else { if (x != -25.1959200) { fprintf (stderr, "XB_MLineFromGPX: unexpected X=%f \"%s\"\n", x, path); return 0; } if (y != 37.7710900) { fprintf (stderr, "XB_MLineFromGPX: unexpected Y=%f \"%s\"\n", y, path); return 0; } if (z != 0.0) { fprintf (stderr, "XB_MLineFromGPX: unexpected Z=%f \"%s\"\n", z, path); return 0; } if (m != 1721059.50) { fprintf (stderr, "XB_MLineFromGPX: unexpected M=%f \"%s\"\n", m, path); return 0; } } gaiaFreeGeomColl (geom); free (p_result); free (xml); return 1; }
static int check_parse (void *cache, const char *path) { /* parsing an XML Sample */ FILE *fl; int sz = 0; int rd; unsigned char *xml = NULL; int compressed_sz; int uncompressed_sz; int doc_sz; int formatted_sz; int formatted_txt_sz; unsigned char *p_result = NULL; unsigned char *out; char *txt; /* loading the XMLDocument */ fl = fopen (path, "rb"); if (!fl) { fprintf (stderr, "cannot open \"%s\"\n", path); return 0; } if (fseek (fl, 0, SEEK_END) == 0) sz = ftell (fl); xml = malloc (sz); rewind (fl); rd = fread (xml, 1, sz, fl); if (rd != sz) { fprintf (stderr, "read error \"%s\"\n", path); return 0; } fclose (fl); /* parsing the XMLDocument (no validation / compressed) */ gaiaXmlToBlob (cache, xml, rd, 1, NULL, &p_result, &compressed_sz, NULL, NULL); if (p_result == NULL) { fprintf (stderr, "unable to parse(1) \"%s\"\n", path); return 0; } doc_sz = gaiaXmlBlobGetDocumentSize (p_result, compressed_sz); gaiaXmlFromBlob (p_result, compressed_sz, 4, &out, &formatted_sz); if (out == NULL) { fprintf (stderr, "unable to format(1) \"%s\"\n", path); return 0; } free (out); txt = gaiaXmlTextFromBlob (p_result, compressed_sz, 2); if (txt == NULL) { fprintf (stderr, "unable to format-text(1) \"%s\"\n", path); return 0; } formatted_txt_sz = strlen (txt); free (txt); free (p_result); /* parsing the XMLDocument (no validation / not compressed) */ gaiaXmlToBlob (cache, xml, rd, 0, NULL, &p_result, &uncompressed_sz, NULL, NULL); if (p_result == NULL) { fprintf (stderr, "unable to parse(2) \"%s\"\n", path); return 0; } free (p_result); if (strcmp (path, "books.xml") == 0) { if (compressed_sz != 432) { fprintf (stderr, "books.xml: unexpected compressed size %d (expected 432)\n", compressed_sz); return 0; } if (uncompressed_sz != 780) { fprintf (stderr, "books.xml: unexpected compressed size %d (expected 780)\n", uncompressed_sz); return 0; } if (doc_sz != 741) { fprintf (stderr, "books.xml: unexpected document size %d (expected 741)\n", doc_sz); return 0; } if (formatted_sz != 863) { fprintf (stderr, "books.xml: unexpected formatted size %d (expected 863)\n", formatted_sz); return 0; } if (formatted_txt_sz != 803) { fprintf (stderr, "books.xml: unexpected formatted-text size %d (expected 803)\n", formatted_txt_sz); return 0; } } if (strcmp (path, "opera.xml") == 0) { if (compressed_sz != 425) { fprintf (stderr, "opera.xml: unexpected compressed size %d (expected 425)\n", compressed_sz); return 0; } if (uncompressed_sz != 951) { fprintf (stderr, "opera.xml: unexpected compressed size %d (expected 951)\n", uncompressed_sz); return 0; } if (doc_sz != 912) { fprintf (stderr, "opera.xml: unexpected document size %d (expected 912)\n", doc_sz); return 0; } if (formatted_sz != 969) { fprintf (stderr, "opera.xml: unexpected formatted size %d (expected 969)\n", formatted_sz); return 0; } if (formatted_txt_sz != 909) { fprintf (stderr, "opera.xml: unexpected formatted-text size %d (expected 909)\n", formatted_txt_sz); return 0; } } if (strcmp (path, "movies.xml") == 0) { if (compressed_sz != 577) { fprintf (stderr, "movies.xml: unexpected compressed size %d (expected 577)\n", compressed_sz); return 0; } if (uncompressed_sz != 1809) { fprintf (stderr, "movies.xml: unexpected compressed size %d (expected 1809)\n", uncompressed_sz); return 0; } if (doc_sz != 1770) { fprintf (stderr, "movies.xml: unexpected document size %d (expected 1770)\n", doc_sz); return 0; } if (formatted_sz != 944) { fprintf (stderr, "movies.xml: unexpected formatted size %d (expected 944)\n", formatted_sz); return 0; } if (formatted_txt_sz != 884) { fprintf (stderr, "movies.xml: unexpected formatted-text size %d (expected 884)\n", formatted_txt_sz); return 0; } } free (xml); return 1; }
static int check_extended (void *cache, const char *path, int mode) { /* validating an XML Sample */ FILE *fl; int sz = 0; int rd; unsigned char *xml = NULL; int iso; int style; int svg; unsigned char *p_result = NULL; int len; char *file_id = NULL; char *parent_id = NULL; char *title = NULL; char *abstract = NULL; unsigned char *geom_blob; int geom_size; gaiaGeomCollPtr geom; /* loading the XMLDocument */ fl = fopen (path, "rb"); if (!fl) { fprintf (stderr, "cannot open \"%s\"\n", path); return 0; } if (fseek (fl, 0, SEEK_END) == 0) sz = ftell (fl); xml = malloc (sz); rewind (fl); rd = fread (xml, 1, sz, fl); if (rd != sz) { fprintf (stderr, "read error \"%s\"\n", path); return 0; } fclose (fl); /* simple parsing without validation */ gaiaXmlToBlob (cache, xml, rd, 1, NULL, &p_result, &len, NULL, NULL); if (p_result == NULL) { fprintf (stderr, "unable to parse \"%s\"\n", path); return 0; } /* checking the payload type */ iso = gaiaIsIsoMetadataXmlBlob (p_result, len); style = gaiaIsSldSeRasterStyleXmlBlob (p_result, len); style = gaiaIsSldSeVectorStyleXmlBlob (p_result, len); svg = gaiaIsSvgXmlBlob (p_result, len); if (mode == ISO_METADATA && iso && !style && !svg) ; else if (mode == SLD_SE_STYLE && !iso && style && !svg) ; else if (mode == SVG && !iso && !style && svg) ; else { fprintf (stderr, "mismatching type: \"%s\" iso=%d style=%d svg=%d\n", path, iso, style, svg); return 0; } /* testing ISO Metadata attributes */ file_id = gaiaXmlBlobGetFileId (p_result, len); parent_id = gaiaXmlBlobGetParentId (p_result, len); title = gaiaXmlBlobGetTitle (p_result, len); abstract = gaiaXmlBlobGetAbstract (p_result, len); gaiaXmlBlobGetGeometry (p_result, len, &geom_blob, &geom_size); if (mode == ISO_METADATA) { /* verifying ISO Metadata attributes */ if (file_id == NULL) { fprintf (stderr, "unexpected NULL FileIdentifier in \"%s\"\n", path); return 0; } if (strcmp (file_id, "029097fd-2ef2-487c-a5ca-6ec7a3dbac53") != 0) { fprintf (stderr, "unexpected FileIdentifier in \"%s\" [%s]\n", path, file_id); return 0; } if (parent_id == NULL) { fprintf (stderr, "unexpected NULL ParentIdentifier in \"%s\"\n", path); return 0; } if (strcmp (parent_id, "024027fd-3ef2-487c-a8ca-6ec8a3dfac57") != 0) { fprintf (stderr, "unexpected ParentIdentifier in \"%s\" [%s]\n", path, parent_id); return 0; } if (title == NULL) { fprintf (stderr, "unexpected NULL Title in \"%s\"\n", path); return 0; } if (strcmp (title, "Image2000 Product 1 (nl2) Multispectral") != 0) { fprintf (stderr, "unexpected Title in \"%s\" [%s]\n", path, title); return 0; } if (abstract == NULL) { fprintf (stderr, "unexpected NULL Abstract in \"%s\"\n", path); return 0; } if (strcmp (abstract, "IMAGE2000 product 1 individual orthorectified scenes.") != 0) { fprintf (stderr, "unexpected Abstract in \"%s\" [%s]\n", path, abstract); return 0; } if (geom_blob == NULL) { fprintf (stderr, "unexpected NULL Geometry in \"%s\"\n", path); return 0; } geom = gaiaFromSpatiaLiteBlobWkb (geom_blob, geom_size); if (geom == NULL) { fprintf (stderr, "unexpected invalid Geometry in \"%s\"\n", path); return 0; } if (geom->Srid != 4326) { fprintf (stderr, "unexpected Geometry SRID in \"%s\" [%d]\n", path, geom->Srid); return 0; } if (geom->DeclaredType != GAIA_MULTIPOLYGON) { fprintf (stderr, "unexpected Geometry Type in \"%s\" [%d]\n", path, geom->DeclaredType); return 0; } if (geom->MinX != 3.93000000) { fprintf (stderr, "unexpected Geometry MinX in \"%s\" [%1.8f]\n", path, geom->MinX); return 0; } if (geom->MinY != 52.10000000) { fprintf (stderr, "unexpected Geometry MinY in \"%s\" [%1.8f]\n", path, geom->MinY); return 0; } if (geom->MaxX != 7.57000000) { fprintf (stderr, "unexpected Geometry MaxX in \"%s\" [%1.8f]\n", path, geom->MaxX); return 0; } if (geom->MaxY != 54.10000000) { fprintf (stderr, "unexpected Geometry MaxY in \"%s\" [%1.8f]\n", path, geom->MaxY); return 0; } gaiaFreeGeomColl (geom); } else { /* not ISO Metadata */ if (strcmp (path, "stazioni_se.xml") == 0) { if (strcmp (title, "Railway Stations - blue star") != 0) { fprintf (stderr, "unexpected Title in \"%s\"\n", path); return 0; } if (strcmp (abstract, "a simple SE Point Symbolizer") != 0) { fprintf (stderr, "unexpected Abstract in \"%s\"\n", path); return 0; } } else { if (title != NULL) { fprintf (stderr, "unexpected Title in \"%s\"\n", path); return 0; } if (abstract != NULL) { fprintf (stderr, "unexpected Abstract in \"%s\"\n", path); return 0; } } } free (p_result); free (xml); if (file_id) free (file_id); if (parent_id) free (parent_id); if (title) free (title); if (abstract) free (abstract); if (geom_blob) free (geom_blob); return 1; }
static int check_validate (void *cache, const char *path) { /* validating an XML Sample */ FILE *fl; int sz = 0; int rd; unsigned char *xml = NULL; char *schema_uri = NULL; char *schema_uri2 = NULL; unsigned char *p_result = NULL; int len; /* loading the XMLDocument */ fl = fopen (path, "rb"); if (!fl) { fprintf (stderr, "cannot open \"%s\"\n", path); return 0; } if (fseek (fl, 0, SEEK_END) == 0) sz = ftell (fl); xml = malloc (sz); rewind (fl); rd = fread (xml, 1, sz, fl); if (rd != sz) { fprintf (stderr, "read error \"%s\"\n", path); return 0; } fclose (fl); /* extracting the Internal SchemaURI */ schema_uri = gaiaXmlGetInternalSchemaURI (cache, xml, rd); if (schema_uri == NULL) { fprintf (stderr, "unable to identify the Schema for \"%s\"\n", path); return 0; } /* validating the XMLDocument */ gaiaXmlToBlob (cache, xml, rd, 1, schema_uri, &p_result, &len, NULL, NULL); if (p_result == NULL) { fprintf (stderr, "unable to validate \"%s\"\n", path); return 0; } if (!gaiaIsSchemaValidatedXmlBlob (p_result, len)) { fprintf (stderr, "validation failed: \"%s\"\n", path); return 0; } schema_uri2 = gaiaXmlBlobGetSchemaURI (p_result, len); if (schema_uri2 == NULL) { fprintf (stderr, "unable to retrieve the ValidationSchemaURI for \"%s\"\n", path); return 0; } if (strcmp (schema_uri, schema_uri2) != 0) { fprintf (stderr, "%s: mismatching SchemaURI \"%s\" (expected \"%s\")\n", path, schema_uri2, schema_uri); return 0; } free (schema_uri); free (schema_uri2); free (p_result); free (xml); return 1; }