1 /*
2  * This file is part of gtkD.
3  *
4  * gtkD is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU Lesser General Public License
6  * as published by the Free Software Foundation; either version 3
7  * of the License, or (at your option) any later version, with
8  * some exceptions, please read the COPYING file.
9  *
10  * gtkD 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 gtkD; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
18  */
19  
20 // generated automatically - do not change
21 // find conversion definition on APILookup.txt
22 // implement new conversion functionalities on the wrap.utils pakage
23 
24 /*
25  * Conversion parameters:
26  * inFile  = GTestDBus.html
27  * outPack = gio
28  * outFile = TestDBus
29  * strct   = GTestDBus
30  * realStrct=
31  * ctorStrct=
32  * clss    = TestDBus
33  * interf  = 
34  * class Code: No
35  * interface Code: No
36  * template for:
37  * extend  = 
38  * implements:
39  * prefixes:
40  * 	- g_test_dbus_
41  * omit structs:
42  * omit prefixes:
43  * omit code:
44  * omit signals:
45  * imports:
46  * 	- glib.Str
47  * structWrap:
48  * module aliases:
49  * local aliases:
50  * overrides:
51  */
52 
53 module gio.TestDBus;
54 
55 public  import gtkc.giotypes;
56 
57 private import gtkc.gio;
58 private import glib.ConstructionException;
59 private import gobject.ObjectG;
60 
61 
62 private import glib.Str;
63 
64 
65 
66 private import gobject.ObjectG;
67 
68 /**
69  * A helper class for testing code which uses D-Bus without touching the user's
70  * session bus.
71  *
72  * Creating unit tests using GTestDBus
73  *
74  *  Testing of D-Bus services can be tricky because normally we only ever run
75  *  D-Bus services over an existing instance of the D-Bus daemon thus we
76  *  usually don't activate D-Bus services that are not yet installed into the
77  *  target system. The GTestDBus object makes this easier for us by taking care
78  *  of the lower level tasks such as running a private D-Bus daemon and looking
79  *  up uninstalled services in customizable locations, typically in your source code tree.
80  *
81  *  The first thing you will need is a separate service description file for the
82  *  D-Bus daemon. Typically a 'services' subdirectory of your 'tests' directory
83  *  is a good place to put this file.
84  *
85  *  The service file should list your service along with an absolute path to the
86  *  uninstalled service executable in your source tree. Using autotools we would
87  *  achieve this by adding a file such as 'my-server.service.in' in the services
88  *  directory and have it processed by configure.
89  *
90  * $(DDOC_COMMENT example)
91  *
92  *  You will also need to indicate this service directory in your test
93  *  fixtures, so you will need to pass the path while compiling your
94  *  test cases. Typically this is done with autotools with an added
95  *  preprocessor flag specified to compile your tests such as:
96  *
97  * $(DDOC_COMMENT example)
98  *
99  *  Once you have a service definition file which is local to your source tree,
100  *  you can proceed to setup a GTest fixture using the GTestDBus scaffolding.
101  *
102  * $(DDOC_COMMENT example)
103  *
104  *  Note that these examples only deal with isolating the D-Bus aspect of your
105  *  service. To successfully run isolated unit tests on your service you may need
106  *  some additional modifications to your test case fixture. For example; if your
107  *  service uses GSettings and installs a schema then it is important that your test service
108  *  not load the schema in the ordinary installed location (chances are that your service
109  *  and schema files are not yet installed, or worse; there is an older version of the
110  *  schema file sitting in the install location).
111  *
112  *  Most of the time we can work around these obstacles using the environment. Since the
113  *  environment is inherited by the D-Bus daemon created by GTestDBus and then in turn
114  *  inherited by any services the D-Bus daemon activates, using the setup routine for your
115  *  fixture is a practical place to help sandbox your runtime environment. For the rather
116  *  typical GSettings case we can work around this by setting GSETTINGS_SCHEMA_DIR to the
117  *  in tree directory holding your schemas in the above fixture_setup() routine.
118  *
119  *  The GSettings schemas need to be locally pre-compiled for this to work. This can be achieved
120  *  by compiling the schemas locally as a step before running test cases, an autotools setup might
121  *  do the following in the directory holding schemas:
122  *
123  * $(DDOC_COMMENT example)
124  */
125 public class TestDBus : ObjectG
126 {
127 	
128 	/** the main Gtk struct */
129 	protected GTestDBus* gTestDBus;
130 	
131 	
132 	public GTestDBus* getTestDBusStruct()
133 	{
134 		return gTestDBus;
135 	}
136 	
137 	
138 	/** the main Gtk struct as a void* */
139 	protected override void* getStruct()
140 	{
141 		return cast(void*)gTestDBus;
142 	}
143 	
144 	/**
145 	 * Sets our main struct and passes it to the parent class
146 	 */
147 	public this (GTestDBus* gTestDBus)
148 	{
149 		super(cast(GObject*)gTestDBus);
150 		this.gTestDBus = gTestDBus;
151 	}
152 	
153 	protected override void setStruct(GObject* obj)
154 	{
155 		super.setStruct(obj);
156 		gTestDBus = cast(GTestDBus*)obj;
157 	}
158 	
159 	/**
160 	 */
161 	
162 	/**
163 	 * Create a new GTestDBus object.
164 	 * Params:
165 	 * flags = a GTestDBusFlags
166 	 * Throws: ConstructionException GTK+ fails to create the object.
167 	 */
168 	public this (GTestDBusFlags flags)
169 	{
170 		// GTestDBus * g_test_dbus_new (GTestDBusFlags flags);
171 		auto p = g_test_dbus_new(flags);
172 		if(p is null)
173 		{
174 			throw new ConstructionException("null returned by g_test_dbus_new(flags)");
175 		}
176 		this(cast(GTestDBus*) p);
177 	}
178 	
179 	/**
180 	 * Gets the flags of the GTestDBus object.
181 	 * Returns: the value of "flags" property
182 	 */
183 	public GTestDBusFlags getFlags()
184 	{
185 		// GTestDBusFlags g_test_dbus_get_flags (GTestDBus *self);
186 		return g_test_dbus_get_flags(gTestDBus);
187 	}
188 	
189 	/**
190 	 * Get the address on which dbus-daemon is running. if g_test_dbus_up() has not
191 	 * been called yet, NULL is returned. This can be used with
192 	 * g_dbus_connection_new_for_address()
193 	 * Returns: the address of the bus, or NULL.
194 	 */
195 	public string getBusAddress()
196 	{
197 		// const gchar * g_test_dbus_get_bus_address (GTestDBus *self);
198 		return Str.toString(g_test_dbus_get_bus_address(gTestDBus));
199 	}
200 	
201 	/**
202 	 * Add a path where dbus-daemon will lookup for .services files. This can't be
203 	 * called after g_test_dbus_up().
204 	 * Params:
205 	 * path = path to a directory containing .service files
206 	 */
207 	public void addServiceDir(string path)
208 	{
209 		// void g_test_dbus_add_service_dir (GTestDBus *self,  const gchar *path);
210 		g_test_dbus_add_service_dir(gTestDBus, Str.toStringz(path));
211 	}
212 	
213 	/**
214 	 * Start a dbus-daemon instance and set DBUS_SESSION_BUS_ADDRESS. After this
215 	 * call, it is safe for unit tests to start sending messages on the session bus.
216 	 * If this function is called from setup callback of g_test_add(),
217 	 * g_test_dbus_down() must be called in its teardown callback.
218 	 * If this function is called from unit test's main(), then g_test_dbus_down()
219 	 * must be called after g_test_run().
220 	 */
221 	public void up()
222 	{
223 		// void g_test_dbus_up (GTestDBus *self);
224 		g_test_dbus_up(gTestDBus);
225 	}
226 	
227 	/**
228 	 * Stop the session bus started by g_test_dbus_up().
229 	 * Unlike g_test_dbus_down(), this won't verify the GDBusConnection
230 	 * singleton returned by g_bus_get() or g_bus_get_sync() is destroyed. Unit
231 	 * tests wanting to verify behaviour after the session bus has been stopped
232 	 * can use this function but should still call g_test_dbus_down() when done.
233 	 */
234 	public void stop()
235 	{
236 		// void g_test_dbus_stop (GTestDBus *self);
237 		g_test_dbus_stop(gTestDBus);
238 	}
239 	
240 	/**
241 	 * Stop the session bus started by g_test_dbus_up().
242 	 * This will wait for the singleton returned by g_bus_get() or g_bus_get_sync()
243 	 * is destroyed. This is done to ensure that the next unit test won't get a
244 	 * leaked singleton from this test.
245 	 */
246 	public void down()
247 	{
248 		// void g_test_dbus_down (GTestDBus *self);
249 		g_test_dbus_down(gTestDBus);
250 	}
251 	
252 	/**
253 	 * Unset DISPLAY and DBUS_SESSION_BUS_ADDRESS env variables to ensure the test
254 	 * won't use user's session bus.
255 	 * This is useful for unit tests that want to verify behaviour when no session
256 	 * bus is running. It is not necessary to call this if unit test already calls
257 	 * g_test_dbus_up() before acquiring the session bus.
258 	 */
259 	public static void unset()
260 	{
261 		// void g_test_dbus_unset (void);
262 		g_test_dbus_unset();
263 	}
264 }