PostGIS  2.4.9dev-r@@SVN_REVISION@@

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 59 of file raster/test/cunit/cu_tester.c.

References cu_error_reporter(), default_rt_allocator(), default_rt_deallocator(), default_rt_info_handler(), default_rt_reallocator(), default_rt_warning_handler(), rt_set_handlers(), and setupfuncs.

60 {
61  int index;
62  char *suite_name;
63  CU_pSuite suite_to_run;
64  char *test_name;
65  CU_pTest test_to_run;
66  CU_ErrorCode errCode = 0;
67  CU_pTestRegistry registry;
68  int num_run;
69  int num_failed;
70  PG_SuiteSetup *setupfunc = setupfuncs;
71 
72  /* install the custom error handler */
74 
82  );
83 
84  /* initialize the CUnit test registry */
85  if (CUE_SUCCESS != CU_initialize_registry())
86  {
87  errCode = CU_get_error();
88  printf(" Error attempting to initialize registry: %d. See CUError.h for error code list.\n", errCode);
89  return errCode;
90  }
91 
92  /* Register all the test suites. */
93  while ( *setupfunc )
94  {
95  (*setupfunc)();
96  setupfunc++;
97  }
98 
99  /* Run all tests using the CUnit Basic interface */
100  CU_basic_set_mode(CU_BRM_VERBOSE);
101  if (argc <= 1)
102  {
103  errCode = CU_basic_run_tests();
104  }
105  else
106  {
107  /* NOTE: The cunit functions used here (CU_get_registry, CU_get_suite_by_name, and CU_get_test_by_name) are
108  * listed with the following warning: "Internal CUnit system functions. Should not be routinely called by users."
109  * However, there didn't seem to be any other way to get tests by name, so we're calling them. */
110  registry = CU_get_registry();
111  for (index = 1; index < argc; index++)
112  {
113  suite_name = argv[index];
114  test_name = NULL;
115  suite_to_run = CU_get_suite_by_name(suite_name, registry);
116  if (NULL == suite_to_run)
117  {
118  /* See if it's a test name instead of a suite name. */
119  suite_to_run = registry->pSuite;
120  while (suite_to_run != NULL)
121  {
122  test_to_run = CU_get_test_by_name(suite_name, suite_to_run);
123  if (test_to_run != NULL)
124  {
125  /* It was a test name. */
126  test_name = suite_name;
127  suite_name = suite_to_run->pName;
128  break;
129  }
130  suite_to_run = suite_to_run->pNext;
131  }
132  }
133  if (suite_to_run == NULL)
134  {
135  printf("\n'%s' does not appear to be either a suite name or a test name.\n\n", suite_name);
136  }
137  else
138  {
139  if (test_name != NULL)
140  {
141  /* Run only this test. */
142  printf("\nRunning test '%s' in suite '%s'.\n", test_name, suite_name);
143  /* This should be CU_basic_run_test, but that method is broken, see:
144  * https://sourceforge.net/tracker/?func=detail&aid=2851925&group_id=32992&atid=407088
145  * This one doesn't output anything for success, so we have to do it manually. */
146  errCode = CU_run_test(suite_to_run, test_to_run);
147  if (errCode != CUE_SUCCESS)
148  {
149  printf(" Error attempting to run tests: %d. See CUError.h for error code list.\n", errCode);
150  }
151  else
152  {
153  num_run = CU_get_number_of_asserts();
154  num_failed = CU_get_number_of_failures();
155  printf("\n %s - asserts - %3d passed, %3d failed, %3d total.\n\n",
156  (0 == num_failed ? "PASSED" : "FAILED"), (num_run - num_failed), num_failed, num_run);
157  }
158  }
159  else
160  {
161  /* Run all the tests in the suite. */
162  printf("\nRunning all tests in suite '%s'.\n", suite_name);
163  /* This should be CU_basic_run_suite, but that method is broken, see:
164  * https://sourceforge.net/tracker/?func=detail&aid=2851925&group_id=32992&atid=407088
165  * This one doesn't output anything for success, so we have to do it manually. */
166  errCode = CU_run_suite(suite_to_run);
167  if (errCode != CUE_SUCCESS)
168  {
169  printf(" Error attempting to run tests: %d. See CUError.h for error code list.\n", errCode);
170  }
171  else
172  {
173  num_run = CU_get_number_of_tests_run();
174  num_failed = CU_get_number_of_tests_failed();
175  printf("\n %s - tests - %3d passed, %3d failed, %3d total.\n",
176  (0 == num_failed ? "PASSED" : "FAILED"), (num_run - num_failed), num_failed, num_run);
177  num_run = CU_get_number_of_asserts();
178  num_failed = CU_get_number_of_failures();
179  printf(" - asserts - %3d passed, %3d failed, %3d total.\n\n",
180  (num_run - num_failed), num_failed, num_run);
181  }
182  }
183  }
184  }
185  /* Presumably if the CU_basic_run_[test|suite] functions worked, we wouldn't have to do this. */
186  CU_basic_show_failures(CU_get_failure_list());
187  printf("\n\n"); /* basic_show_failures leaves off line breaks. */
188  }
189  num_failed = CU_get_number_of_failures();
190  CU_cleanup_registry();
191  return num_failed;
192 }
static void cu_error_reporter(const char *fmt, va_list ap)
CUnit error handler Log message in a global var instead of printing in stderr.
void default_rt_info_handler(const char *fmt, va_list ap)
Definition: rt_context.c:93
void rt_set_handlers(rt_allocator allocator, rt_reallocator reallocator, rt_deallocator deallocator, rt_message_handler error_handler, rt_message_handler info_handler, rt_message_handler warning_handler)
This function is called when the PostgreSQL backend is taking care of the memory and we want to use p...
Definition: rt_context.c:151
void * default_rt_reallocator(void *mem, size_t size)
Definition: rt_context.c:54
PG_SuiteSetup setupfuncs[]
void default_rt_warning_handler(const char *fmt, va_list ap)
Definition: rt_context.c:80
void(* PG_SuiteSetup)(void)
void default_rt_deallocator(void *mem)
Definition: rt_context.c:61
void * default_rt_allocator(size_t size)
The default memory/logging handlers installed by lwgeom_install_default_allocators() ...
Definition: rt_context.c:47
void(*) typedef void(*) voi lwgeom_set_handlers)(lwallocator allocator, lwreallocator reallocator, lwfreeor freeor, lwreporter errorreporter, lwreporter noticereporter)
Install custom memory management and error handling functions you want your application to use...
Here is the call graph for this function: