apicompatanamdw/bcdrivers/os/ossrv/glib/src/closure-marshal.c
author shrivatsa
Thu, 22 Apr 2010 17:15:08 +0530
changeset 2 0cb2248d0edc
permissions -rw-r--r--
New BC drivers added are - Phonebook, Speed dial utility control, MMS Client MTM, Plugin Bio control, Organizer, Startup List Management, Flash viewer framework, Network Status, Profile engine wrapper, Drm helper, OMA Drm CAF Agent, SIP, Connection settings & UI, BLID, Landmarks, Send UI, Media Fetch, WebServices, Cellular services, Device services, Graphics, Kernel and OSSrv, XML Services, Multimedia.

/* GObject - GLib Type, Object, Parameter and Signal Library
 * Copyright (C) 2001, 2003 Red Hat, Inc.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General
 * Public License along with this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
 * Boston, MA 02111-1307, USA.
 */

#undef G_DISABLE_ASSERT
#undef G_LOG_DOMAIN

#undef G_DISABLE_ASSERT
#undef G_DISABLE_CHECKS
#undef G_DISABLE_CAST_CHECKS

#include <string.h>

#include <glib-object.h>

#include "testcommon.h"

#ifdef SYMBIAN
#include "mrt2_glib2_test.h"
#endif /*SYMBIAN*/


/* Tests for all cclosure_marshal APIs */

/*
 * TestObject, a parent class for TestObject
 */
#define TEST_TYPE_OBJECT          (test_object_get_type ())
typedef struct _TestObject        TestObject;
typedef struct _TestObjectClass   TestObjectClass;

typedef struct 
{
   int a;
   char c;		
	
}TestInputClass;

struct _TestObject
{
   GObject parent_instance;
};

struct _TestObjectClass
{
  GObjectClass parent_class;

  void   (*test_signal1) (TestObject *tobject,
			    gint        param);
  
  //flags as parameter == ulong
  gboolean  (*test_signal2) (TestObject *tobject,
			    gulong        param);
  
  void  (*test_signal3) (TestObject *tobject,
			    gpointer      param);
			    
  void (*test_signal4) (TestObject *tobject,
			    gchar      param);   
			    
  void (*test_signal5) (TestObject *tobject,
			    gdouble    param);  
  
  //enum == long		    
  void (*test_signal6) (TestObject *tobject,
			    glong    param);    			    

  void (*test_signal7) (TestObject *tobject,
			    gulong    param);    	
			    
  void (*test_signal8) (TestObject *tobject,
			    gfloat    param);   				    		    

  void (*test_signal9) (TestObject *tobject,
			    glong    param);  
			    
  //object
  void (*test_signal10) (TestObject *tobject,
			    GObject  *param);  
			     				  
  //pointer
  void (*test_signal11) (TestObject *tobject,
			    gpointer  param); 		     				  	    		    
			    
  void (*test_signal12) (TestObject *tobject,
			    gchar*  param); 		     				  	    		    
  			    
  void (*test_signal13) (TestObject *tobject,
			    guchar  param); 
			    
  void (*test_signal14) (TestObject *tobject,
			    guint  param); 		
  
  void (*test_signal15) (TestObject *tobject,
			    gulong  param); 					    	    		     				  	    		    

  void (*test_signal16) (TestObject *tobject,
			    guint  param1,
			    gpointer param2); 					    	    		     				  	    		    

  void (*test_signal17) (TestObject *tobject,
			    GParamSpec *param); 					    	    		     				  	    		    
};

static GType test_object_get_type (void);

/* Test input for Enums */
enum
{
   TEST_ENUM1,
   TEST_ENUM2
};

//VOID__BOOLEAN
void
test_object_real_signal1 (TestObject *tobject,
			  gint        param)
{
  g_assert(((gint)param == 10));
}

//BOOLEAN__FLAGS
gboolean
test_object_signal2_callback_before (TestObject *tobject,
				     gulong        param)
{
  switch (param)
    {
    case 1: return TRUE;
    case 2: return FALSE;
    case 3: return FALSE;
    case 4: return FALSE;
    }

  g_assert_not_reached ();
  return FALSE;
}

gboolean
test_object_real_signal2 (TestObject *tobject,
			  gulong        param)
{
  switch (param)
    {
    case 1: g_assert_not_reached (); return FALSE;
    case 2: return TRUE;
    case 3: return FALSE;
    case 4: return FALSE;
    }
  
  g_assert_not_reached ();
  return FALSE;
}

gboolean
test_object_signal2_callback_after (TestObject *tobject,
				     gulong        param)
{
  switch (param)
    {
    case 1: g_assert_not_reached (); return FALSE;
    case 2: g_assert_not_reached (); return FALSE;
    case 3: return TRUE;
    case 4: return FALSE;
    }
      
  g_assert_not_reached ();
  return FALSE;
}

//VOID__BOXED
void
test_object_real_signal3 (TestObject *tobject,
			  gpointer        param)
{
  g_assert((strcmp(param, "test-string") == 0));
}

//VOID__CHAR
void
test_object_real_signal4 (TestObject *tobject,
	    	  gchar        param)
{
  g_assert(((gchar)param == 'A'));  
}

//VOID__DOUBLE
void
test_object_real_signal5 (TestObject *tobject,
	    	  gdouble       param)
{
  g_assert(((gdouble)param == 2500000));  
}

 //VOID__ENUM
void
test_object_real_signal6 (TestObject *tobject,
	    	  glong       param)
{
  g_assert(((glong)param == TEST_ENUM2));  
}
 
//VOID__FLAGS
void
test_object_real_signal7 (TestObject *tobject,
	    	  gulong       param)
{
  g_assert(((gulong)param == 1980l));  
}

//VOID__FLOAT
void
test_object_real_signal8 (TestObject *tobject,
	    	  gfloat       param)
{
  g_assert(((gfloat)param == 11.23f));    
}

//VOID__LONG
void
test_object_real_signal9 (TestObject *tobject,
	    	  glong       param)
{
  g_assert(((glong)param == -748l));   
}

//VOID__OBJECT
void
test_object_real_signal10 (TestObject *tobject,
	    	   GObject  *param)
{  
  g_assert(G_IS_OBJECT(param) == TRUE);  
}

//VOID__STRING
void
test_object_real_signal12 (TestObject *tobject,
	    	  gchar*      param)
{  
  g_assert((strcmp(param, "string_input") == 0));  
}

//VOID__UCHAR
void
test_object_real_signal13 (TestObject *tobject,
	    	  guchar      param)
{  
  g_assert(param == '>');  
}


//VOID__UINT
void
test_object_real_signal14 (TestObject *tobject,
	    	  guint     param)
{  
  g_assert(param == 10000);  
}

//VOID__UINT_POINTER
void
test_object_real_signal16 (TestObject *tobject,
	    	  guint     param1,
	    	  gpointer  param2)
{  
  g_assert((param1 == 10000) && (strcmp(param2, "test-string") == 0));  
}

//VOID__PARAM
void
test_object_real_signal17 (TestObject *tobject,
	    	  GParamSpec      *param)	    	  
{  
  g_assert(G_IS_PARAM_SPEC(param) == TRUE);
  g_assert(!strcmp(param->_nick , "Hello"));
  g_assert (!strcmp(param->name , "String1"));  
}

//Class init function
static void
test_object_class_init (TestObjectClass *class)
{
  class->test_signal1 = test_object_real_signal1;
  class->test_signal2 = test_object_real_signal2;
  class->test_signal3 = test_object_real_signal3;
  class->test_signal4 = test_object_real_signal4;
  class->test_signal5 = test_object_real_signal5;
  class->test_signal6 = test_object_real_signal6;
  class->test_signal7 = test_object_real_signal7;
  class->test_signal8 = test_object_real_signal8;
  class->test_signal9 = test_object_real_signal9;  
  class->test_signal10 = test_object_real_signal10;  
  class->test_signal11= test_object_real_signal3; //since both are doing the same
  class->test_signal12= test_object_real_signal12;
  class->test_signal13= test_object_real_signal13;
  class->test_signal14= test_object_real_signal14;
  class->test_signal15= test_object_real_signal7; //both are doing the same comparison
  class->test_signal16= test_object_real_signal16; 
  class->test_signal17= test_object_real_signal17; 
  
  g_signal_new ("test-signal1",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal1),
		NULL, NULL,
		g_cclosure_marshal_VOID__BOOLEAN ,
		G_TYPE_NONE, 1, G_TYPE_INT);
  
  g_signal_new ("test-signal2",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal2),
		g_signal_accumulator_true_handled, NULL,
		g_cclosure_marshal_BOOLEAN__FLAGS,
		G_TYPE_BOOLEAN, 1, G_TYPE_ULONG);
		
  g_signal_new ("test-signal3",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal3),
		NULL, NULL,
		g_cclosure_marshal_VOID__BOXED,
		G_TYPE_NONE, 1, G_TYPE_POINTER);
		
  g_signal_new ("test-signal4",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal4),
		NULL, NULL,
		g_cclosure_marshal_VOID__CHAR,
		G_TYPE_NONE, 1, G_TYPE_CHAR);

  g_signal_new ("test-signal5",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal5),
		NULL, NULL,
		g_cclosure_marshal_VOID__DOUBLE,
		G_TYPE_NONE, 1, G_TYPE_DOUBLE);

  g_signal_new ("test-signal6",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal6),
		NULL, NULL,
		g_cclosure_marshal_VOID__ENUM,
		G_TYPE_NONE, 1, G_TYPE_LONG);

  g_signal_new ("test-signal7",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal7),
		NULL, NULL,
		g_cclosure_marshal_VOID__FLAGS,
		G_TYPE_NONE, 1, G_TYPE_ULONG);		
			
  g_signal_new ("test-signal8",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal8),
		NULL, NULL,
		g_cclosure_marshal_VOID__FLOAT,
		G_TYPE_NONE, 1, G_TYPE_FLOAT);		
		
  g_signal_new ("test-signal9",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal9),
		NULL, NULL,
		g_cclosure_marshal_VOID__LONG,
		G_TYPE_NONE, 1, G_TYPE_LONG);
		
  g_signal_new ("test-signal10",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal10),
		NULL, NULL,
		g_cclosure_marshal_VOID__OBJECT,
		G_TYPE_NONE, 1, TEST_TYPE_OBJECT);	
		
   g_signal_new ("test-signal11",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal11),
		NULL, NULL,
		g_cclosure_marshal_VOID__POINTER,
		G_TYPE_NONE, 1, G_TYPE_POINTER);
		
   g_signal_new ("test-signal12",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal12),
		NULL, NULL,
		g_cclosure_marshal_VOID__STRING,
		G_TYPE_NONE, 1, G_TYPE_STRING);	
		
	g_signal_new ("test-signal13",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal13),
		NULL, NULL,
		g_cclosure_marshal_VOID__UCHAR,
		G_TYPE_NONE, 1, G_TYPE_UCHAR);	
		
   	g_signal_new ("test-signal14",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal14),
		NULL, NULL,
		g_cclosure_marshal_VOID__UINT,
		G_TYPE_NONE, 1, G_TYPE_UINT);
	
	g_signal_new ("test-signal15",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal15),
		NULL, NULL,
		g_cclosure_marshal_VOID__ULONG,
		G_TYPE_NONE, 1, G_TYPE_ULONG);
		
    g_signal_new ("test-signal16",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal16),
		NULL, NULL,
		g_cclosure_marshal_VOID__UINT_POINTER,
		G_TYPE_NONE, 2, G_TYPE_UINT, G_TYPE_POINTER);	
		
	g_signal_new ("test-signal17",
		G_OBJECT_CLASS_TYPE (class),
		G_SIGNAL_RUN_LAST,
		G_STRUCT_OFFSET (TestObjectClass, test_signal17),
		NULL, NULL,
		g_cclosure_marshal_VOID__PARAM,
		G_TYPE_NONE, 1, G_TYPE_PARAM);											
}

static DEFINE_TYPE(TestObject, test_object,
		   test_object_class_init, NULL, NULL,
		   G_TYPE_OBJECT)		   

int
main (int   argc,
      char *argv[])
{
  TestObject *object;  
  gboolean bool_result;
  gpointer i_string = "test-string";
  gchar    i_char   = 'A';
  gdouble  i_double = 2500000; //typically 8 bytes  
  gfloat   i_float  = 11.23f;
  gulong   i_ulong  = 1980l;
  glong    i_long 	= -748l;
  gchar*   i_char_string = "string_input";
  guchar   i_uchar  ='>'; 
  TestObject *i_input_obj;  	
  GParamFlags i_flags;
  GParamSpec* i_paramSpec;	
  	
  #ifdef SYMBIAN
  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);
  #endif /*SYMBIAN*/
	  

  /*g_log_set_always_fatal (g_log_set_always_fatal (G_LOG_FATAL_MASK) |
			  G_LOG_LEVEL_WARNING |
			  G_LOG_LEVEL_CRITICAL);*/
  g_type_init ();

  object = g_object_new (TEST_TYPE_OBJECT, NULL);

  //VOID__BOOLEAN  
  g_signal_emit_by_name (object, "test-signal1", 10, 0);  
  

  //BOOLEAN__FLAGS
  g_signal_connect (object, "test-signal2",
		    G_CALLBACK (test_object_signal2_callback_before), NULL);
  g_signal_connect_after (object, "test-signal2",
			  G_CALLBACK (test_object_signal2_callback_after), NULL);
  
  bool_result = FALSE;
  g_signal_emit_by_name (object, "test-signal2", 1, &bool_result);
  g_assert (bool_result == TRUE);
  bool_result = FALSE;
  g_signal_emit_by_name (object, "test-signal2", 2, &bool_result);
  g_assert (bool_result == TRUE);
  bool_result = FALSE;
  g_signal_emit_by_name (object, "test-signal2", 3, &bool_result);
  g_assert (bool_result == TRUE);
  bool_result = TRUE;
  g_signal_emit_by_name (object, "test-signal2", 4, &bool_result);
  g_assert (bool_result == FALSE);
  
 
  //VOID__BOXED
  g_signal_emit_by_name (object, "test-signal3", i_string, NULL);
  
  //VOID__CHAR
  g_signal_emit_by_name (object, "test-signal4", i_char, NULL);
  
  //VOID__DOUBLE
  g_signal_emit_by_name (object, "test-signal5", i_double, NULL);
  
  //VOID__ENUM
  g_signal_emit_by_name (object, "test-signal6", TEST_ENUM2, NULL);

  //VOID__FLAGS
  g_signal_emit_by_name (object, "test-signal7", i_ulong, NULL);
  
  //VOID__FLOAT
  g_signal_emit_by_name (object, "test-signal8", i_float, NULL);
  
  //VOID__FLOAT
  g_signal_emit_by_name (object, "test-signal9", i_long, NULL);  
  
  //VOID__OBJECT
  i_input_obj = g_object_new (TEST_TYPE_OBJECT, NULL);
  g_signal_emit_by_name (object, "test-signal10", i_input_obj, NULL);  
  
  //VOID__POINTER
  g_signal_emit_by_name (object, "test-signal11", i_string, NULL);
  
  //VOID__STRING
  g_signal_emit_by_name (object, "test-signal12", i_char_string, NULL);
  
  //VOID__UCHAR  
  g_signal_emit_by_name (object, "test-signal13", i_uchar, NULL);
  
  //VOID__UINT
  g_signal_emit_by_name (object, "test-signal14", 10000, NULL);
  
  //VOID__ULONG
  g_signal_emit_by_name (object, "test-signal15", i_ulong, NULL);
  
  //VOID_UNIT__POINTER
  g_signal_emit_by_name (object, "test-signal16", 10000, i_string,NULL);  
 
  //VOID__PARAM  
  i_paramSpec = g_param_spec_uchar("String1","Hello","World", 0,100,10, i_flags);
  g_signal_emit_by_name (object, "test-signal17", i_paramSpec, NULL);   
  
  #if SYMBIAN
  testResultXml("closure-marshal");
  #endif
  
  return 0;
}