static JSValueRef seed_gobject_signal_connect_on_property (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef * exception) { gulong id = 0; JSObjectRef this_obj; signal_privates *privates; privates = (signal_privates *) JSObjectGetPrivate (thisObject); if (!privates) g_error ("Signal constructed with invalid parameters" "in namespace import \n"); this_obj = (JSObjectRef) seed_value_from_object (ctx, privates->object, exception); if ((argumentCount > 2) || (argumentCount == 0)) { seed_make_exception (ctx, exception, "ArgumentError", "Signal connection expected" " 1, or 2 arguments. Got " "%zd", argumentCount); return JSValueMakeNull (ctx); } if (JSValueIsNull (ctx, arguments[0]) || !JSValueIsObject (ctx, arguments[0]) || !JSObjectIsFunction (ctx, (JSObjectRef) arguments[0])) { seed_make_exception (ctx, exception, "ArgumentError", "Signal connection requires a function" " as first argument"); return JSValueMakeNull (ctx); } if (argumentCount == 1) { id = seed_gobject_signal_connect (ctx, privates->signal_name, privates->object, (JSObjectRef) arguments[0], this_obj, NULL); } else if (argumentCount == 2) { id = seed_gobject_signal_connect (ctx, privates->signal_name, privates->object, (JSObjectRef) arguments[0], this_obj, (JSObjectRef) arguments[1]); } return seed_value_from_ulong (ctx, id, exception); }
static SeedValue value_from_ffi_type (SeedContext ctx, GType otype, GArgument *value, SeedException *exception) { switch (g_type_fundamental (otype)) { case G_TYPE_INT: return seed_value_from_int (ctx, value->v_int, exception); break; case G_TYPE_FLOAT: return seed_value_from_float (ctx, value->v_float, exception); break; case G_TYPE_DOUBLE: return seed_value_from_double (ctx, value->v_double, exception); break; case G_TYPE_BOOLEAN: return seed_value_from_boolean (ctx, value->v_boolean, exception); break; case G_TYPE_STRING: return seed_value_from_string (ctx, value->v_pointer, exception); break; case G_TYPE_CHAR: return seed_value_from_char (ctx, value->v_int, exception); break; case G_TYPE_UCHAR: return seed_value_from_uchar (ctx, value->v_uint, exception); break; case G_TYPE_UINT: return seed_value_from_uint (ctx, value->v_uint, exception); break; case G_TYPE_POINTER: return seed_make_pointer (ctx, value->v_pointer); break; case G_TYPE_LONG: return seed_value_from_long (ctx, value->v_long, exception); break; case G_TYPE_ULONG: return seed_value_from_ulong (ctx, value->v_ulong, exception); break; case G_TYPE_INT64: return seed_value_from_int64 (ctx, value->v_int64, exception); break; case G_TYPE_UINT64: return seed_value_from_uint64 (ctx, value->v_uint64, exception); break; case G_TYPE_NONE: return seed_make_null (ctx); default: g_warning ("Unsupported fundamental type in value_from_ffi_type: %s", g_type_name(g_type_fundamental (otype))); return seed_make_null (ctx); } }
static JSValueRef seed_gobject_signal_connect_by_name (JSContextRef ctx, JSObjectRef function, JSObjectRef thisObject, size_t argumentCount, const JSValueRef arguments[], JSValueRef * exception) { GType obj_type; JSObjectRef user_data = NULL; gchar *signal_name; GObject *obj; gulong id; if (argumentCount < 2 || argumentCount > 3) { seed_make_exception (ctx, exception, "ArgumentError", "Signal connection expected" " 2 or 3 arguments. Got " "%zd", argumentCount); return JSValueMakeNull (ctx); } if (JSValueIsNull (ctx, arguments[1]) || !JSValueIsObject (ctx, arguments[1]) || !JSObjectIsFunction (ctx, (JSObjectRef) arguments[1])) { seed_make_exception (ctx, exception, "ArgumentError", "Signal connection by name " "requires a function" " as second argument"); return JSValueMakeNull (ctx); } if (argumentCount == 3) { user_data = (JSObjectRef) arguments[2]; } signal_name = seed_value_to_string (ctx, arguments[0], exception); obj = (GObject *) JSObjectGetPrivate (thisObject); obj_type = G_OBJECT_TYPE (obj); id = seed_gobject_signal_connect (ctx, signal_name, obj, (JSObjectRef) arguments[1], NULL, user_data); g_free (signal_name); return seed_value_from_ulong (ctx, id, exception); }
void basic_types(TestSimpleFixture * fixture, gconstpointer _data) { // bool to/from JS equality gboolean bool_test_in = TRUE; SeedValue *bool_test = seed_value_from_boolean(fixture->context, bool_test_in, NULL); gboolean bool_test_out = seed_value_to_boolean(fixture->context, bool_test, NULL); g_assert(bool_test_in == bool_test_out); // uint to/from JS equality guint uint_test_in = 2946623; SeedValue *uint_test = seed_value_from_uint(fixture->context, uint_test_in, NULL); guint uint_test_out = seed_value_to_uint(fixture->context, uint_test, NULL); g_assert(uint_test_in == uint_test_out); // int to/from JS equality gint int_test_in = -54374; SeedValue *int_test = seed_value_from_int(fixture->context, int_test_in, NULL); gint int_test_out = seed_value_to_int(fixture->context, int_test, NULL); g_assert(int_test_in == int_test_out); // char to/from JS equality gchar char_test_in = -126; SeedValue *char_test = seed_value_from_char(fixture->context, char_test_in, NULL); gchar char_test_out = seed_value_to_char(fixture->context, char_test, NULL); g_assert(char_test_in == char_test_out); // uchar to/from JS equality guchar uchar_test_in = 250; SeedValue *uchar_test = seed_value_from_uchar(fixture->context, uchar_test_in, NULL); guchar uchar_test_out = seed_value_to_uchar(fixture->context, uchar_test, NULL); g_assert(uchar_test_in == uchar_test_out); // long to/from JS equality glong long_test_in = -454250; SeedValue *long_test = seed_value_from_long(fixture->context, long_test_in, NULL); glong long_test_out = seed_value_to_long(fixture->context, long_test, NULL); g_assert(long_test_in == long_test_out); // ulong to/from JS equality gulong ulong_test_in = 250; SeedValue *ulong_test = seed_value_from_ulong(fixture->context, ulong_test_in, NULL); gulong ulong_test_out = seed_value_to_ulong(fixture->context, ulong_test, NULL); g_assert(ulong_test_in == ulong_test_out); // int64 to/from JS equality gint64 int64_test_in = -54374; SeedValue *int64_test = seed_value_from_int64(fixture->context, int64_test_in, NULL); gint64 int64_test_out = seed_value_to_int64(fixture->context, int64_test, NULL); g_assert(int64_test_in == int64_test_out); // uint64 to/from JS equality guint64 uint64_test_in = 2946623; SeedValue *uint64_test = seed_value_from_uint64(fixture->context, uint64_test_in, NULL); guint64 uint64_test_out = seed_value_to_uint64(fixture->context, uint64_test, NULL); g_assert(uint64_test_in == uint64_test_out); // float to/from JS equality gfloat float_test_in = 1.618; SeedValue *float_test = seed_value_from_float(fixture->context, float_test_in, NULL); gfloat float_test_out = seed_value_to_float(fixture->context, float_test, NULL); g_assert(float_test_in == float_test_out); // double to/from JS equality gdouble double_test_in = 1.6134857638; SeedValue *double_test = seed_value_from_double(fixture->context, double_test_in, NULL); gdouble double_test_out = seed_value_to_double(fixture->context, double_test, NULL); g_assert(double_test_in == double_test_out); // string to/from JS equality gchar *string_test_in = "Hello, world!"; SeedValue *string_test = seed_value_from_string(fixture->context, string_test_in, NULL); gchar *string_test_out = seed_value_to_string(fixture->context, string_test, NULL); g_assert(strncmp(string_test_in, string_test_out, strlen(string_test_in)) == 0); // filename to/from JS equality gchar *filename_test_in = "/bin"; SeedValue *filename_test = seed_value_from_filename(fixture->context, filename_test_in, NULL); gchar *filename_test_out = seed_value_to_filename(fixture->context, filename_test, NULL); g_assert(strncmp(filename_test_in, filename_test_out, strlen(filename_test_in)) == 0); SeedValue si[2]; si[0] = seed_value_from_string (fixture->context, "Hi", NULL); si[1] = seed_value_from_int (fixture->context, 1, NULL); gint ni; gchar *ns; seed_value_to_format (fixture->context, "si", si, NULL, &ns, &ni, NULL); g_assert (ni == 1); g_assert (!strcmp(ns, "Hi")); }