glib/tsrc/BC/tests/refcount/properties2.c
changeset 0 e4d67989cc36
child 72 403e7f6ed6c5
equal deleted inserted replaced
-1:000000000000 0:e4d67989cc36
       
     1 /* Portion Copyright © 2008-09 Nokia Corporation and/or its subsidiary(-ies). All rights reserved. */
       
     2 #include <unistd.h>
       
     3 #include <glib.h>
       
     4 #include <glib-object.h>
       
     5 
       
     6 #include <stdio.h>
       
     7 #ifdef SYMBIAN
       
     8 #include "mrt2_glib2_test.h"
       
     9 #endif /*SYMBIAN*/
       
    10 
       
    11 
       
    12 #define G_TYPE_TEST               (g_test_get_type ())
       
    13 #define G_TEST(test)              (G_TYPE_CHECK_INSTANCE_CAST ((test), G_TYPE_TEST, GTest))
       
    14 #define G_IS_TEST(test)           (G_TYPE_CHECK_INSTANCE_TYPE ((test), G_TYPE_TEST))
       
    15 #define G_TEST_CLASS(tclass)      (G_TYPE_CHECK_CLASS_CAST ((tclass), G_TYPE_TEST, GTestClass))
       
    16 #define G_IS_TEST_CLASS(tclass)   (G_TYPE_CHECK_CLASS_TYPE ((tclass), G_TYPE_TEST))
       
    17 #define G_TEST_GET_CLASS(test)    (G_TYPE_INSTANCE_GET_CLASS ((test), G_TYPE_TEST, GTestClass))
       
    18 
       
    19 enum {
       
    20   PROP_0,
       
    21   PROP_DUMMY
       
    22 };
       
    23 
       
    24 typedef struct _GTest GTest;
       
    25 typedef struct _GTestClass GTestClass;
       
    26 
       
    27 struct _GTest
       
    28 {
       
    29   GObject object;
       
    30 
       
    31   gint dummy;
       
    32 };
       
    33 
       
    34 struct _GTestClass
       
    35 {
       
    36   GObjectClass parent_class;
       
    37 };
       
    38 
       
    39 static GType g_test_get_type (void);
       
    40 
       
    41 static void g_test_class_init (GTestClass * klass);
       
    42 static void g_test_init (GTest * test);
       
    43 static void g_test_dispose (GObject * object);
       
    44 static void g_test_get_property (GObject    *object,
       
    45 				 guint       prop_id,
       
    46 				 GValue     *value,
       
    47 				 GParamSpec *pspec);
       
    48 static void g_test_set_property (GObject      *object,
       
    49 				 guint         prop_id,
       
    50 				 const GValue *value,
       
    51 				 GParamSpec   *pspec);
       
    52 
       
    53 static GObjectClass *parent_class = NULL;
       
    54 
       
    55 static GType
       
    56 g_test_get_type (void)
       
    57 {
       
    58   static GType test_type = 0;
       
    59 
       
    60   if (!test_type) {
       
    61     static const GTypeInfo test_info = {
       
    62       sizeof (GTestClass),
       
    63       NULL,
       
    64       NULL,
       
    65       (GClassInitFunc) g_test_class_init,
       
    66       NULL,
       
    67       NULL,
       
    68       sizeof (GTest),
       
    69       0,
       
    70       (GInstanceInitFunc) g_test_init,
       
    71       NULL
       
    72     };
       
    73 
       
    74     test_type = g_type_register_static (G_TYPE_OBJECT, "GTest",
       
    75         &test_info, 0);
       
    76     if(!test_type)
       
    77     {
       
    78     	g_print("properties2.c : g_type_register_static is failed @ line : %d",__LINE__);
       
    79     	g_assert(FALSE && "properties");
       
    80     }
       
    81   }
       
    82   return test_type;
       
    83 }
       
    84 
       
    85 static void
       
    86 g_test_class_init (GTestClass * klass)
       
    87 {
       
    88   GObjectClass *gobject_class;
       
    89   GParamSpec *gparam_spec;
       
    90 
       
    91   gobject_class = (GObjectClass *) klass;
       
    92 
       
    93   parent_class = g_type_class_ref (G_TYPE_OBJECT);
       
    94   if(!parent_class)
       
    95   {
       
    96   	 g_print("properties2.c : g_tupe_class_ref failed @ line : %d",__LINE__);
       
    97   	g_assert(FALSE && "properties");	
       
    98   }
       
    99     
       
   100   
       
   101 
       
   102   gobject_class->dispose = g_test_dispose;
       
   103   gobject_class->get_property = g_test_get_property;
       
   104   gobject_class->set_property = g_test_set_property;
       
   105 
       
   106   g_object_class_install_property (gobject_class,
       
   107 				   PROP_DUMMY,
       
   108 				   g_param_spec_int ("dummy",
       
   109 						     NULL, 
       
   110 						     NULL,
       
   111 						     0, G_MAXINT, 0,
       
   112 						     G_PARAM_READWRITE));
       
   113   
       
   114 }
       
   115 
       
   116 static void
       
   117 g_test_init (GTest * test)
       
   118 {
       
   119   //g_print ("init %p\n", test);
       
   120 }
       
   121 
       
   122 static void
       
   123 g_test_dispose (GObject * object)
       
   124 {
       
   125   GTest *test;
       
   126 
       
   127   test = G_TEST (object);
       
   128 
       
   129   g_print ("dispose %p!\n", object);
       
   130 
       
   131   G_OBJECT_CLASS (parent_class)->dispose (object);
       
   132 }
       
   133 
       
   134 static void 
       
   135 g_test_get_property (GObject    *object,
       
   136 		     guint       prop_id,
       
   137 		     GValue     *value,
       
   138 		     GParamSpec *pspec)
       
   139 {
       
   140   GTest *test;
       
   141 
       
   142   test = G_TEST (object);
       
   143 
       
   144   switch (prop_id)
       
   145     {
       
   146     case PROP_DUMMY:
       
   147       g_value_set_int (value, test->dummy);
       
   148       break;
       
   149     default:
       
   150       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       
   151       break;
       
   152     }
       
   153 }
       
   154 
       
   155 static void 
       
   156 g_test_set_property (GObject      *object,
       
   157 		     guint         prop_id,
       
   158 		     const GValue *value,
       
   159 		     GParamSpec   *pspec)
       
   160 {
       
   161   GTest *test;
       
   162 
       
   163   test = G_TEST (object);
       
   164 
       
   165   switch (prop_id)
       
   166     {
       
   167     case PROP_DUMMY:
       
   168       test->dummy = g_value_get_int (value);
       
   169       break;
       
   170     default:
       
   171       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
       
   172       break;
       
   173     }
       
   174 }
       
   175 
       
   176 static gint count = 0;
       
   177 
       
   178 static void
       
   179 dummy_notify (GObject    *object,
       
   180               GParamSpec *pspec)
       
   181 {
       
   182   count++;
       
   183   //if (count % 10000 == 0)
       
   184   //  g_print (".");
       
   185 }
       
   186 
       
   187 static void
       
   188 g_test_do_property (GTest * test)
       
   189 {
       
   190   gint dummy;
       
   191 
       
   192   g_object_get (test, "dummy", &dummy, NULL);
       
   193   g_object_set (test, "dummy", dummy + 1, NULL);
       
   194 }
       
   195 
       
   196 int
       
   197 main (int argc, char **argv)
       
   198 {
       
   199   gint i;
       
   200   gint handle_id = 0;
       
   201   GTest *test;
       
   202 
       
   203   #ifdef SYMBIAN
       
   204  
       
   205   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);
       
   206   g_set_print_handler(mrtPrintHandler);
       
   207   #endif /*SYMBIAN*/
       
   208 	  
       
   209 
       
   210   g_thread_init (NULL);
       
   211   //g_print ("START: %s\n", argv[0]);
       
   212   g_log_set_always_fatal (G_LOG_LEVEL_WARNING | G_LOG_LEVEL_CRITICAL | g_log_set_always_fatal (G_LOG_FATAL_MASK));
       
   213   g_type_init ();
       
   214   
       
   215   test = g_object_new (G_TYPE_TEST, NULL);
       
   216   if(!test)
       
   217   {
       
   218   	g_print("properties2.c : g_object_new is failed @ line : %d",__LINE__);
       
   219 	g_assert(FALSE && "properties");
       
   220   }
       
   221   handle_id = g_signal_connect (test, "notify::dummy", G_CALLBACK (dummy_notify), NULL);
       
   222   if(!handle_id)
       
   223      g_print("properties2.c : g_signal_connect is failed @ line : %d",__LINE__);
       
   224 
       
   225   g_assert (count == test->dummy);
       
   226 
       
   227   for (i=0; i<1000; i++) {
       
   228     g_test_do_property (test);
       
   229   }
       
   230 
       
   231   g_assert (count == test->dummy);
       
   232 #ifdef SYMBIAN
       
   233   testResultXml("properties2");
       
   234 #endif /* EMULATOR */
       
   235 
       
   236   return 0;
       
   237 }