/* * libsyncml - A syncml protocol implementation * Copyright (C) 2005 Armin Bauer * Copyright (C) 2007-2008 Michael Bell * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * */ #include "tests/support.h" #include #include #include #include #include START_TEST (xml_parser_empty) { const char *data = " "; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); } END_TEST START_TEST (xml_parser_syncml_empty) { const char *data = ""; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); } END_TEST START_TEST (xml_parser_syncml_wrong_case) { const char *data = ""; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); } END_TEST START_TEST (xml_parser_syncml_additional) { const char *data = ""; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); } END_TEST START_TEST (xml_parser_no_syncbody) { const char *data = ""; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_no_synchdr) { const char *data = ""; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); } END_TEST START_TEST (xml_parser_synchdr_empty) { const char *data = ""; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_verproto) { const char *data = "SyncML/1.1"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_verdtd) { const char *data = "SyncML/1.11.1"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_msgid) { const char *data = "SyncML/1.11.11"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_sessionid) { const char *data = "SyncML/1.11.111"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_target) { const char *data = "SyncML/1.11.111test"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_source) { const char *data = "SyncML/1.11.111testtest"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); sml_fail_unless(header->target != NULL, NULL); sml_fail_unless(header->source != NULL, NULL); sml_fail_unless(header->protocol == SML_PROTOCOL_SYNCML, NULL); sml_fail_unless(header->version == SML_VERSION_11, NULL); sml_fail_unless(header->sessionID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error == NULL, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_source2) { const char *data = "SyncML/1.11.11123testtest"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); sml_fail_unless(header->target != NULL, NULL); sml_fail_unless(header->source != NULL, NULL); sml_fail_unless(header->protocol == SML_PROTOCOL_SYNCML, NULL); sml_fail_unless(header->version == SML_VERSION_11, NULL); sml_fail_unless(header->sessionID == 123, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error == NULL, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_synchdr_additional) { const char *data = "SyncML/1.11.111testtest"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(!smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(!smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status_empty) { const char *data = "SyncML/1.11.111testtest"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(!smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error == NULL, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status_cmdid) { const char *data = "SyncML/1.11.111testtest1"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(!smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status_msgref) { const char *data = "SyncML/1.11.111testtest11"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(!smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status_cmdref) { const char *data = "SyncML/1.11.111testtest111"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(!smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status) { const char *data = "SyncML/1.11.111testtest110Sync"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error == NULL, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status2) { const char *data = "SyncML/1.11.111testtest110Sync110Sync"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = TRUE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == FALSE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status3) { const char *data = "SyncML/1.11.111testtest110Sync110Sync"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = FALSE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == TRUE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_status_google) { const char *data = "SyncML/1.11.111testtest523Alertcontactscontacts200"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserEnd(parser, NULL, NULL, &error), NULL); sml_fail_unless(error == NULL, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_final) { const char *data = "SyncML/1.11.111testtest110Sync110Sync"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = FALSE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == TRUE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_final2) { const char *data = "SyncML/1.11.111testtest110Sync110Sync"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = FALSE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == TRUE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_cmd) { const char *data = "SyncML/1.11.111testtest1/test/testNextlast200"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), "%s", GET_ERROR_MESSAGE(error)); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = TRUE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == FALSE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_cmd_final) { const char *data = "SyncML/1.11.111testtest1/test/testNextlast200"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_sync_subcommand) { const char *data = "SyncML/1.11.211/vcards/vcards3/vcards/vcards14text/x-vcarduid"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OPEN, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 3, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_SYNC, NULL); sml_fail_unless(cmd->private.sync.numChanged == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 4, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_ADD, NULL); sml_fail_unless(cmd->private.change.items != NULL, NULL); sml_fail_unless(cmd->private.change.type == SML_CHANGE_ADD, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_CLOSE, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_emi) { const char *data = "1.1SyncML/1.111opiumIMEI:xxxxxxxxxxxxxxx10000NokiaInq/1.11SyncHdr40321Alert50032Alert50043Alert500"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); smlParserFree(parser); } END_TEST START_TEST (xml_parser_doctype) { const char *data = "\n\n\n\n\n1.1\n\n\nSyncML/1.1\n\n\n1125161435\n\n\n1\n\n\n\nhttp://test.com:7962/\n\n\n\n\n35686843434\n\n\nasd\n\n\n\n\n\nb64\n\n\nsyncml:auth-basic\n\n\n\nYXNkOmFzZA==\n\n\n\n\n3300\n\n\n\n\n\n\n1\n\n\n201\n\n\n\n\npeople\n\n\n\n\npeople\n\n\n\n\n\n\n\n1\n\n\n\n\n\n\n\n2\n\n\n\nwbxml\n\n\napplication/vnd.syncml-devinf+xml\n\n\n\n\n\n./devinf11\n\n\n\n\n\n1.1\n\n\nMotorola CE, Copyright 2004\n\n\nV3\n\n\nR374_G_0E.41.C3R_A\n\n\nSJUG0851CA\n\n\n3564564556453\n\n\nphone\n\n\n\npeople\n\n\n\ntext/x-vcard\n\n\n2.1\n\n\n\n\ntext/x-vcard\n\n\n2.1\n\n\n\n\n1\n\n\n2\n\n\n\n\n\ntext/x-vcard\n\n\nBEGIN\n\n\nVCARD\n\n\nEND\n\n\nVCARD\n\n\nVERSION\n\n\n2.1\n\n\nFN\n\n\nN\n\n\nTEL\n\n\nPREF\n\n\nWORK\n\n\nHOME\n\n\nCELL\n\n\nFAX\n\n\nPAGER\n\n\nEMAIL\n\n\nINTERNET\n\n\nCHARSET\n\n\n\n\n\n\n\n\n\n\n"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); smlCredUnref(cred); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_large_obj) { const char *data = "SyncML/1.11.211/vcards/vcards3/vcards/vcards14text/x-vcard200uid"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OPEN, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 3, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_SYNC, NULL); sml_fail_unless(cmd->private.sync.numChanged == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 4, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_ADD, NULL); sml_fail_unless(cmd->private.change.items != NULL, NULL); sml_fail_unless(cmd->private.change.type == SML_CHANGE_ADD, NULL); SmlDataSyncChangeItem *item = g_list_nth_data(cmd->private.change.items, 0); sml_fail_unless(sml_data_sync_change_item_get_missing_data(item) == TRUE, NULL); sml_fail_unless(cmd->size == 200, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_CLOSE, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_large_obj2) { const char *data = "SyncML/1.11.211/vcards/vcards3/vcards/vcards14text/x-vcard200uid"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OPEN, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 3, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_SYNC, NULL); sml_fail_unless(cmd->private.sync.numChanged == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 4, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_ADD, NULL); sml_fail_unless(cmd->private.change.items != NULL, NULL); sml_fail_unless(cmd->private.change.type == SML_CHANGE_ADD, NULL); SmlDataSyncChangeItem *item = g_list_nth_data(cmd->private.change.items, 0); sml_fail_unless(sml_data_sync_change_item_get_missing_data(item) == TRUE, NULL); sml_fail_unless(cmd->size == 200, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_CLOSE, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_large_obj_error) { const char *data = "SyncML/1.11.211/vcards/vcards3/vcards/vcards14text/x-vcard200uid4text/x-vcard200uid"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OPEN, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 3, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_SYNC, NULL); sml_fail_unless(cmd->private.sync.numChanged == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 4, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_ADD, NULL); sml_fail_unless(cmd->private.change.items != NULL, NULL); sml_fail_unless(cmd->private.change.type == SML_CHANGE_ADD, NULL); SmlDataSyncChangeItem *item = g_list_nth_data(cmd->private.change.items, 0); sml_fail_unless(sml_data_sync_change_item_get_missing_data(item) == TRUE, NULL); sml_fail_unless(cmd->size == 200, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_ERROR, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_ERROR, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(!smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error != NULL, NULL); SML_ERROR_FREE(error); smlParserFree(parser); } END_TEST START_TEST (xml_parser_large_obj_mangled) { const char *data = "SyncML/1.11.211/vcards/vcards3/vcards/vcards14text/x-vcarduid10"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OPEN, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 3, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_SYNC, NULL); sml_fail_unless(cmd->private.sync.numChanged == 1, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 4, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_ADD, NULL); sml_fail_unless(cmd->private.change.items != NULL, NULL); sml_fail_unless(cmd->private.change.type == SML_CHANGE_ADD, NULL); SmlDataSyncChangeItem *item = g_list_nth_data(cmd->private.change.items, 0); sml_fail_unless(sml_data_sync_change_item_get_missing_data(item) == TRUE, NULL); sml_fail_unless(cmd->size == 10, NULL); const char *data2 = sml_data_sync_change_item_get_data(item); sml_fail_unless(!strcmp(data2, "data\n\nda"), NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_CLOSE, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_devinf) { setup_testbed(NULL); const char *data = "1.1SyncML/1.1211PC SuiteIMEI:XXXX100008application/vnd.syncml-devinf+xml./devinf111.1NOKIA66803.04.37IMEI:XXXXphone./C\\Systemata\\Calendar8text/x-vcalendar1.0text/calendar2.0text/x-vcalendar1.01234567./C\\System\\\\\\Data\\Contacts.cdb8text/x-vcard2.1text/vcard3.0text/x-vcard2.11234567./C\\System\\Data\\Notepad.dat8text/plain1.0text/plain1.0text/plain1.0text/plain1.01234567text/x-vcalendarBEGINVCALENDARVEVENTVTODOENDVCALENDARVEVENTVTODOVERSION1.0UIDSUMMARYDESCRIPTIONDTENDDTSTARTAALARMTYPECLASSPUBLICPRIVATECONFIDENTIALCOMPLETEDLOCATIONDCREATEDLAST-MODIFIEDPRIORITYSTATUSRRULEDUEEXDATEX-EPOCAGENDAENTRYTYPEtext/calendarBEGINVCALENDARVEVENTVTODOENDVCALENDARVEVENTVTODOVERSION2.0UIDSUMMARYDESCRIPTIONDTENDDTSTARTAALARMTYPECLASSPUBLICPRIVATECONFIDENTIALCOMPLETEDLOCATIONDCREATEDLAST-MODIFIEDPRIORITYSTATUSRRULEDUEEXDATEX-EPOCAGENDAENTRYTYPEtext/x-vcardBEGINVCARDENDVCARDVERSION2.1REVNADRHOMEWORKTELHOMEWORKCELLPAGERFAXVIDEOFNEMAILINTERNETHOMEWORKURLHOMEWORKNOTETITLEORGPHOTOBDAYSOUNDX-IRMC-Ntext/vcardBEGINVCARDENDVCARDVERSION3.0REVNADRHOMEWORKTELHOMEWORKCELLPAGERFAXVIDEOFNEMAILINTERNETHOMEWORKURLHOMEWORKNOTETITLEORGPHOTOBDAYSOUNDX-IRMC-Ntext/plain"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 8, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); sml_fail_unless(cmd->private.access.item != NULL, NULL); char *buffer = NULL; gsize size = 0; sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); sml_fail_unless(error == NULL, NULL); SmlDevInf *devinf = smlXmlDevInfParse(buffer, size, &error); sml_fail_unless(devinf != NULL, "%s", GET_ERROR_MESSAGE(error)); sml_fail_unless(error == NULL, NULL); g_object_unref(devinf); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_devinf_ctcap) { setup_testbed(NULL); const char *data = "1.2SyncML/1.211LibSyncML Test SuiteIMEI:xxxxxxxxxxxxxxx60001application/vnd.syncml-devinf+wbxml./devinf121.2SonyEricssonK850iR1CA029R7AR6AIMEI:xxxxxxxxxxxxxxxphoneContactsContacts64text/x-vcard2.1text/vcard3.0text/x-vcard2.1text/x-vcard2.1X-IRMC-LUID12GEOPHOTO10000ENCODINGBASE64BDAY8URL120TITLE30ORG30EMAIL3128TYPEWORKHOMEADR2125TYPEWORKHOMENOTE512TEL780TYPECELL;WORKCELL;HOMECELLHOMEFAXWORKN60VERSION2.1ENDVCARDBEGINVCARDtext/vcard3.0X-IRMC-LUID12GEOPHOTO10000ENCODINGBASE64BDAY8URL120TITLE30ORG30EMAIL3128TYPEWORKHOMEADR2125TYPEWORKHOMENOTE512TEL780TYPECELL;WORKCELL;HOMECELLHOMEFAXWORKN60VERSION3.0ENDVCARDBEGINVCARD500012467CalendarCalendar64text/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0X-IRMC-LUID12X-SONYERICSSON-DSTDAYLIGHTLAST-MODIFIEDEXDATERRULE50CLASSPUBLICCATEGORIESBIRTHDAYHOLIDAYVACATIONTRAVELPHONE CALLMISCELLANEOUSMEETINGAALARMDALARMDTENDDTSTARTDESCRIPTION512LOCATION50SUMMARY200VERSION1.0ENDVEVENTVCALENDARBEGINVEVENTVCALENDAR100012467TasksTasks64text/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0X-IRMC-LUID12X-SONYERICSSON-DSTDAYLIGHTLAST-MODIFIEDCLASSPUBLICCATEGORIESBIRTHDAYHOLIDAYVACATIONTRAVELPHONE CALLMISCELLANEOUSMEETINGSTATUSCOMPLETEDNEEDS ACTIONACCEPTEDPRIORITYDUECOMPLETEDAALARMDALARMDESCRIPTION512SUMMARY200VERSION1.0ENDVCALENDARVTODOBEGINVCALENDARVTODO25012467NotesNotes64text/plain1.0text/plain1.0text/plain1.0BODY2545012467BookmarksBookmarks64text/x-vbookmark1.0text/x-vbookmark1.0text/x-vbookmark1.0X-SONYERICSSON-ICON256ENCODINGBASE64X-IRMC-URLURL1024TITLE31BEGINVENVVBKMENDVENVVBKMVERSION1.012467"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 1, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); sml_fail_unless(cmd->private.access.item != NULL, NULL); char *buffer = NULL; gsize size = 0; sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); sml_fail_unless(error == NULL, NULL); SmlDevInf *devinf = smlXmlDevInfParse(buffer, size, &error); sml_fail_unless(devinf != NULL, NULL); sml_fail_unless(error == NULL, NULL); g_object_unref(devinf); smlCommandUnref(cmd); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_devinf12) { setup_testbed(NULL); /* The following string has been sent by a SE P1i */ const char *data = "1.2SyncML/1.292841http://192.168.1.102:8080IMEI:xxxxxxxxxxxxxxx100001application/vnd.syncml-devinf+wbxml./devinf121.2Sony EricssonP1iSymbianUK0Z1.0.11.0IMEI:xxxxxxxxxxxxxxxsmartphoneC:CalendarAgendatext/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0AALARMtextATTACHtextATTENDEEtextEXPECTtextROLEtextRSVPtextSTATUStextBEGINtextVCALENDARVEVENTVTODOCATEGORIEStextCOMPLETEDtextCLASStextPUBLICPRIVATECONFIDENTIALDAYLIGHTtextDCREATEDtextDESCRIPTIONtextDTSTARTtextDTENDtextDUEtextENDtextVCALENDARVEVENTVTODOEXDATEtextLAST-MODIFIEDtextLOCATIONtextPRIORITYtextRRULEtextSTATUStextSUMMARYtextUIDtextVERSIONtext1.0X-EPOCALARMtextVALUEtextINLINEURLENCODINGtextBASE64X-CONTENTTYPEtextX-EPOCAGENDAENTRYTYPEtextAPPOINTMENTANNIVERSARYEVENTTODOREMINDER1235647"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 1, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); sml_fail_unless(cmd->private.access.item != NULL, NULL); char *buffer = NULL; gsize size = 0; sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); sml_fail_unless(error == NULL, NULL); SmlDevInf *devinf = smlXmlDevInfParse(buffer, size, &error); sml_fail_unless(devinf != NULL, NULL); sml_fail_unless(error == NULL, NULL); g_object_unref(devinf); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_devinf_ext) { setup_testbed(NULL); /* The following test ensures that the parser tolerates Ext in DevInf * like this one from a ticket: * * X-funambol-smartslow * */ const char *data = "1.1SyncML/1.1211PC SuiteIMEI:XXXX100008application/vnd.syncml-devinf+xml./devinf111.1NOKIA66803.04.37IMEI:XXXXphone./C\\Systemata\\Calendar8text/x-vcalendar1.0text/calendar2.0text/x-vcalendar1.01234567./C\\System\\\\\\Data\\Contacts.cdb8text/x-vcard2.1text/vcard3.0text/x-vcard2.11234567./C\\System\\Data\\Notepad.dat8text/plain1.0text/plain1.0text/plain1.0text/plain1.01234567text/x-vcalendarBEGINVCALENDARVEVENTVTODOENDVCALENDARVEVENTVTODOVERSION1.0UIDSUMMARYDESCRIPTIONDTENDDTSTARTAALARMTYPECLASSPUBLICPRIVATECONFIDENTIALCOMPLETEDLOCATIONDCREATEDLAST-MODIFIEDPRIORITYSTATUSRRULEDUEEXDATEX-EPOCAGENDAENTRYTYPEtext/calendarBEGINVCALENDARVEVENTVTODOENDVCALENDARVEVENTVTODOVERSION2.0UIDSUMMARYDESCRIPTIONDTENDDTSTARTAALARMTYPECLASSPUBLICPRIVATECONFIDENTIALCOMPLETEDLOCATIONDCREATEDLAST-MODIFIEDPRIORITYSTATUSRRULEDUEEXDATEX-EPOCAGENDAENTRYTYPEtext/x-vcardBEGINVCARDENDVCARDVERSION2.1REVNADRHOMEWORKTELHOMEWORKCELLPAGERFAXVIDEOFNEMAILINTERNETHOMEWORKURLHOMEWORKNOTETITLEORGPHOTOBDAYSOUNDX-IRMC-Ntext/vcardBEGINVCARDENDVCARDVERSION3.0REVNADRHOMEWORKTELHOMEWORKCELLPAGERFAXVIDEOFNEMAILINTERNETHOMEWORKURLHOMEWORKNOTETITLEORGPHOTOBDAYSOUNDX-IRMC-Ntext/plain\n\n X-funambol-smartslow\n"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 8, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); sml_fail_unless(cmd->private.access.item != NULL, NULL); char *buffer = NULL; gsize size = 0; sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); sml_fail_unless(error == NULL, NULL); SmlDevInf *devinf = smlXmlDevInfParse(buffer, size, &error); sml_fail_unless(devinf != NULL, "%s", GET_ERROR_MESSAGE(error)); sml_fail_unless(error == NULL, NULL); g_object_unref(devinf); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_OTHER, NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_empty_data_element) { const char *data = "SyncML/1.21.211testtest2./devinf12"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 2, NULL); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error), NULL); sml_fail_unless(cmd == NULL, NULL); sml_fail_unless(error == NULL, NULL); gboolean final = TRUE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == FALSE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_msgref_zero) { const char *data = "1.1SyncML/1.1161PC SuiteIMEI:XXXXXXXXXXXXXXX6000100SyncHdr/PC Suite513201Alert513302Alert513403Alert513" ; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(status->msgRef == 0, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(status->msgRef == 0, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(status->msgRef == 0, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(status->msgRef == 0, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); gboolean final = FALSE; gboolean end = FALSE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == TRUE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_ctcap_property_size) { setup_testbed(NULL); const char *data = "1.2SyncML/1.2421http://www.foo.barIMEI:XXXXXXXXXX60001application/vnd.syncml-devinf+wbxml./devinf121.2SonyEricssonW580iR6BC002R6AR5AIMEI:XXXXXXXXXXXXphoneContactsContacts64text/x-vcard2.1text/vcard3.0text/x-vcard2.1text/x-vcard2.1BDAYURL120TITLE15ORG30EMAIL350TYPEINTERNETADR2TYPEWORKHOMENOTE50TEL580TYPECELLHOMEFAXWORKN30VERSION2.1ENDVCARDBEGINVCARDtext/vcard3.0BDAYURL120TITLE15ORG30EMAIL350TYPEINTERNETADR2TYPEWORKHOMENOTE50TEL580TYPECELLHOMEFAXWORKN30VERSION3.0ENDVCARDBEGINVCARD100012467CalendarCalendar64text/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0LAST-MODIFIEDEXDATERRULE50CLASSPUBLICCATEGORIESVACATIONTRAVELPHONE CALLMISCELLANEOUSMEETINGAALARMDALARMDTENDDTSTARTDESCRIPTION128LOCATION50SUMMARY100VERSION1.0ENDVEVENTVCALENDARBEGINVEVENTVCALENDAR30012467TasksTasks64text/x-vcalendar1.0text/x-vcalendar1.0text/x-vcalendar1.0LAST-MODIFIEDCLASSPUBLICCATEGORIESVACATIONTRAVELPHONE CALLMISCELLANEOUSMEETINGSTATUSCOMPLETEDNEEDS ACTIONACCEPTEDPRIORITYDUECOMPLETEDAALARMDALARMDESCRIPTION128SUMMARY100VERSION1.0ENDVCALENDARVTODOBEGINVCALENDARVTODO8012467NotesNotes64text/plain1.0text/plain1.0text/plain1.0BODY2542512467BookmarksBookmarks64text/x-vbookmark1.0text/x-vbookmark1.0text/x-vbookmark1.0X-IRMC-URLURLTITLEBEGINVENVVBKMENDVENVVBKMVERSION1.0124672201contactsContacts016553565469465999"; ; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status == NULL, NULL); sml_fail_unless(error == NULL, NULL); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 1, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); sml_fail_unless(cmd->private.access.item != NULL, NULL); char *buffer = NULL; gsize size = 0; sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); sml_fail_unless(error == NULL, NULL); SmlDevInf *devinf = smlXmlDevInfParse(buffer, size, &error); sml_fail_unless(devinf != NULL, NULL); sml_fail_unless(error == NULL, NULL); g_object_unref(devinf); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlCommandUnref(cmd); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST START_TEST (xml_parser_ctcap11_size) { setup_testbed(NULL); const char *data = "1.1SyncML/1.111PC SuiteIMEI:..............3584110SyncHdr/PC Suite200211AlertContacts2003application/vnd.syncml-devinf+xml./devinf111.1NokiaNokia 6300V 05.00\n27-04-07\nRM-217\n(c) N..V 05.00\n27-04-07\nRM-217\n(c) N..4001IMEI:..............phone/telecom/pb.vcf8text/x-vcard2.1text/x-vcard2.112467/telecom/cal.vcs8text/x-vcalendar1.0text/x-vcalendar1.012467/telecom/note.txt8text/plaintext/plain12467text/x-vcardBEGINVCARDVERSION2.1ENDVCARDNFNTELPREFWORKHOMEVOICEFAXCELLNOTEURLEMAILADRPHOTOBDAYTITLEORGX-NICKNAMEtext/x-vcalendarBEGINVCALENDARVEVENTVTODOVERSION1.0ENDVCALENDARVEVENTVTODODTSTARTDTENDSUMMARYDESCRIPTIONDUEAALARMDALARMRRULECATEGORIESSPECIAL OCCASIONMEETINGPHONE CALLMISCELLANEOUSREMINDERLOCATIONSTATUSNEEDS ACTIONCOMPLETEDPRIORITY123EXDATEtext/plainchr30004201Contacts/telecom/pb.vcf0297"; GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 1, NULL); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); SmlCommand *cmd = NULL; sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(cmd->cmdID == 3, NULL); sml_fail_unless(cmd->type == SML_COMMAND_TYPE_PUT, NULL); sml_fail_unless(cmd->private.access.item != NULL, NULL); char *buffer = NULL; gsize size = 0; sml_fail_unless(smlItemGetData(cmd->private.access.item, &buffer, &size, &error), NULL); sml_fail_unless(error == NULL, NULL); SmlDevInf *devinf = smlXmlDevInfParse(buffer, size, &error); sml_fail_unless(devinf != NULL, NULL); sml_fail_unless(error == NULL, NULL); g_object_unref(devinf); smlCommandUnref(cmd); sml_fail_unless(smlParserGetCommand(parser, &cmd, &error) == SML_PARSER_RESULT_NORMAL, NULL); sml_fail_unless(cmd != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlCommandUnref(cmd); gboolean final = FALSE; gboolean end = TRUE; sml_fail_unless(smlParserEnd(parser, &final, &end, &error), NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(final == TRUE, NULL); sml_fail_unless(end == FALSE, NULL); smlParserFree(parser); } END_TEST /* Funambol (e.g. scheduleworld.com) embeds Item in to Status * including the Meta element with MaxObjSize for example. */ START_TEST (xml_parser_item_with_meta_in_status) { const char *data = "" \ "1.1SyncML/1.1401424john.doe@example.com1234567http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==" \ "" \ "" \ "140SyncHdr" \ "http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==" \ "jku@vili200" \ "" \ "" \ "2" \ "4" \ "10" \ "Alert" \ "200" \ "" \ "1024000" \ "" \ "" \ "" \ "" \ ""; /* check for valid document */ GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); /* parse header and first status */ SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 4, "The message ID must be 4."); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); /* parse second status with item and meta info */ sml_fail_unless(smlParserGetStatus(parser, &status, &error), "%s", GET_ERROR_MESSAGE(error)); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); /* cleanup */ smlParserFree(parser); } END_TEST /* Funambol (e.g. scheduleworld.com) embeds Item in to Status * including the Meta element with MaxObjSize for example. * The Item element can include an empty Data element too. * If XML native communication is used then an empty Data * element usually looks like "". */ START_TEST (xml_parser_item_with_meta_and_long_empty_data_in_status) { const char *data = "" \ "1.1SyncML/1.1401424john.doe@example.com1234567http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==" \ "" \ "" \ "140SyncHdr" \ "http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==" \ "jku@vili200" \ "" \ "" \ "2" \ "4" \ "10" \ "Alert" \ "200" \ "" \ "1024000" \ "" \ "" \ "" \ "" \ "" \ ""; /* check for valid document */ GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); /* parse header and first status */ SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 4, "The message ID must be 4."); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); /* parse second status with item and meta info */ sml_fail_unless(smlParserGetStatus(parser, &status, &error), "%s", GET_ERROR_MESSAGE(error)); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); /* cleanup */ smlParserFree(parser); } END_TEST /* Funambol (e.g. scheduleworld.com) embeds Item in to Status * including the Meta element with MaxObjSize for example. * The Item element can include an empty Data element too. * If WBXML encoded communication is used then an empty Data * element usually looks like "". */ START_TEST (xml_parser_item_with_meta_and_short_empty_data_in_status) { const char *data = "" \ "1.1SyncML/1.1401424john.doe@example.com1234567http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==" \ "" \ "" \ "140SyncHdr" \ "http://sync.scheduleworld.com/funambol/ds/X4zeEsMHK05KPXYs3jD-MA==" \ "jku@vili200" \ "" \ "" \ "2" \ "4" \ "10" \ "Alert" \ "200" \ "" \ "1024000" \ "" \ "" \ "" \ "" \ "" \ ""; /* check for valid document */ GError *error = NULL; SmlParser *parser = start_parser(data, &error); sml_fail_unless(parser != NULL, "%s", GET_ERROR_MESSAGE(error)); /* parse header and first status */ SmlHeader *header = NULL; SmlCred *cred = NULL; sml_fail_unless(smlParserGetHeader(parser, &header, &cred, &error), NULL); sml_fail_unless(header != NULL, NULL); sml_fail_unless(cred == NULL, NULL); sml_fail_unless(error == NULL, NULL); sml_fail_unless(header->messageID == 4, "The message ID must be 4."); smlHeaderFree(header); SmlStatus *status = NULL; sml_fail_unless(smlParserGetStatus(parser, &status, &error), NULL); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); /* parse second status with item and meta info */ sml_fail_unless(smlParserGetStatus(parser, &status, &error), "%s", GET_ERROR_MESSAGE(error)); sml_fail_unless(status != NULL, NULL); sml_fail_unless(error == NULL, NULL); smlStatusUnref(status); /* cleanup */ smlParserFree(parser); } END_TEST @SML_TESTCASE_CODE@