2006-08-18 Aaron Bockover <abockover@novell.com>
[mono.git] / eglib / test / driver.c
1 /*
2  * EGLib Unit Test Driver
3  *
4  * Author:
5  *   Aaron Bockover (abockover@novell.com)
6  *
7  * (C) 2006 Novell, Inc.
8  *
9  * Permission is hereby granted, free of charge, to any person obtaining
10  * a copy of this software and associated documentation files (the
11  * "Software"), to deal in the Software without restriction, including
12  * without limitation the rights to use, copy, modify, merge, publish,
13  * distribute, sublicense, and/or sell copies of the Software, and to
14  * permit persons to whom the Software is furnished to do so, subject to
15  * the following conditions:
16  *
17  * The above copyright notice and this permission notice shall be
18  * included in all copies or substantial portions of the Software.
19  *
20  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
21  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
22  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
23  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
24  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
25  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
26  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
27  */
28  
29 #include <stdio.h>
30 #include <glib.h>
31
32 #include "test.h"
33 #include "tests.h"
34
35 static void print_help(char *s)
36 {
37         gint i;
38         
39         printf("Usage: %s [options] [iterations [test1 test2 ... testN]]\n\n", s);
40         printf(" options are:\n");
41         printf("   --help      show this help\n\n");
42         printf(" iterations:   number of times to run tests\n");
43         printf(" test1..testN  name of test to run (all run by default)\n\n");
44         printf(" available tests:\n");
45
46         for(i = 0; test_groups[i].name != NULL; i++) {
47                 printf("   %s\n", test_groups[i].name);
48         }
49
50         printf("\n");
51 }
52
53 gint main(gint argc, gchar **argv)
54 {
55         gint i, j, k, iterations = 1, tests_to_run_count = 0;
56         gchar **tests_to_run = NULL;
57         
58         if(argc > 1) {
59                 for(i = 1; i < argc; i++) {
60                         if(strcmp(argv[i], "--help") == 0) {
61                                 print_help(argv[0]);
62                                 return 1;
63                         }
64                 }
65         
66                 iterations = atoi(argv[1]);
67                 tests_to_run_count = argc - 2;
68
69                 if(tests_to_run_count > 0) {
70                         tests_to_run = (gchar **)g_new0(gchar *, tests_to_run_count + 1);
71
72                         for(i = 0; i < tests_to_run_count; i++) {
73                                 tests_to_run[i] = argv[i + 2];
74                         }
75
76                         tests_to_run[tests_to_run_count] = NULL;
77                 }
78         }
79
80         for(i = 0; i < iterations; i++) {
81                 for(j = 0; test_groups[j].name != NULL; j++) {
82                         gboolean run = TRUE;
83                         
84                         if(tests_to_run != NULL) {
85                                 run = FALSE;
86                                 for(k = 0; tests_to_run[k] != NULL; k++) {
87                                         if(strcmp(tests_to_run[k], test_groups[j].name) == 0) {
88                                                 run = TRUE;
89                                                 break;
90                                         }
91                                 }
92                         }
93                         
94                         if(run) {
95                                 run_group(&(test_groups[j]));
96                         }
97                 }
98         }
99
100         if(tests_to_run != NULL) {
101                 g_free(tests_to_run);
102         }
103
104         return 0;
105 }
106