Test close signals
This commit is contained in:
		
							parent
							
								
									ae58207f9b
								
							
						
					
					
						commit
						fb483347ed
					
				
							
								
								
									
										95
									
								
								test/dbus.c
									
									
									
									
									
								
							
							
						
						
									
										95
									
								
								test/dbus.c
									
									
									
									
									
								
							| @ -9,6 +9,65 @@ | ||||
| 
 | ||||
| void wake_up_void(void) {  } | ||||
| 
 | ||||
| struct signal_closed { | ||||
|         guint32 id; | ||||
|         guint32 reason; | ||||
|         guint subscription_id; | ||||
|         GDBusConnection *conn; | ||||
| }; | ||||
| 
 | ||||
| void dbus_signal_cb_closed(GDBusConnection *connection, | ||||
|                  const gchar *sender_name, | ||||
|                  const gchar *object_path, | ||||
|                  const gchar *interface_name, | ||||
|                  const gchar *signal_name, | ||||
|                  GVariant *parameters, | ||||
|                  gpointer user_data) | ||||
| { | ||||
|         g_return_if_fail(user_data); | ||||
| 
 | ||||
|         guint32 id; | ||||
|         guint32 reason; | ||||
| 
 | ||||
|         struct signal_closed *sig = (struct signal_closed*) user_data; | ||||
|         g_variant_get(parameters, "(uu)", &id, &reason); | ||||
| 
 | ||||
|         if (id == sig->id) { | ||||
|                 sig->id = id; | ||||
|                 sig->reason = reason; | ||||
|         } | ||||
| } | ||||
| 
 | ||||
| void dbus_signal_subscribe_closed(struct signal_closed *closed) | ||||
| { | ||||
|         assert(closed); | ||||
| 
 | ||||
|         closed->conn = g_bus_get_sync(G_BUS_TYPE_SESSION, NULL, NULL); | ||||
|         closed->subscription_id = | ||||
|                 g_dbus_connection_signal_subscribe( | ||||
|                         closed->conn, | ||||
|                         FDN_NAME, | ||||
|                         FDN_IFAC, | ||||
|                         "NotificationClosed", | ||||
|                         FDN_PATH, | ||||
|                         NULL, | ||||
|                         G_DBUS_SIGNAL_FLAGS_NONE, | ||||
|                         dbus_signal_cb_closed, | ||||
|                         closed, | ||||
|                         NULL); | ||||
| } | ||||
| 
 | ||||
| void dbus_signal_unsubscribe_closed(struct signal_closed *closed) | ||||
| { | ||||
|         assert(closed); | ||||
| 
 | ||||
|         g_dbus_connection_signal_unsubscribe(closed->conn, closed->subscription_id); | ||||
|         g_object_unref(closed->conn); | ||||
| 
 | ||||
|         closed->conn = NULL; | ||||
|         closed->subscription_id = -1; | ||||
| } | ||||
| 
 | ||||
| GVariant *dbus_invoke(const char *method, GVariant *params) | ||||
| { | ||||
|         GDBusConnection *connection_client; | ||||
| @ -268,6 +327,41 @@ TEST test_server_caps(enum markup_mode markup) | ||||
|         PASS(); | ||||
| } | ||||
| 
 | ||||
| TEST test_close_and_signal(void) | ||||
| { | ||||
|         GVariant *data, *ret; | ||||
|         struct dbus_notification *n; | ||||
|         struct signal_closed sig = {0, REASON_MIN-1, -1}; | ||||
| 
 | ||||
|         dbus_signal_subscribe_closed(&sig); | ||||
| 
 | ||||
|         n = dbus_notification_new(); | ||||
|         n->app_name = "dunstteststack"; | ||||
|         n->app_icon = "NONE2"; | ||||
|         n->summary = "Headline for New"; | ||||
|         n->body = "Text"; | ||||
| 
 | ||||
|         dbus_notification_fire(n, &sig.id); | ||||
| 
 | ||||
|         data = g_variant_new("(u)", sig.id); | ||||
|         ret = dbus_invoke("CloseNotification", data); | ||||
| 
 | ||||
|         ASSERT(ret); | ||||
| 
 | ||||
|         uint waiting = 0; | ||||
|         while (sig.reason == REASON_MIN-1 && waiting < 2000) { | ||||
|                 usleep(500); | ||||
|                 waiting++; | ||||
|         } | ||||
| 
 | ||||
|         ASSERT(sig.reason != REASON_MIN-1); | ||||
| 
 | ||||
|         dbus_notification_free(n); | ||||
|         dbus_signal_unsubscribe_closed(&sig); | ||||
|         g_variant_unref(ret); | ||||
|         PASS(); | ||||
| } | ||||
| 
 | ||||
| TEST assert_methodlists_sorted(void) | ||||
| { | ||||
|         for (size_t i = 0; i+1 < G_N_ELEMENTS(methods_fdn); i++) { | ||||
| @ -296,6 +390,7 @@ gpointer run_threaded_tests(gpointer data) | ||||
|         RUN_TESTp(test_server_caps, MARKUP_FULL); | ||||
|         RUN_TESTp(test_server_caps, MARKUP_STRIP); | ||||
|         RUN_TESTp(test_server_caps, MARKUP_NO); | ||||
|         RUN_TEST(test_close_and_signal); | ||||
| 
 | ||||
|         RUN_TEST(assert_methodlists_sorted); | ||||
| 
 | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Benedikt Heine
						Benedikt Heine