summaryrefslogtreecommitdiffstats
path: root/test/error_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'test/error_test.c')
-rw-r--r--test/error_test.c101
1 files changed, 90 insertions, 11 deletions
diff --git a/test/error_test.c b/test/error_test.c
index 2fd6d21..9fff2a8 100644
--- a/test/error_test.c
+++ b/test/error_test.c
@@ -286,6 +286,95 @@ error_stack(void)
return -1;
}
+/*-------------------------------------------------------------------------
+ * Function: long_desc_cb
+ *
+ * Purpose: Callback function to help test long description handling
+ *
+ * Return: Success: 0
+ *
+ * Failure: -1
+ *
+ * Programmer: Quincey Koziol
+ * January 19, 2005
+ *
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+herr_t
+long_desc_cb(unsigned n, const H5E_error_t *err_desc, void* client_data)
+{
+ char *real_desc = (char *)client_data;
+
+ if(err_desc->desc!=NULL && HDstrcmp(err_desc->desc,real_desc)==0)
+ return(0);
+ else
+ return(-1);
+}
+
+
+/*-------------------------------------------------------------------------
+ * Function: test_long_desc
+ *
+ * Purpose: Test long error description handling
+ *
+ * Return: Success: 0
+ *
+ * Failure: -1
+ *
+ * Programmer: Quincey Koziol
+ * January 19, 2005
+ *
+ *
+ * Modifications:
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_long_desc(void)
+{
+ char *format="Testing very long description string, %s";
+ char *long_desc;
+ char *full_desc;
+ size_t u;
+ const char *test_FUNC="test_long_desc";
+
+ /* Allocate space for the error description info */
+ if((long_desc=HDmalloc(LONG_DESC_SIZE))==NULL) TEST_ERROR;
+ if((full_desc=HDmalloc(LONG_DESC_SIZE+128))==NULL) TEST_ERROR;
+
+ /* Create the long part of the error description */
+ for(u=0; u<LONG_DESC_SIZE; u++)
+ long_desc[u]='A'+(u%26);
+ long_desc[LONG_DESC_SIZE-1]='\0';
+
+ /* Clear the default error stack */
+ if(H5Eclear_stack(H5E_DEFAULT)<0) TEST_ERROR;
+
+ /* Push an error with a long description */
+ if(H5Epush_stack(H5E_DEFAULT, __FILE__, test_FUNC, __LINE__, ERR_CLS, ERR_MAJ_TEST, ERR_MIN_SUBROUTINE, format, long_desc)<0) TEST_ERROR;
+
+ /* Create the string that should be in the description */
+ HDsnprintf(full_desc,LONG_DESC_SIZE+128,format,long_desc);
+
+ /* Make certain that the description is correct */
+ if(H5Ewalk_stack(H5E_DEFAULT, H5E_WALK_UPWARD, long_desc_cb, full_desc)<0) TEST_ERROR;
+
+ /* Clear the default error stack again */
+ if(H5Eclear_stack(H5E_DEFAULT)<0) TEST_ERROR;
+
+ HDfree(long_desc);
+ HDfree(full_desc);
+ return(0);
+
+error:
+ if(long_desc) HDfree(long_desc);
+ if(full_desc) HDfree(full_desc);
+ return(-1);
+}
+
/*-------------------------------------------------------------------------
* Function: dump_error
@@ -431,8 +520,6 @@ main(void)
hid_t file, fapl;
hid_t estack_id;
char filename[1024];
- char *long_desc;
- size_t u;
const char *FUNC_main="main";
fprintf(stderr, " This program tests the Error API. There're supposed to be some error messages\n");
@@ -476,15 +563,7 @@ main(void)
}
/* Test pushing a very long error description */
- if((long_desc=HDmalloc(LONG_DESC_SIZE))==NULL) TEST_ERROR;
-
- for(u=0; u<LONG_DESC_SIZE; u++)
- long_desc[u]='A'+(u%26);
- long_desc[LONG_DESC_SIZE-1]='\0';
- if(H5Epush_stack(H5E_DEFAULT, __FILE__, FUNC_main, __LINE__, ERR_CLS, ERR_MAJ_TEST, ERR_MIN_SUBROUTINE,
- "Testing very long description string, %s", long_desc)<0) TEST_ERROR;
- if(H5Eprint_stack(H5P_DEFAULT, stderr)<0) TEST_ERROR;
- HDfree(long_desc);
+ if(test_long_desc()<0) TEST_ERROR;
if (H5Fclose(file)<0) TEST_ERROR ;
h5_cleanup(FILENAME, fapl);