os/ossrv/glib/tsrc/BC/tests/refcount/properties2.c
author sl
Tue, 10 Jun 2014 14:32:02 +0200
changeset 1 260cb5ec6c19
permissions -rw-r--r--
Update contrib.
     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 }