os/ossrv/glib/tsrc/BC/src/closure-marshal.c
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     1 /* GObject - GLib Type, Object, Parameter and Signal Library
     2  * Copyright (C) 2001, 2003 Red Hat, Inc.
     3  *
     4  * This library is free software; you can redistribute it and/or
     5  * modify it under the terms of the GNU Lesser General Public
     6  * License as published by the Free Software Foundation; either
     7  * version 2 of the License, or (at your option) any later version.
     8  *
     9  * This library is distributed in the hope that it will be useful,
    10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
    11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    12  * Lesser General Public License for more details.
    13  *
    14  * You should have received a copy of the GNU Lesser General
    15  * Public License along with this library; if not, write to the
    16  * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
    17  * Boston, MA 02111-1307, USA.
    18  */
    19 
    20 #undef G_DISABLE_ASSERT
    21 #undef G_LOG_DOMAIN
    22 
    23 #undef G_DISABLE_ASSERT
    24 #undef G_DISABLE_CHECKS
    25 #undef G_DISABLE_CAST_CHECKS
    26 
    27 #include <string.h>
    28 
    29 #include <glib-object.h>
    30 
    31 #include "testcommon.h"
    32 
    33 #ifdef SYMBIAN
    34 #include "mrt2_glib2_test.h"
    35 #endif /*SYMBIAN*/
    36 
    37 
    38 /* Tests for all cclosure_marshal APIs */
    39 
    40 /*
    41  * TestObject, a parent class for TestObject
    42  */
    43 #define TEST_TYPE_OBJECT          (test_object_get_type ())
    44 typedef struct _TestObject        TestObject;
    45 typedef struct _TestObjectClass   TestObjectClass;
    46 
    47 typedef struct 
    48 {
    49    int a;
    50    char c;		
    51 	
    52 }TestInputClass;
    53 
    54 struct _TestObject
    55 {
    56    GObject parent_instance;
    57 };
    58 
    59 struct _TestObjectClass
    60 {
    61   GObjectClass parent_class;
    62 
    63   void   (*test_signal1) (TestObject *tobject,
    64 			    gint        param);
    65   
    66   //flags as parameter == ulong
    67   gboolean  (*test_signal2) (TestObject *tobject,
    68 			    gulong        param);
    69   
    70   void  (*test_signal3) (TestObject *tobject,
    71 			    gpointer      param);
    72 			    
    73   void (*test_signal4) (TestObject *tobject,
    74 			    gchar      param);   
    75 			    
    76   void (*test_signal5) (TestObject *tobject,
    77 			    gdouble    param);  
    78   
    79   //enum == long		    
    80   void (*test_signal6) (TestObject *tobject,
    81 			    glong    param);    			    
    82 
    83   void (*test_signal7) (TestObject *tobject,
    84 			    gulong    param);    	
    85 			    
    86   void (*test_signal8) (TestObject *tobject,
    87 			    gfloat    param);   				    		    
    88 
    89   void (*test_signal9) (TestObject *tobject,
    90 			    glong    param);  
    91 			    
    92   //object
    93   void (*test_signal10) (TestObject *tobject,
    94 			    GObject  *param);  
    95 			     				  
    96   //pointer
    97   void (*test_signal11) (TestObject *tobject,
    98 			    gpointer  param); 		     				  	    		    
    99 			    
   100   void (*test_signal12) (TestObject *tobject,
   101 			    gchar*  param); 		     				  	    		    
   102   			    
   103   void (*test_signal13) (TestObject *tobject,
   104 			    guchar  param); 
   105 			    
   106   void (*test_signal14) (TestObject *tobject,
   107 			    guint  param); 		
   108   
   109   void (*test_signal15) (TestObject *tobject,
   110 			    gulong  param); 					    	    		     				  	    		    
   111 
   112   void (*test_signal16) (TestObject *tobject,
   113 			    guint  param1,
   114 			    gpointer param2); 					    	    		     				  	    		    
   115 
   116   void (*test_signal17) (TestObject *tobject,
   117 			    GParamSpec *param); 					    	    		     				  	    		    
   118 };
   119 
   120 static GType test_object_get_type (void);
   121 
   122 /* Test input for Enums */
   123 enum
   124 {
   125    TEST_ENUM1,
   126    TEST_ENUM2
   127 };
   128 
   129 //VOID__BOOLEAN
   130 void
   131 test_object_real_signal1 (TestObject *tobject,
   132 			  gint        param)
   133 {
   134   g_assert(((gint)param == 10));
   135 }
   136 
   137 //BOOLEAN__FLAGS
   138 gboolean
   139 test_object_signal2_callback_before (TestObject *tobject,
   140 				     gulong        param)
   141 {
   142   switch (param)
   143     {
   144     case 1: return TRUE;
   145     case 2: return FALSE;
   146     case 3: return FALSE;
   147     case 4: return FALSE;
   148     }
   149 
   150   g_assert_not_reached ();
   151   return FALSE;
   152 }
   153 
   154 gboolean
   155 test_object_real_signal2 (TestObject *tobject,
   156 			  gulong        param)
   157 {
   158   switch (param)
   159     {
   160     case 1: g_assert_not_reached (); return FALSE;
   161     case 2: return TRUE;
   162     case 3: return FALSE;
   163     case 4: return FALSE;
   164     }
   165   
   166   g_assert_not_reached ();
   167   return FALSE;
   168 }
   169 
   170 gboolean
   171 test_object_signal2_callback_after (TestObject *tobject,
   172 				     gulong        param)
   173 {
   174   switch (param)
   175     {
   176     case 1: g_assert_not_reached (); return FALSE;
   177     case 2: g_assert_not_reached (); return FALSE;
   178     case 3: return TRUE;
   179     case 4: return FALSE;
   180     }
   181       
   182   g_assert_not_reached ();
   183   return FALSE;
   184 }
   185 
   186 //VOID__BOXED
   187 void
   188 test_object_real_signal3 (TestObject *tobject,
   189 			  gpointer        param)
   190 {
   191   g_assert((strcmp(param, "test-string") == 0));
   192 }
   193 
   194 //VOID__CHAR
   195 void
   196 test_object_real_signal4 (TestObject *tobject,
   197 	    	  gchar        param)
   198 {
   199   g_assert(((gchar)param == 'A'));  
   200 }
   201 
   202 //VOID__DOUBLE
   203 void
   204 test_object_real_signal5 (TestObject *tobject,
   205 	    	  gdouble       param)
   206 {
   207   g_assert(((gdouble)param == 2500000));  
   208 }
   209 
   210  //VOID__ENUM
   211 void
   212 test_object_real_signal6 (TestObject *tobject,
   213 	    	  glong       param)
   214 {
   215   g_assert(((glong)param == TEST_ENUM2));  
   216 }
   217  
   218 //VOID__FLAGS
   219 void
   220 test_object_real_signal7 (TestObject *tobject,
   221 	    	  gulong       param)
   222 {
   223   g_assert(((gulong)param == 1980l));  
   224 }
   225 
   226 //VOID__FLOAT
   227 void
   228 test_object_real_signal8 (TestObject *tobject,
   229 	    	  gfloat       param)
   230 {
   231   g_assert(((gfloat)param == 11.23f));    
   232 }
   233 
   234 //VOID__LONG
   235 void
   236 test_object_real_signal9 (TestObject *tobject,
   237 	    	  glong       param)
   238 {
   239   g_assert(((glong)param == -748l));   
   240 }
   241 
   242 //VOID__OBJECT
   243 void
   244 test_object_real_signal10 (TestObject *tobject,
   245 	    	   GObject  *param)
   246 {  
   247   g_assert(G_IS_OBJECT(param) == TRUE);  
   248 }
   249 
   250 //VOID__STRING
   251 void
   252 test_object_real_signal12 (TestObject *tobject,
   253 	    	  gchar*      param)
   254 {  
   255   g_assert((strcmp(param, "string_input") == 0));  
   256 }
   257 
   258 //VOID__UCHAR
   259 void
   260 test_object_real_signal13 (TestObject *tobject,
   261 	    	  guchar      param)
   262 {  
   263   g_assert(param == '>');  
   264 }
   265 
   266 
   267 //VOID__UINT
   268 void
   269 test_object_real_signal14 (TestObject *tobject,
   270 	    	  guint     param)
   271 {  
   272   g_assert(param == 10000);  
   273 }
   274 
   275 //VOID__UINT_POINTER
   276 void
   277 test_object_real_signal16 (TestObject *tobject,
   278 	    	  guint     param1,
   279 	    	  gpointer  param2)
   280 {  
   281   g_assert((param1 == 10000) && (strcmp(param2, "test-string") == 0));  
   282 }
   283 
   284 //VOID__PARAM
   285 void
   286 test_object_real_signal17 (TestObject *tobject,
   287 	    	  GParamSpec      *param)	    	  
   288 {  
   289   g_assert(G_IS_PARAM_SPEC(param) == TRUE);
   290   g_assert(!strcmp(param->_nick , "Hello"));
   291   g_assert (!strcmp(param->name , "String1"));  
   292 }
   293 
   294 //Class init function
   295 static void
   296 test_object_class_init (TestObjectClass *class)
   297 {
   298   class->test_signal1 = test_object_real_signal1;
   299   class->test_signal2 = test_object_real_signal2;
   300   class->test_signal3 = test_object_real_signal3;
   301   class->test_signal4 = test_object_real_signal4;
   302   class->test_signal5 = test_object_real_signal5;
   303   class->test_signal6 = test_object_real_signal6;
   304   class->test_signal7 = test_object_real_signal7;
   305   class->test_signal8 = test_object_real_signal8;
   306   class->test_signal9 = test_object_real_signal9;  
   307   class->test_signal10 = test_object_real_signal10;  
   308   class->test_signal11= test_object_real_signal3; //since both are doing the same
   309   class->test_signal12= test_object_real_signal12;
   310   class->test_signal13= test_object_real_signal13;
   311   class->test_signal14= test_object_real_signal14;
   312   class->test_signal15= test_object_real_signal7; //both are doing the same comparison
   313   class->test_signal16= test_object_real_signal16; 
   314   class->test_signal17= test_object_real_signal17; 
   315   
   316   g_signal_new ("test-signal1",
   317 		G_OBJECT_CLASS_TYPE (class),
   318 		G_SIGNAL_RUN_LAST,
   319 		G_STRUCT_OFFSET (TestObjectClass, test_signal1),
   320 		NULL, NULL,
   321 		g_cclosure_marshal_VOID__BOOLEAN ,
   322 		G_TYPE_NONE, 1, G_TYPE_INT);
   323   
   324   g_signal_new ("test-signal2",
   325 		G_OBJECT_CLASS_TYPE (class),
   326 		G_SIGNAL_RUN_LAST,
   327 		G_STRUCT_OFFSET (TestObjectClass, test_signal2),
   328 		g_signal_accumulator_true_handled, NULL,
   329 		g_cclosure_marshal_BOOLEAN__FLAGS,
   330 		G_TYPE_BOOLEAN, 1, G_TYPE_ULONG);
   331 		
   332   g_signal_new ("test-signal3",
   333 		G_OBJECT_CLASS_TYPE (class),
   334 		G_SIGNAL_RUN_LAST,
   335 		G_STRUCT_OFFSET (TestObjectClass, test_signal3),
   336 		NULL, NULL,
   337 		g_cclosure_marshal_VOID__BOXED,
   338 		G_TYPE_NONE, 1, G_TYPE_POINTER);
   339 		
   340   g_signal_new ("test-signal4",
   341 		G_OBJECT_CLASS_TYPE (class),
   342 		G_SIGNAL_RUN_LAST,
   343 		G_STRUCT_OFFSET (TestObjectClass, test_signal4),
   344 		NULL, NULL,
   345 		g_cclosure_marshal_VOID__CHAR,
   346 		G_TYPE_NONE, 1, G_TYPE_CHAR);
   347 
   348   g_signal_new ("test-signal5",
   349 		G_OBJECT_CLASS_TYPE (class),
   350 		G_SIGNAL_RUN_LAST,
   351 		G_STRUCT_OFFSET (TestObjectClass, test_signal5),
   352 		NULL, NULL,
   353 		g_cclosure_marshal_VOID__DOUBLE,
   354 		G_TYPE_NONE, 1, G_TYPE_DOUBLE);
   355 
   356   g_signal_new ("test-signal6",
   357 		G_OBJECT_CLASS_TYPE (class),
   358 		G_SIGNAL_RUN_LAST,
   359 		G_STRUCT_OFFSET (TestObjectClass, test_signal6),
   360 		NULL, NULL,
   361 		g_cclosure_marshal_VOID__ENUM,
   362 		G_TYPE_NONE, 1, G_TYPE_LONG);
   363 
   364   g_signal_new ("test-signal7",
   365 		G_OBJECT_CLASS_TYPE (class),
   366 		G_SIGNAL_RUN_LAST,
   367 		G_STRUCT_OFFSET (TestObjectClass, test_signal7),
   368 		NULL, NULL,
   369 		g_cclosure_marshal_VOID__FLAGS,
   370 		G_TYPE_NONE, 1, G_TYPE_ULONG);		
   371 			
   372   g_signal_new ("test-signal8",
   373 		G_OBJECT_CLASS_TYPE (class),
   374 		G_SIGNAL_RUN_LAST,
   375 		G_STRUCT_OFFSET (TestObjectClass, test_signal8),
   376 		NULL, NULL,
   377 		g_cclosure_marshal_VOID__FLOAT,
   378 		G_TYPE_NONE, 1, G_TYPE_FLOAT);		
   379 		
   380   g_signal_new ("test-signal9",
   381 		G_OBJECT_CLASS_TYPE (class),
   382 		G_SIGNAL_RUN_LAST,
   383 		G_STRUCT_OFFSET (TestObjectClass, test_signal9),
   384 		NULL, NULL,
   385 		g_cclosure_marshal_VOID__LONG,
   386 		G_TYPE_NONE, 1, G_TYPE_LONG);
   387 		
   388   g_signal_new ("test-signal10",
   389 		G_OBJECT_CLASS_TYPE (class),
   390 		G_SIGNAL_RUN_LAST,
   391 		G_STRUCT_OFFSET (TestObjectClass, test_signal10),
   392 		NULL, NULL,
   393 		g_cclosure_marshal_VOID__OBJECT,
   394 		G_TYPE_NONE, 1, TEST_TYPE_OBJECT);	
   395 		
   396    g_signal_new ("test-signal11",
   397 		G_OBJECT_CLASS_TYPE (class),
   398 		G_SIGNAL_RUN_LAST,
   399 		G_STRUCT_OFFSET (TestObjectClass, test_signal11),
   400 		NULL, NULL,
   401 		g_cclosure_marshal_VOID__POINTER,
   402 		G_TYPE_NONE, 1, G_TYPE_POINTER);
   403 		
   404    g_signal_new ("test-signal12",
   405 		G_OBJECT_CLASS_TYPE (class),
   406 		G_SIGNAL_RUN_LAST,
   407 		G_STRUCT_OFFSET (TestObjectClass, test_signal12),
   408 		NULL, NULL,
   409 		g_cclosure_marshal_VOID__STRING,
   410 		G_TYPE_NONE, 1, G_TYPE_STRING);	
   411 		
   412 	g_signal_new ("test-signal13",
   413 		G_OBJECT_CLASS_TYPE (class),
   414 		G_SIGNAL_RUN_LAST,
   415 		G_STRUCT_OFFSET (TestObjectClass, test_signal13),
   416 		NULL, NULL,
   417 		g_cclosure_marshal_VOID__UCHAR,
   418 		G_TYPE_NONE, 1, G_TYPE_UCHAR);	
   419 		
   420    	g_signal_new ("test-signal14",
   421 		G_OBJECT_CLASS_TYPE (class),
   422 		G_SIGNAL_RUN_LAST,
   423 		G_STRUCT_OFFSET (TestObjectClass, test_signal14),
   424 		NULL, NULL,
   425 		g_cclosure_marshal_VOID__UINT,
   426 		G_TYPE_NONE, 1, G_TYPE_UINT);
   427 	
   428 	g_signal_new ("test-signal15",
   429 		G_OBJECT_CLASS_TYPE (class),
   430 		G_SIGNAL_RUN_LAST,
   431 		G_STRUCT_OFFSET (TestObjectClass, test_signal15),
   432 		NULL, NULL,
   433 		g_cclosure_marshal_VOID__ULONG,
   434 		G_TYPE_NONE, 1, G_TYPE_ULONG);
   435 		
   436     g_signal_new ("test-signal16",
   437 		G_OBJECT_CLASS_TYPE (class),
   438 		G_SIGNAL_RUN_LAST,
   439 		G_STRUCT_OFFSET (TestObjectClass, test_signal16),
   440 		NULL, NULL,
   441 		g_cclosure_marshal_VOID__UINT_POINTER,
   442 		G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_POINTER);	
   443 		
   444 	g_signal_new ("test-signal17",
   445 		G_OBJECT_CLASS_TYPE (class),
   446 		G_SIGNAL_RUN_LAST,
   447 		G_STRUCT_OFFSET (TestObjectClass, test_signal17),
   448 		NULL, NULL,
   449 		g_cclosure_marshal_VOID__PARAM,
   450 		G_TYPE_NONE, 1, G_TYPE_PARAM);											
   451 }
   452 
   453 static DEFINE_TYPE(TestObject, test_object,
   454 		   test_object_class_init, NULL, NULL,
   455 		   G_TYPE_OBJECT)		   
   456 
   457 int
   458 main (int   argc,
   459       char *argv[])
   460 {
   461   TestObject *object;  
   462   gboolean bool_result;
   463   gpointer i_string = "test-string";
   464   gchar    i_char   = 'A';
   465   gdouble  i_double = 2500000; //typically 8 bytes  
   466   gfloat   i_float  = 11.23f;
   467   gulong   i_ulong  = 1980l;
   468   glong    i_long 	= -748l;
   469   gchar*   i_char_string = "string_input";
   470   guchar   i_uchar  ='>'; 
   471   TestObject *i_input_obj;  	
   472   GParamFlags i_flags;
   473   GParamSpec* i_paramSpec;	
   474   	
   475   #ifdef SYMBIAN
   476   g_log_set_handler (NULL,  G_LOG_FLAG_FATAL| G_LOG_FLAG_RECURSION | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING | G_LOG_LEVEL_MESSAGE | G_LOG_LEVEL_INFO | G_LOG_LEVEL_DEBUG, &mrtLogHandler, NULL);
   477   #endif /*SYMBIAN*/
   478 	  
   479 
   480   /*g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
   481 			  G_LOG_LEVEL_WARNING |
   482 			  G_LOG_LEVEL_CRITICAL);*/
   483   g_type_init ();
   484 
   485   object = g_object_new (TEST_TYPE_OBJECT, NULL);
   486 
   487   //VOID__BOOLEAN  
   488   g_signal_emit_by_name (object, "test-signal1", 10, 0);  
   489   
   490 
   491   //BOOLEAN__FLAGS
   492   g_signal_connect (object, "test-signal2",
   493 		    G_CALLBACK (test_object_signal2_callback_before), NULL);
   494   g_signal_connect_after (object, "test-signal2",
   495 			  G_CALLBACK (test_object_signal2_callback_after), NULL);
   496   
   497   bool_result = FALSE;
   498   g_signal_emit_by_name (object, "test-signal2", 1, &bool_result);
   499   g_assert (bool_result == TRUE);
   500   bool_result = FALSE;
   501   g_signal_emit_by_name (object, "test-signal2", 2, &bool_result);
   502   g_assert (bool_result == TRUE);
   503   bool_result = FALSE;
   504   g_signal_emit_by_name (object, "test-signal2", 3, &bool_result);
   505   g_assert (bool_result == TRUE);
   506   bool_result = TRUE;
   507   g_signal_emit_by_name (object, "test-signal2", 4, &bool_result);
   508   g_assert (bool_result == FALSE);
   509   
   510  
   511   //VOID__BOXED
   512   g_signal_emit_by_name (object, "test-signal3", i_string, NULL);
   513   
   514   //VOID__CHAR
   515   g_signal_emit_by_name (object, "test-signal4", i_char, NULL);
   516   
   517   //VOID__DOUBLE
   518   g_signal_emit_by_name (object, "test-signal5", i_double, NULL);
   519   
   520   //VOID__ENUM
   521   g_signal_emit_by_name (object, "test-signal6", TEST_ENUM2, NULL);
   522 
   523   //VOID__FLAGS
   524   g_signal_emit_by_name (object, "test-signal7", i_ulong, NULL);
   525   
   526   //VOID__FLOAT
   527   g_signal_emit_by_name (object, "test-signal8", i_float, NULL);
   528   
   529   //VOID__FLOAT
   530   g_signal_emit_by_name (object, "test-signal9", i_long, NULL);  
   531   
   532   //VOID__OBJECT
   533   i_input_obj = g_object_new (TEST_TYPE_OBJECT, NULL);
   534   g_signal_emit_by_name (object, "test-signal10", i_input_obj, NULL);  
   535   
   536   //VOID__POINTER
   537   g_signal_emit_by_name (object, "test-signal11", i_string, NULL);
   538   
   539   //VOID__STRING
   540   g_signal_emit_by_name (object, "test-signal12", i_char_string, NULL);
   541   
   542   //VOID__UCHAR  
   543   g_signal_emit_by_name (object, "test-signal13", i_uchar, NULL);
   544   
   545   //VOID__UINT
   546   g_signal_emit_by_name (object, "test-signal14", 10000, NULL);
   547   
   548   //VOID__ULONG
   549   g_signal_emit_by_name (object, "test-signal15", i_ulong, NULL);
   550   
   551   //VOID_UNIT__POINTER
   552   g_signal_emit_by_name (object, "test-signal16", 10000, i_string,NULL);  
   553  
   554   //VOID__PARAM  
   555   i_paramSpec = g_param_spec_uchar("String1","Hello","World", 0,100,10, i_flags);
   556   g_signal_emit_by_name (object, "test-signal17", i_paramSpec, NULL);   
   557   
   558   #if SYMBIAN
   559   testResultXml("closure-marshal");
   560   #endif
   561   
   562   return 0;
   563 }