1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3  *  Copyright (C) 2007-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_TEST_H__
21 #define __CUT_TEST_H__
22 
23 #include <setjmp.h>
24 
25 #include <glib-object.h>
26 
27 #include <cutter/cut-private.h>
28 #include <cutter/cut-test-context.h>
29 
30 G_BEGIN_DECLS
31 
32 #define CUT_TYPE_TEST            (cut_test_get_type ())
33 #define CUT_TEST(obj)            (G_TYPE_CHECK_INSTANCE_CAST ((obj), CUT_TYPE_TEST, CutTest))
34 #define CUT_TEST_CLASS(klass)    (G_TYPE_CHECK_CLASS_CAST ((klass), CUT_TYPE_TEST, CutTestClass))
35 #define CUT_IS_TEST(obj)         (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CUT_TYPE_TEST))
36 #define CUT_IS_TEST_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CUT_TYPE_TEST))
37 #define CUT_TEST_GET_CLASS(obj)  (G_TYPE_INSTANCE_GET_CLASS((obj), CUT_TYPE_TEST, CutTestClass))
38 
39 typedef struct _CutTestClass    CutTestClass;
40 
41 typedef struct _CutTestResultClass    CutTestResultClass;
42 
43 typedef void    (*CutTestFunction)     (void);
44 typedef void    (*CutAttributesSetupFunction)(void);
45 typedef void    (*CutSetupFunction)    (void);
46 typedef void    (*CutTeardownFunction) (void);
47 
48 struct _CutTest
49 {
50     GObject object;
51 };
52 
53 struct _CutTestClass
54 {
55     GObjectClass parent_class;
56 
57     void (*start)          (CutTest        *test,
58                             CutTestContext *context);
59     void (*pass_assertion) (CutTest        *test,
60                             CutTestContext *context);
61     void (*success)        (CutTest        *test,
62                             CutTestContext *context,
63                             CutTestResult  *result);
64     void (*failure)        (CutTest        *test,
65                             CutTestContext *context,
66                             CutTestResult  *result);
67     void (*error)          (CutTest        *test,
68                             CutTestContext *context,
69                             CutTestResult  *result);
70     void (*pending)        (CutTest        *test,
71                             CutTestContext *context,
72                             CutTestResult  *result);
73     void (*notification)   (CutTest        *test,
74                             CutTestContext *context,
75                             CutTestResult  *result);
76     void (*omission)       (CutTest        *test,
77                             CutTestContext *context,
78                             CutTestResult  *result);
79     void (*crash)          (CutTest        *test,
80                             CutTestContext *context,
81                             CutTestResult  *result);
82     void (*complete)       (CutTest        *test,
83                             CutTestContext *context,
84                             gboolean        success);
85 
86     gdouble      (*get_elapsed)  (CutTest *test);
87     void         (*set_elapsed)  (CutTest *test, gdouble elapsed);
88 
89     gboolean     (*run)          (CutTest        *test,
90                                   CutTestContext *test_context,
91                                   CutRunContext  *run_context);
92     void         (*long_jump)    (CutTest        *test,
93                                   jmp_buf        *jump_buffer,
94                                   gint            value);
95     gboolean     (*is_available) (CutTest        *test,
96                                   CutTestContext *test_context,
97                                   CutRunContext  *run_context);
98     void         (*invoke)       (CutTest        *test,
99                                   CutTestContext *test_context,
100                                   CutRunContext  *run_context);
101     void         (*emit_result_signal)
102                                  (CutTest        *test,
103                                   CutTestContext *test_context,
104                                   CutTestResult  *result);
105 };
106 
107 GType        cut_test_get_type  (void) G_GNUC_CONST;
108 
109 CutTest     *cut_test_new                 (const gchar    *name,
110                                            CutTestFunction function);
111 CutTest     *cut_test_new_empty           (void);
112 gboolean     cut_test_run                 (CutTest        *test,
113                                            CutTestContext *test_context,
114                                            CutRunContext  *run_context);
115 
116 void         cut_test_long_jump           (CutTest        *test,
117                                            jmp_buf        *jump_buffer,
118                                            gint            value);
119 gboolean     cut_test_is_own_jump_buffer  (CutTest        *test,
120                                            jmp_buf        *jump_buffer);
121 
122 const gchar *cut_test_get_name            (CutTest     *test);
123 void         cut_test_set_name            (CutTest     *test,
124                                            const gchar *name);
125 const gchar *cut_test_get_full_name       (CutTest     *test);
126 const gchar *cut_test_get_description     (CutTest     *test);
127 void         cut_test_get_start_time      (CutTest     *test,
128                                            GTimeVal    *start_time);
129 void         cut_test_set_start_time      (CutTest     *test,
130                                            GTimeVal    *start_time);
131 gdouble      cut_test_get_elapsed         (CutTest     *test);
132 void         cut_test_set_elapsed         (CutTest     *test,
133                                            gdouble      elapsed);
134 const gchar *cut_test_get_attribute       (CutTest     *test,
135                                            const gchar *name);
136 void         cut_test_set_attribute       (CutTest     *test,
137                                            const gchar *name,
138                                            const gchar *value);
139 GHashTable  *cut_test_get_attributes      (CutTest     *test);
140 const gchar *cut_test_get_base_directory  (CutTest     *test);
141 void         cut_test_set_base_directory  (CutTest     *test,
142                                            const gchar *base_directory);
143 
144 gchar       *cut_test_to_xml              (CutTest     *test);
145 void         cut_test_to_xml_string       (CutTest     *test,
146                                            GString     *string,
147                                            guint        indent);
148 
149 void         cut_test_set_result_elapsed  (CutTest       *test,
150                                            CutTestResult *result);
151 void         cut_test_emit_result_signal  (CutTest     *test,
152                                            CutTestContext *test_context,
153                                            CutTestResult *result);
154 
155 G_END_DECLS
156 
157 #endif /* __CUT_TEST_H__ */
158 
159 /*
160 vi:ts=4:nowrap:ai:expandtab:sw=4
161 */
162