1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  *  Copyright (C) 2008-2014  Kouhei Sutou <kou@clear-code.com>
4  *
5  *  This library is free software: you can redistribute it and/or modify
6  *  it under the terms of the GNU Lesser General Public License as published by
7  *  the Free Software Foundation, either version 3 of the License, or
8  *  (at your option) any later version.
9  *
10  *  This library is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *  GNU Lesser General Public License for more details.
14  *
15  *  You should have received a copy of the GNU Lesser General Public License
16  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
17  *
18  */
19 
20 #ifndef __CUT_RUN_CONTEXT_H__
21 #define __CUT_RUN_CONTEXT_H__
22 
23 #include <glib-object.h>
24 
25 #include <cutter/cut-test-suite.h>
26 #include <cutter/cut-test-iterator.h>
27 #include <cutter/cut-loader-customizer.h>
28 #include <cutter/cut-private.h>
29 
30 G_BEGIN_DECLS
31 
32 #define CUT_TYPE_RUN_CONTEXT            (cut_run_context_get_type ())
33 #define CUT_RUN_CONTEXT(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_RUN_CONTEXT, CutRunContext))
34 #define CUT_RUN_CONTEXT_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_RUN_CONTEXT, CutRunContextClass))
35 #define CUT_IS_RUN_CONTEXT(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_RUN_CONTEXT))
36 #define CUT_IS_RUN_CONTEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_RUN_CONTEXT))
37 #define CUT_RUN_CONTEXT_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_RUN_CONTEXT, CutRunContextClass))
38 
39 typedef enum {
40     CUT_ORDER_NONE_SPECIFIED,
41     CUT_ORDER_NAME_ASCENDING,
42     CUT_ORDER_NAME_DESCENDING
43 } CutOrder;
44 
45 typedef struct _CutRunContextClass    CutRunContextClass;
46 
47 struct _CutRunContext
48 {
49     GObject object;
50 };
51 
52 struct _CutRunContextClass
53 {
54     GObjectClass parent_class;
55 
56     void (*start_run)           (CutRunContext  *context);
57     void (*ready_test_suite)    (CutRunContext  *context,
58                                  CutTestSuite   *test_suite,
59                                  guint           n_test_cases,
60                                  guint           n_tests);
61     void (*start_test_suite)    (CutRunContext  *context,
62                                  CutTestSuite   *test_suite);
63     void (*ready_test_case)     (CutRunContext  *context,
64                                  CutTestCase    *test_case,
65                                  guint           n_tests);
66     void (*start_test_case)     (CutRunContext  *context,
67                                  CutTestCase    *test_case);
68     void (*ready_test_iterator) (CutRunContext  *context,
69                                  CutTestIterator *test_iterator,
70                                  guint           n_tests);
71     void (*start_test_iterator) (CutRunContext  *context,
72                                  CutTestIterator *test_iterator);
73     void (*start_test)          (CutRunContext  *context,
74                                  CutTest        *test,
75                                  CutTestContext *test_context);
76     void (*start_iterated_test) (CutRunContext  *context,
77                                  CutIteratedTest *iterated_test,
78                                  CutTestContext *test_context);
79 
80     void (*pass_assertion)      (CutRunContext  *context,
81                                  CutTest        *test,
82                                  CutTestContext *test_context);
83     void (*success_test)        (CutRunContext  *context,
84                                  CutTest        *test,
85                                  CutTestContext *test_context,
86                                  CutTestResult  *result);
87     void (*failure_test)        (CutRunContext  *context,
88                                  CutTest        *test,
89                                  CutTestContext *test_context,
90                                  CutTestResult  *result);
91     void (*error_test)          (CutRunContext  *context,
92                                  CutTest        *test,
93                                  CutTestContext *test_context,
94                                  CutTestResult  *result);
95     void (*pending_test)        (CutRunContext  *context,
96                                  CutTest        *test,
97                                  CutTestContext *test_context,
98                                  CutTestResult  *result);
99     void (*notification_test)   (CutRunContext  *context,
100                                  CutTest        *test,
101                                  CutTestContext *test_context,
102                                  CutTestResult  *result);
103     void (*omission_test)       (CutRunContext  *context,
104                                  CutTest        *test,
105                                  CutTestContext *test_context,
106                                  CutTestResult  *result);
107     void (*crash_test)          (CutRunContext  *context,
108                                  CutTest        *test,
109                                  CutTestContext *test_context,
110                                  CutTestResult  *result);
111     void (*complete_test)       (CutRunContext  *context,
112                                  CutTest        *test,
113                                  CutTestContext *test_context,
114                                  gboolean        success);
115     void (*complete_iterated_test)
116                                 (CutRunContext  *context,
117                                  CutIteratedTest *iterated_test,
118                                  CutTestContext *test_context,
119                                  gboolean        success);
120 
121     void (*success_test_iterator)
122                                 (CutRunContext  *context,
123                                  CutTestIterator *test_iterator,
124                                  CutTestResult  *result);
125     void (*failure_test_iterator)
126                                 (CutRunContext  *context,
127                                  CutTestIterator *test_iterator,
128                                  CutTestResult  *result);
129     void (*error_test_iterator) (CutRunContext  *context,
130                                  CutTestIterator *test_iterator,
131                                  CutTestResult  *result);
132     void (*pending_test_iterator)
133                                 (CutRunContext  *context,
134                                  CutTestIterator *test_iterator,
135                                  CutTestResult  *result);
136     void (*notification_test_iterator)
137                                 (CutRunContext  *context,
138                                  CutTestIterator *test_iterator,
139                                  CutTestResult  *result);
140     void (*omission_test_iterator)
141                                 (CutRunContext  *context,
142                                  CutTestIterator *test_iterator,
143                                  CutTestResult  *result);
144     void (*crash_test_iterator) (CutRunContext  *context,
145                                  CutTestIterator *test_iterator,
146                                  CutTestResult  *result);
147     void (*complete_test_iterator)
148                                 (CutRunContext  *context,
149                                  CutTestIterator *test_iterator,
150                                  gboolean        success);
151 
152     void (*success_test_case)   (CutRunContext  *context,
153                                  CutTestCase    *test_case,
154                                  CutTestResult  *result);
155     void (*failure_test_case)   (CutRunContext  *context,
156                                  CutTestCase    *test_case,
157                                  CutTestResult  *result);
158     void (*error_test_case)     (CutRunContext  *context,
159                                  CutTestCase    *test_case,
160                                  CutTestResult  *result);
161     void (*pending_test_case)   (CutRunContext  *context,
162                                  CutTestCase    *test_case,
163                                  CutTestResult  *result);
164     void (*notification_test_case)
165                                 (CutRunContext  *context,
166                                  CutTestCase    *test_case,
167                                  CutTestResult  *result);
168     void (*omission_test_case)  (CutRunContext  *context,
169                                  CutTestCase    *test_case,
170                                  CutTestResult  *result);
171     void (*crash_test_case)     (CutRunContext  *context,
172                                  CutTestCase    *test_case,
173                                  CutTestResult  *result);
174 
175     void (*failure_in_test_case)(CutRunContext  *context,
176                                  CutTestCase    *test_case,
177                                  CutTestResult  *result);
178     void (*error_in_test_case)  (CutRunContext  *context,
179                                  CutTestCase    *test_case,
180                                  CutTestResult  *result);
181     void (*pending_in_test_case)(CutRunContext  *context,
182                                  CutTestCase    *test_case,
183                                  CutTestResult  *result);
184     void (*notification_in_test_case)
185                                 (CutRunContext  *context,
186                                  CutTestCase    *test_case,
187                                  CutTestResult  *result);
188     void (*omission_in_test_case)
189                                 (CutRunContext  *context,
190                                  CutTestCase    *test_case,
191                                  CutTestResult  *result);
192     void (*crash_in_test_case)  (CutRunContext  *context,
193                                  CutTestCase    *test_case,
194                                  CutTestResult  *result);
195 
196     void (*complete_test_case)  (CutRunContext  *context,
197                                  CutTestCase    *test_case,
198                                  gboolean        success);
199 
200     void (*crash_test_suite)    (CutRunContext  *context,
201                                  CutTestSuite   *test_suite,
202                                  CutTestResult  *result);
203 
204     void (*complete_test_suite) (CutRunContext  *context,
205                                  CutTestSuite   *test_suite,
206                                  gboolean        success);
207 
208     void (*complete_run)        (CutRunContext  *context,
209                                  gboolean        success);
210 
211     void (*error)               (CutRunContext  *context,
212                                  GError         *error);
213 };
214 
215 GType          cut_run_context_get_type  (void) G_GNUC_CONST;
216 
217 void           cut_run_context_set_test_directory   (CutRunContext *context,
218                                                      const gchar   *directory);
219 const gchar   *cut_run_context_get_test_directory   (CutRunContext *context);
220 void           cut_run_context_set_source_directory (CutRunContext *context,
221                                                      const gchar   *directory);
222 const gchar   *cut_run_context_get_source_directory (CutRunContext *context);
223 void           cut_run_context_set_log_directory    (CutRunContext *context,
224                                                      const gchar   *directory);
225 const gchar   *cut_run_context_get_log_directory    (CutRunContext *context);
226 
227 void           cut_run_context_set_multi_thread     (CutRunContext *context,
228                                                      gboolean       use_multi_thread);
229 gboolean       cut_run_context_get_multi_thread     (CutRunContext *context);
230 gboolean       cut_run_context_is_multi_thread      (CutRunContext *context);
231 
232 void           cut_run_context_set_max_threads      (CutRunContext *context,
233                                                      gint           max_threads);
234 gint           cut_run_context_get_max_threads      (CutRunContext *context);
235 
236 void           cut_run_context_set_handle_signals   (CutRunContext *context,
237                                                      gboolean       handle_signals);
238 gboolean       cut_run_context_get_handle_signals   (CutRunContext *context);
239 
240 void           cut_run_context_set_exclude_files    (CutRunContext *context,
241                                                      const gchar  **filenames);
242 const gchar  **cut_run_context_get_exclude_files    (CutRunContext *context);
243 void           cut_run_context_set_exclude_directories
244                                                     (CutRunContext *context,
245                                                      const gchar  **directory_names);
246 const gchar  **cut_run_context_get_exclude_directories
247                                                     (CutRunContext *context);
248 void           cut_run_context_set_target_test_case_names
249                                                     (CutRunContext *context,
250                                                      const gchar  **names);
251 const gchar  **cut_run_context_get_target_test_case_names(CutRunContext *context);
252 void           cut_run_context_set_target_test_names(CutRunContext *context,
253                                                      const gchar  **names);
254 const gchar  **cut_run_context_get_target_test_names(CutRunContext *context);
255 void           cut_run_context_add_loader_customizer(CutRunContext *context,
256                                                      CutLoaderCustomizer *customizer);
257 const GList   *cut_run_context_get_loader_customizers
258                                                     (CutRunContext *context);
259 
260 guint          cut_run_context_get_n_tests          (CutRunContext *context);
261 guint          cut_run_context_get_n_successes      (CutRunContext *context);
262 guint          cut_run_context_get_n_assertions     (CutRunContext *context);
263 guint          cut_run_context_get_n_failures       (CutRunContext *context);
264 guint          cut_run_context_get_n_errors         (CutRunContext *context);
265 guint          cut_run_context_get_n_pendings       (CutRunContext *context);
266 guint          cut_run_context_get_n_notifications  (CutRunContext *context);
267 guint          cut_run_context_get_n_omissions      (CutRunContext *context);
268 CutTestResultStatus cut_run_context_get_status      (CutRunContext *context);
269 
270 gdouble        cut_run_context_get_elapsed          (CutRunContext *context);
271 gdouble        cut_run_context_get_total_elapsed    (CutRunContext *context);
272 
273 const GList   *cut_run_context_get_results          (CutRunContext *context);
274 
275 gboolean       cut_run_context_is_crashed           (CutRunContext *context);
276 
277 void           cut_run_context_cancel               (CutRunContext *context);
278 gboolean       cut_run_context_is_canceled          (CutRunContext *context);
279 
280 CutTestSuite  *cut_run_context_create_test_suite    (CutRunContext *context);
281 CutTestSuite  *cut_run_context_get_test_suite       (CutRunContext *context);
282 void           cut_run_context_set_test_suite       (CutRunContext *context,
283                                                      CutTestSuite  *suite);
284 
285 void           cut_run_context_set_test_case_order  (CutRunContext *context,
286                                                      CutOrder       order);
287 CutOrder       cut_run_context_get_test_case_order  (CutRunContext *context);
288 GList         *cut_run_context_sort_test_cases      (CutRunContext *context,
289                                                      GList         *test_cases);
290 
291 void           cut_run_context_add_listener         (CutRunContext *context,
292                                                      CutListener   *listener);
293 void           cut_run_context_remove_listener      (CutRunContext *context,
294                                                      CutListener   *listener);
295 
296 void           cut_run_context_attach_listeners     (CutRunContext *context);
297 void           cut_run_context_detach_listeners     (CutRunContext *context);
298 
299 gchar         *cut_run_context_build_source_filename(CutRunContext *context,
300                                                      const gchar   *filename);
301 
302 gboolean       cut_run_context_start                (CutRunContext *context);
303 void           cut_run_context_start_async          (CutRunContext *context);
304 
305 gboolean       cut_run_context_emit_complete_run    (CutRunContext *context,
306                                                      gboolean       success);
307 void           cut_run_context_emit_error           (CutRunContext *context,
308                                                      GQuark         domain,
309                                                      gint           code,
310                                                      GError        *sub_error,
311                                                      const gchar   *format,
312                                                      ...) G_GNUC_PRINTF(5, 6);
313 
314 void           cut_run_context_set_command_line_args(CutRunContext *context,
315                                                      gchar        **args);
316 const gchar  **cut_run_context_get_command_line_args(CutRunContext *context);
317 
318 void           cut_run_context_delegate_signals     (CutRunContext *context,
319                                                      CutRunContext *other_context);
320 gboolean       cut_run_context_is_completed         (CutRunContext *context);
321 void           cut_run_context_set_fatal_failures   (CutRunContext *context,
322                                                      gboolean       fatal_failures);
323 gboolean       cut_run_context_get_fatal_failures   (CutRunContext *context);
324 void           cut_run_context_set_keep_opening_modules
325                                                     (CutRunContext *context,
326                                                      gboolean       keep_opening);
327 gboolean       cut_run_context_get_keep_opening_modules
328                                                     (CutRunContext *context);
329 void           cut_run_context_set_enable_convenience_attribute_definition
330                                                     (CutRunContext *context,
331                                                      gboolean       enable_convenience_attribute_definition);
332 gboolean       cut_run_context_get_enable_convenience_attribute_definition
333                                                     (CutRunContext *context);
334 
335 void           cut_run_context_set_stop_before_test (CutRunContext *context,
336                                                      gboolean       stop);
337 gboolean       cut_run_context_get_stop_before_test (CutRunContext *context);
338 
339 
340 G_END_DECLS
341 
342 #endif /* __CUT_RUN_CONTEXT_H__ */
343 
344 /*
345 vi:ts=4:nowrap:ai:expandtab:sw=4
346 */
347