static void swfdec_system_has_mp3 (SwfdecPlayer *player, SwfdecAsValue *ret) { gboolean result = swfdec_audio_decoder_prepare (SWFDEC_AUDIO_CODEC_MP3, swfdec_audio_format_new (44100, 2, TRUE), NULL); SWFDEC_AS_VALUE_SET_BOOLEAN (ret, result); }
void swfdec_test_test_get_quit (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *retval) { SwfdecTestTest *test; SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, ""); /* FIXME: or not quit on error? */ SWFDEC_AS_VALUE_SET_BOOLEAN (retval, !test->plugin_loaded || test->plugin_error || test->plugin_quit); }
static void swfdec_xml_socket_stream_target_open (SwfdecStreamTarget *target, SwfdecStream *stream) { SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target); SwfdecAsValue value; xml->open = TRUE; SWFDEC_AS_VALUE_SET_BOOLEAN (&value, TRUE); swfdec_sandbox_use (xml->sandbox); swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onConnect, 1, &value, NULL); swfdec_sandbox_unuse (xml->sandbox); }
void broadcastMessage (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { SwfdecAsValue val; SwfdecAsObject *listeners, *o; gint i, length; const char *name; GSList *list = NULL, *walk; if (object == NULL) return; if (argc < 1) return; name = swfdec_as_value_to_string (cx, argv[0]); argv += 1; argc--; swfdec_as_object_get_variable (object, SWFDEC_AS_STR__listeners, &val); if (!SWFDEC_AS_VALUE_IS_COMPOSITE (val)) return; listeners = SWFDEC_AS_VALUE_GET_COMPOSITE (val); swfdec_as_object_get_variable (listeners, SWFDEC_AS_STR_length, &val); length = swfdec_as_value_to_integer (cx, val); /* return undefined if we won't try to call anything */ if (length <= 0) return; /* FIXME: solve this wth foreach, so it gets faster for weird cases */ for (i = 0; i < length; i++) { swfdec_as_object_get_variable (listeners, swfdec_as_integer_to_string (cx, i), &val); o = swfdec_as_value_to_object (cx, val); if (o == NULL) continue; list = g_slist_prepend (list, o); } if (list == NULL) return; list = g_slist_reverse (list); for (walk = list; walk; walk = walk->next) { swfdec_as_object_call (walk->data, name, argc, argv, &val); } g_slist_free (list); SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE); }
void swfdec_bitmap_data_get_transparent (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc, SwfdecAsValue *argv, SwfdecAsValue *ret) { SwfdecBitmapData *bitmap; SWFDEC_AS_CHECK (SWFDEC_TYPE_BITMAP_DATA, &bitmap, ""); if (bitmap->surface) { SWFDEC_AS_VALUE_SET_BOOLEAN (ret, swfdec_surface_has_alpha (bitmap->surface) ? TRUE : FALSE); } else { SWFDEC_AS_VALUE_SET_INT (ret, -1); } }
static void swfdec_xml_socket_stream_target_error (SwfdecStreamTarget *target, SwfdecStream *stream) { SwfdecXmlSocket *xml = SWFDEC_XML_SOCKET (target); swfdec_sandbox_use (xml->sandbox); if (xml->open) { SWFDEC_FIXME ("is onClose emitted on error?"); swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onClose, 0, NULL, NULL); } else { SwfdecAsValue value; SWFDEC_AS_VALUE_SET_BOOLEAN (&value, FALSE); swfdec_as_object_call (xml->target, SWFDEC_AS_STR_onConnect, 1, &value, NULL); } swfdec_sandbox_unuse (xml->sandbox); swfdec_xml_socket_ensure_closed (xml); }
static gboolean swfdec_video_movie_get_variable (SwfdecAsObject *object, SwfdecAsObject *orig, const char *variable, SwfdecAsValue *val, guint *flags) { guint version = swfdec_gc_object_get_context (object)->version; SwfdecVideoMovie *video; video = SWFDEC_VIDEO_MOVIE (object); if (swfdec_strcmp (version, variable, SWFDEC_AS_STR_width) == 0) { guint w; if (video->provider) { w = swfdec_video_provider_get_width (video->provider); } else { w = 0; } SWFDEC_AS_VALUE_SET_INT (val, w); return TRUE; } else if (swfdec_strcmp (version, variable, SWFDEC_AS_STR_height) == 0) { guint h; if (video->provider) { h = swfdec_video_provider_get_height (video->provider); } else { h = 0; } SWFDEC_AS_VALUE_SET_INT (val, h); return TRUE; } else if (swfdec_strcmp (version, variable, SWFDEC_AS_STR_deblocking) == 0) { SWFDEC_STUB ("Video.deblocking (get)"); SWFDEC_AS_VALUE_SET_NUMBER (val, 0); return TRUE; } else if (swfdec_strcmp (version, variable, SWFDEC_AS_STR_smoothing) == 0) { SWFDEC_STUB ("Video.smoothing (get)"); SWFDEC_AS_VALUE_SET_BOOLEAN (val, FALSE); return TRUE; } else { return SWFDEC_AS_OBJECT_CLASS (swfdec_video_movie_parent_class)->get ( object, orig, variable, val, flags); } }
static gboolean swfdec_amf_parse_boolean (SwfdecAsContext *context, SwfdecBits *bits, SwfdecAsValue *val) { SWFDEC_AS_VALUE_SET_BOOLEAN (val, swfdec_bits_get_u8 (bits) ? TRUE : FALSE); return TRUE; }
static void swfdec_system_has_embedded_video (SwfdecPlayer *player, SwfdecAsValue *ret) { /* FIXME: what's this? */ SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE); }
static void swfdec_system_has_streaming_video (SwfdecPlayer *player, SwfdecAsValue *ret) { /* FIXME: check if video decoders got compiled in? */ SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE); }
static void swfdec_system_has_streaming_audio (SwfdecPlayer *player, SwfdecAsValue *ret) { SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE); }
static void swfdec_system_has_audio (SwfdecPlayer *player, SwfdecAsValue *ret) { /* FIXME: allow setting this? */ SWFDEC_AS_VALUE_SET_BOOLEAN (ret, TRUE); }
static void swfdec_system_has_tls (SwfdecPlayer *player, SwfdecAsValue *ret) { SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE); }
static void swfdec_system_windowless_disabled (SwfdecPlayer *player, SwfdecAsValue *ret) { SWFDEC_AS_VALUE_SET_BOOLEAN (ret, FALSE); }
static void swfdec_system_is_debugger (SwfdecPlayer *player, SwfdecAsValue *ret) { SWFDEC_AS_VALUE_SET_BOOLEAN (ret, player->priv->system->debugger); }
int main (int argc, char **argv) { char *script_filename = NULL; GError *error = NULL; SwfdecAsContext *context; SwfdecAsObject *array; SwfdecScript *script; SwfdecAsValue val; int i, ret; gboolean dump = FALSE; gboolean no_check = FALSE, only_check = FALSE; GOptionEntry options[] = { { "dump", 'd', 0, G_OPTION_ARG_NONE, &dump, "dump informative output on failure", FALSE }, { "no-check", 0, 0, G_OPTION_ARG_NONE, &no_check, "don't check if the system is ok for running the testsuite", FALSE }, { "self-check", 0, 0, G_OPTION_ARG_NONE, &only_check, "run a system check and exit", FALSE }, { "player", 'p', 0, G_OPTION_ARG_STRING, &swfdec_test_plugin_name, "player to test", "NAME" }, { "script", 's', 0, G_OPTION_ARG_STRING, &script_filename, "script to execute if not ./default.sts", "FILENAME" }, { NULL } }; GOptionContext *ctx; /* set the right warning levels */ g_log_set_always_fatal (G_LOG_LEVEL_ERROR | G_LOG_LEVEL_CRITICAL | G_LOG_LEVEL_WARNING); /* by default get rid of the loads of warnings the tests produce */ g_setenv ("SWFDEC_DEBUG", "2", FALSE); g_thread_init (NULL); swfdec_init (); ctx = g_option_context_new (""); g_option_context_add_main_entries (ctx, options, "options"); g_option_context_parse (ctx, &argc, &argv, &error); g_option_context_free (ctx); if (error) { g_printerr ("ERROR: wrong command line arguments: %s\n", error->message); g_error_free (error); return EXIT_FAILURE; } if (only_check || !no_check) { gboolean result = check_system (only_check); if (!result) { g_print ("ERROR: System checked failed, aborting. Use --no-check to disable.\n"); return 1; } else if (only_check) { return 0; } } g_assert (!only_check); /* allow env vars instead of options - eases running make check with different settings */ if (swfdec_test_plugin_name == NULL) swfdec_test_plugin_name = g_strdup (g_getenv ("SWFDEC_TEST_PLAYER")); script = load_script (script_filename); g_free (script_filename); if (script == NULL) return EXIT_FAILURE; context = g_object_new (SWFDEC_TYPE_AS_CONTEXT, NULL); swfdec_as_context_startup (context); SWFDEC_AS_VALUE_SET_BOOLEAN (&val, dump); swfdec_as_object_set_variable (context->global, swfdec_as_context_get_string (context, "dump"), &val); swfdec_test_function_init_context (context); swfdec_as_context_run_init_script (context, swfdec_test_initialize, sizeof (swfdec_test_initialize), SWFDEC_TEST_VERSION); array = swfdec_as_array_new (context); if (array == NULL) { g_print ("ERROR: Not enough memory"); return EXIT_FAILURE; } if (argc < 2) { GDir *dir; const char *file; dir = g_dir_open (".", 0, NULL); while ((file = g_dir_read_name (dir))) { if (!g_str_has_suffix (file, ".swf")) continue; SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_get_string (context, file)); swfdec_as_array_push (SWFDEC_AS_ARRAY (array), &val); } g_dir_close (dir); } else { for (i = 1; i < argc; i++) { SWFDEC_AS_VALUE_SET_STRING (&val, swfdec_as_context_get_string (context, argv[i])); swfdec_as_array_push (SWFDEC_AS_ARRAY (array), &val); } } SWFDEC_AS_VALUE_SET_OBJECT (&val, array); swfdec_as_object_set_variable (context->global, swfdec_as_context_get_string (context, "filenames"), &val); swfdec_as_object_run (context->global, script); if (swfdec_as_context_catch (context, &val)) { g_print ("ERROR: %s\n", swfdec_as_value_to_string (context, &val)); ret = EXIT_FAILURE; } else { g_print ("SUCCESS\n"); ret = EXIT_SUCCESS; } swfdec_script_unref (script); g_object_unref (context); return ret; }