[Swfdec] 4 commits - test/.gitignore test/image test/Makefile.am test/swfdec_test_function.c test/swfdec_test_image.c test/swfdec_test_image.h test/swfdec_test_initialize.as test/swfdec_test_initialize.h test/swfdec_test_test.c test/trace
Benjamin Otte
company at kemper.freedesktop.org
Tue Jan 8 13:53:35 PST 2008
test/.gitignore | 2
test/Makefile.am | 2
test/image/Makefile.am | 12 -
test/image/default.stas | 53 ++++++++
test/image/default.sts |binary
test/image/image.c | 251 -----------------------------------------
test/swfdec_test_function.c | 1
test/swfdec_test_image.c | 222 ++++++++++++++++++++++++++++++++++++
test/swfdec_test_image.h | 57 +++++++++
test/swfdec_test_initialize.as | 6
test/swfdec_test_initialize.h | 84 +++++++------
test/swfdec_test_test.c | 31 +++++
test/trace/Makefile.am | 2
13 files changed, 427 insertions(+), 296 deletions(-)
New commits:
commit d432e7e86695fdf53924b456d792c57675f53353
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 8 22:52:54 2008 +0100
fix non-srcdir builds
diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index e806b5f..05af8e9 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -1,5 +1,5 @@
check-local:
- ../test $(srcdir)/*.swf
+ ../test --script $(srcdir)/default.sts $(srcdir)/*.swf
EXTRA_DIST = \
README \
diff --git a/test/trace/Makefile.am b/test/trace/Makefile.am
index 4bd6a30..45ed833 100644
--- a/test/trace/Makefile.am
+++ b/test/trace/Makefile.am
@@ -1,5 +1,5 @@
check-local:
- ../test $(srcdir)/*.swf
+ ../test --script $(srcdir)/default.sts $(srcdir)/*.swf
EXTRA_DIST = \
README \
commit ac841c3397b62043d0333cc3812a287db8c28aa8
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 8 22:07:50 2008 +0100
update .gitignore
diff --git a/test/.gitignore b/test/.gitignore
index 9f30aeb..4573b5b 100644
--- a/test/.gitignore
+++ b/test/.gitignore
@@ -1,4 +1,6 @@
.deps
+.libs
+*.o
swfdec_test_function_list.h
commit 20b561700fe0709c045a7a2273a23a12f2055142
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 8 22:07:14 2008 +0100
switch image tests to use new tester
diff --git a/test/image/Makefile.am b/test/image/Makefile.am
index 393c856..e806b5f 100644
--- a/test/image/Makefile.am
+++ b/test/image/Makefile.am
@@ -1,9 +1,5 @@
-check_PROGRAMS = image
-TESTS = $(check_PROGRAMS)
-
-image_SOURCES = image.c
-image_CFLAGS = $(GLOBAL_CFLAGS) $(SWFDEC_CFLAGS) $(CAIRO_CFLAGS)
-image_LDFLAGS = $(SWFDEC_LIBS) $(CAIRO_LIBS)
+check-local:
+ ../test $(srcdir)/*.swf
EXTRA_DIST = \
README \
@@ -309,14 +305,14 @@ EXTRA_DIST = \
text-field-autosize-7.swf \
text-field-autosize-7.swf.png \
text-field-autosize-8.swf \
- text-field-autosize-8.swf.png
+ text-field-autosize-8.swf.png \
text-field-color-transform.as \
text-field-color-transform-6.swf \
text-field-color-transform-6.swf.png \
text-field-color-transform-7.swf \
text-field-color-transform-7.swf.png \
text-field-color-transform-8.swf \
- text-field-color-transform-8.swf.png
+ text-field-color-transform-8.swf.png \
text-field-empty.as \
text-field-empty-6.swf \
text-field-empty-6.swf.png \
diff --git a/test/image/default.stas b/test/image/default.stas
new file mode 100644
index 0000000..402a189
--- /dev/null
+++ b/test/image/default.stas
@@ -0,0 +1,53 @@
+/* Swfdec
+ * Copyright (C) 2008 Benjamin Otte <otte at gnome.org>
+ *
+ * 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.1 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., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+run_test = function (t, file) {
+ var e;
+ print ("Testing " + file);
+ try {
+ t.reset (file);
+ t.advance (0);
+ t.advance (Math.ceil (10000 / t.rate));
+ image = t.render ();
+ compare = new Image (file + ".png");
+ if (!image.compare (compare)) {
+ error ("images differ");
+ return false;
+ }
+ } catch (e) {
+ if (e) {
+ error (e);
+ return false;
+ }
+ };
+ Native.print (" OK\n");
+ return true;
+};
+
+filenames.sort ();
+t = new Test ();
+fail = [];
+for (var i = 0; i < filenames.length; i++) {
+ if (!run_test (t, filenames[i]))
+ fail.push (filenames[i]);
+};
+if (fail.length > 0) {
+ error (fail.join ("\n "));
+ throw (fail.length + " failures");
+}
diff --git a/test/image/default.sts b/test/image/default.sts
new file mode 100644
index 0000000..6ef85c1
Binary files /dev/null and b/test/image/default.sts differ
diff --git a/test/image/image.c b/test/image/image.c
deleted file mode 100644
index 405cfa7..0000000
--- a/test/image/image.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* Swfdec
- * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
- *
- * 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.1 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., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301 USA
- */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-#include <string.h>
-#include <libswfdec/swfdec.h>
-
-/* Compare two buffers, returning the number of pixels that are
- * different and the maximum difference of any single color channel in
- * result_ret.
- *
- * This function should be rewritten to compare all formats supported by
- * cairo_format_t instead of taking a mask as a parameter.
- */
-static gboolean
-buffer_diff_core (unsigned char *buf_a,
- unsigned char *buf_b,
- unsigned char *buf_diff,
- int width,
- int height,
- int stride)
-{
- int x, y;
- gboolean result = TRUE;
- guint32 *row_a, *row_b, *row;
-
- for (y = 0; y < height; y++) {
- row_a = (guint32 *) (buf_a + y * stride);
- row_b = (guint32 *) (buf_b + y * stride);
- row = (guint32 *) (buf_diff + y * stride);
- for (x = 0; x < width; x++) {
- /* check if the pixels are the same */
- if (row_a[x] != row_b[x]) {
- int channel;
- static const unsigned int threshold = 3;
- guint32 diff_pixel = 0;
-
- /* calculate a difference value for all 4 channels */
- for (channel = 0; channel < 4; channel++) {
- int value_a = (row_a[x] >> (channel*8)) & 0xff;
- int value_b = (row_b[x] >> (channel*8)) & 0xff;
- unsigned int diff;
- diff = ABS (value_a - value_b);
- if (diff <= threshold)
- continue;
- diff *= 4; /* emphasize */
- diff += 128; /* make sure it's visible */
- if (diff > 255)
- diff = 255;
- diff_pixel |= diff << (channel*8);
- }
-
- row[x] = diff_pixel;
- if (diff_pixel)
- result = FALSE;
- } else {
- row[x] = 0;
- }
- row[x] |= 0xff000000; /* Set ALPHA to 100% (opaque) */
- }
- }
- return result;
-}
-
-static gboolean
-image_diff (cairo_surface_t *surface, const char *filename)
-{
- cairo_surface_t *image, *diff = NULL;
- int w, h;
- char *real;
-
- real = g_strdup_printf ("%s.png", filename);
- image = cairo_image_surface_create_from_png (real);
- if (cairo_surface_status (image)) {
- g_print (" ERROR: Could not load %s: %s\n", real,
- cairo_status_to_string (cairo_surface_status (image)));
- g_free (real);
- goto dump;
- }
- g_free (real);
- g_assert (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_IMAGE);
- w = cairo_image_surface_get_width (surface);
- h = cairo_image_surface_get_height (surface);
- if (w != cairo_image_surface_get_width (image) ||
- h != cairo_image_surface_get_height (image)) {
- g_print (" ERROR: sizes don't match. Should be %ux%u, but is %ux%u\n",
- cairo_image_surface_get_width (image), cairo_image_surface_get_height (image),
- w, h);
- goto dump;
- }
- diff = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h);
- g_assert (cairo_image_surface_get_stride (surface) == 4 * w);
- g_assert (cairo_image_surface_get_stride (image) == 4 * w);
- g_assert (cairo_image_surface_get_stride (diff) == 4 * w);
- if (!buffer_diff_core (cairo_image_surface_get_data (surface),
- cairo_image_surface_get_data (image),
- cairo_image_surface_get_data (diff),
- w, h, 4 * w) != 0) {
- g_print (" ERROR: images differ\n");
- goto dump;
- }
-
- cairo_surface_destroy (image);
- cairo_surface_destroy (diff);
- return TRUE;
-
-dump:
- cairo_surface_destroy (image);
- if (g_getenv ("SWFDEC_TEST_DUMP")) {
- cairo_status_t status;
- char *dump;
-
- dump = g_strdup_printf ("%s.dump.png", filename);
- status = cairo_surface_write_to_png (surface, dump);
- if (status) {
- g_print (" ERROR: failed to dump image to %s: %s\n", dump,
- cairo_status_to_string (status));
- }
- g_free (dump);
- if (diff) {
- dump = g_strdup_printf ("%s.diff.png", filename);
- status = cairo_surface_write_to_png (diff, dump);
- if (status) {
- g_print (" ERROR: failed to dump diff image to %s: %s\n", dump,
- cairo_status_to_string (status));
- }
- g_free (dump);
- cairo_surface_destroy (diff);
- }
- }
- return FALSE;
-}
-
-static gboolean
-run_test (const char *filename)
-{
- SwfdecLoader *loader;
- SwfdecPlayer *player = NULL;
- guint i, msecs;
- guint w, h;
- cairo_surface_t *surface;
- cairo_t *cr;
-
- g_print ("Testing %s:\n", filename);
-
- loader = swfdec_file_loader_new (filename);
- if (loader->error) {
- g_print (" ERROR: %s\n", loader->error);
- g_object_unref (loader);
- goto error;
- }
- player = swfdec_player_new (NULL);
- swfdec_player_set_loader (player, loader);
-
- for (i = 0; i < 10; i++) {
- msecs = swfdec_player_get_next_event (player);
- swfdec_player_advance (player, msecs);
- }
- swfdec_player_get_default_size (player, &w, &h);
- if (w == 0 || h == 0) {
- g_print (" ERROR: width and height not set\n");
- goto error;
- }
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h);
- cr = cairo_create (surface);
- swfdec_player_render (player, cr, 0, 0, w, h);
- cairo_destroy (cr);
- if (!image_diff (surface, filename)) {
- cairo_surface_destroy (surface);
- goto error;
- }
- cairo_surface_destroy (surface);
- g_object_unref (player);
- g_print (" OK\n");
- return TRUE;
-
-error:
- if (player)
- g_object_unref (player);
- return FALSE;
-}
-
-int
-main (int argc, char **argv)
-{
- GList *failed_tests = NULL;
-
- swfdec_init ();
-
- if (argc > 1) {
- int i;
- for (i = 1; i < argc; i++) {
- if (!run_test (argv[i]))
- failed_tests = g_list_prepend (failed_tests, g_strdup (argv[i]));
- }
- } else {
- GDir *dir;
- char *name;
- const char *path, *file;
- /* automake defines this */
- path = g_getenv ("srcdir");
- if (path == NULL)
- path = ".";
- dir = g_dir_open (path, 0, NULL);
- while ((file = g_dir_read_name (dir))) {
- if (!g_str_has_suffix (file, ".swf"))
- continue;
- name = g_build_filename (path, file, NULL);
- if (!run_test (name)) {
- failed_tests = g_list_prepend (failed_tests, name);
- } else {
- g_free (name);
- }
- }
- g_dir_close (dir);
- }
-
- if (failed_tests) {
- GList *walk;
- failed_tests = g_list_sort (failed_tests, (GCompareFunc) strcmp);
- g_print ("\nFAILURES: %u\n", g_list_length (failed_tests));
- for (walk = failed_tests; walk; walk = walk->next) {
- g_print (" %s\n", (char *) walk->data);
- g_free (walk->data);
- }
- g_list_free (failed_tests);
- return 1;
- } else {
- g_print ("\nEVERYTHING OK\n");
- return 0;
- }
-}
-
commit 4208f7dfae9e15057b7bbf1bdbe187595d8938df
Author: Benjamin Otte <otte at gnome.org>
Date: Tue Jan 8 21:59:20 2008 +0100
add image handling functions
diff --git a/test/Makefile.am b/test/Makefile.am
index 05112ac..d7f5830 100644
--- a/test/Makefile.am
+++ b/test/Makefile.am
@@ -6,6 +6,7 @@ swfdec_test_sources = \
swfdec_test.c \
swfdec_test_function.c \
swfdec_test_global.c \
+ swfdec_test_image.c \
swfdec_test_test.c
BUILT_SOURCES = \
@@ -24,6 +25,7 @@ EXTRA_DIST = \
noinst_HEADERS = \
swfdec_test_function.h \
swfdec_test_function_list.h \
+ swfdec_test_image.h \
swfdec_test_initialize.h \
swfdec_test_test.h
diff --git a/test/swfdec_test_function.c b/test/swfdec_test_function.c
index 0109582..4e6605d 100644
--- a/test/swfdec_test_function.c
+++ b/test/swfdec_test_function.c
@@ -25,6 +25,7 @@
#include "swfdec_test_function_list.h"
/* needed by the function list */
+#include "swfdec_test_image.h"
#include "swfdec_test_test.h"
diff --git a/test/swfdec_test_image.c b/test/swfdec_test_image.c
new file mode 100644
index 0000000..bcead21
--- /dev/null
+++ b/test/swfdec_test_image.c
@@ -0,0 +1,222 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * 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.1 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., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "swfdec_test_image.h"
+#include "swfdec_test_function.h"
+
+#define SWFDEC_TEST_IMAGE_IS_VALID(image) ((image)->surface && \
+ cairo_surface_status ((image)->surface) == CAIRO_STATUS_SUCCESS)
+
+SwfdecAsObject *
+swfdec_test_image_new (SwfdecAsContext *context, guint width, guint height)
+{
+ SwfdecAsValue val;
+ SwfdecAsObject *ret;
+
+ if (!swfdec_as_context_use_mem (context, sizeof (SwfdecTestImage)))
+ return NULL;
+
+ ret = g_object_new (SWFDEC_TYPE_TEST_IMAGE, NULL);
+ swfdec_as_object_add (ret, context, sizeof (SwfdecTestImage));
+ swfdec_as_object_get_variable (context->global,
+ swfdec_as_context_get_string (context, "Image"), &val);
+ if (SWFDEC_AS_VALUE_IS_OBJECT (&val))
+ swfdec_as_object_set_constructor (ret, SWFDEC_AS_VALUE_GET_OBJECT (&val));
+
+ SWFDEC_TEST_IMAGE (ret)->surface =
+ cairo_image_surface_create (CAIRO_FORMAT_ARGB32, width, height);
+ return ret;
+}
+
+/*** SWFDEC_TEST_IMAGE ***/
+
+G_DEFINE_TYPE (SwfdecTestImage, swfdec_test_image, SWFDEC_TYPE_AS_OBJECT)
+
+static void
+swfdec_test_image_dispose (GObject *object)
+{
+ SwfdecTestImage *image = SWFDEC_TEST_IMAGE (object);
+
+ if (image->surface) {
+ cairo_surface_destroy (image->surface);
+ image->surface = NULL;
+ }
+
+ G_OBJECT_CLASS (swfdec_test_image_parent_class)->dispose (object);
+}
+
+static void
+swfdec_test_image_class_init (SwfdecTestImageClass *klass)
+{
+ GObjectClass *object_class = G_OBJECT_CLASS (klass);
+
+ object_class->dispose = swfdec_test_image_dispose;
+}
+
+static void
+swfdec_test_image_init (SwfdecTestImage *this)
+{
+}
+
+/*** AS CODE ***/
+
+/* Compare two buffers, returning the number of pixels that are
+ * different and the maximum difference of any single color channel in
+ * result_ret.
+ *
+ * This function should be rewritten to compare all formats supported by
+ * cairo_format_t instead of taking a mask as a parameter.
+ */
+static gboolean
+buffer_diff_core (unsigned char *buf_a,
+ unsigned char *buf_b,
+ unsigned char *buf_diff,
+ int width,
+ int height,
+ int stride_a,
+ int stride_b,
+ int stride_diff)
+{
+ int x, y;
+ gboolean result = TRUE;
+ guint32 *row_a, *row_b, *row;
+
+ for (y = 0; y < height; y++) {
+ row_a = (guint32 *) (buf_a + y * stride_a);
+ row_b = (guint32 *) (buf_b + y * stride_b);
+ row = (guint32 *) (buf_diff + y * stride_diff);
+ for (x = 0; x < width; x++) {
+ /* check if the pixels are the same */
+ if (row_a[x] != row_b[x]) {
+ int channel;
+ static const unsigned int threshold = 3;
+ guint32 diff_pixel = 0;
+
+ /* calculate a difference value for all 4 channels */
+ for (channel = 0; channel < 4; channel++) {
+ int value_a = (row_a[x] >> (channel*8)) & 0xff;
+ int value_b = (row_b[x] >> (channel*8)) & 0xff;
+ unsigned int diff;
+ diff = ABS (value_a - value_b);
+ if (diff <= threshold)
+ continue;
+ diff *= 4; /* emphasize */
+ diff += 128; /* make sure it's visible */
+ if (diff > 255)
+ diff = 255;
+ diff_pixel |= diff << (channel*8);
+ }
+
+ row[x] = diff_pixel;
+ if (diff_pixel)
+ result = FALSE;
+ } else {
+ row[x] = 0;
+ }
+ row[x] |= 0xff000000; /* Set ALPHA to 100% (opaque) */
+ }
+ }
+ return result;
+}
+
+SWFDEC_TEST_FUNCTION ("Image_compare", swfdec_test_image_compare, 0)
+void
+swfdec_test_image_compare (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+ SwfdecTestImage *image, *compare;
+ int w, h;
+ cairo_surface_t *diff;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "O", &compare);
+
+ if (!SWFDEC_IS_TEST_IMAGE (compare))
+ return;
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (retval, FALSE);
+ if (!SWFDEC_TEST_IMAGE_IS_VALID (image) ||
+ !SWFDEC_TEST_IMAGE_IS_VALID (compare))
+ return;
+
+ g_assert (cairo_surface_get_type (image->surface) == CAIRO_SURFACE_TYPE_IMAGE);
+ g_assert (cairo_surface_get_type (compare->surface) == CAIRO_SURFACE_TYPE_IMAGE);
+
+ w = cairo_image_surface_get_width (image->surface);
+ if (w != cairo_image_surface_get_width (compare->surface))
+ return;
+ h = cairo_image_surface_get_height (image->surface);
+ if (h != cairo_image_surface_get_height (compare->surface))
+ return;
+ diff = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, w, h);
+
+ if (!buffer_diff_core (cairo_image_surface_get_data (image->surface),
+ cairo_image_surface_get_data (compare->surface),
+ cairo_image_surface_get_data (diff),
+ w, h,
+ cairo_image_surface_get_stride (image->surface),
+ cairo_image_surface_get_stride (compare->surface),
+ cairo_image_surface_get_stride (diff)) != 0) {
+ cairo_surface_destroy (diff);
+ return;
+ }
+ cairo_surface_destroy (diff);
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (retval, TRUE);
+}
+
+SWFDEC_TEST_FUNCTION ("Image_save", swfdec_test_image_save, 0)
+void
+swfdec_test_image_save (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+ SwfdecTestImage *image;
+ const char *filename;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "s", &filename);
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (retval, FALSE);
+ if (!SWFDEC_TEST_IMAGE_IS_VALID (image))
+ return;
+
+ if (cairo_surface_write_to_png (image->surface, filename) != CAIRO_STATUS_SUCCESS)
+ return;
+
+ SWFDEC_AS_VALUE_SET_BOOLEAN (retval, TRUE);
+}
+
+SWFDEC_TEST_FUNCTION ("Image", swfdec_test_image_create, swfdec_test_image_get_type)
+void
+swfdec_test_image_create (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+ SwfdecTestImage *image;
+ const char *filename;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_IMAGE, &image, "|s", &filename);
+
+ if (filename[0] == '\0')
+ return;
+
+ image->surface = cairo_image_surface_create_from_png (filename);
+}
+
diff --git a/test/swfdec_test_image.h b/test/swfdec_test_image.h
new file mode 100644
index 0000000..ef5bb2a
--- /dev/null
+++ b/test/swfdec_test_image.h
@@ -0,0 +1,57 @@
+/* Swfdec
+ * Copyright (C) 2007 Benjamin Otte <otte at gnome.org>
+ *
+ * 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.1 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., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301 USA
+ */
+
+#ifndef _SWFDEC_TEST_IMAGE_H_
+#define _SWFDEC_TEST_IMAGE_H_
+
+#include <libswfdec/swfdec.h>
+
+G_BEGIN_DECLS
+
+
+typedef struct _SwfdecTestImage SwfdecTestImage;
+typedef struct _SwfdecTestImageClass SwfdecTestImageClass;
+
+#define SWFDEC_TYPE_TEST_IMAGE (swfdec_test_image_get_type())
+#define SWFDEC_IS_TEST_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), SWFDEC_TYPE_TEST_IMAGE))
+#define SWFDEC_IS_TEST_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), SWFDEC_TYPE_TEST_IMAGE))
+#define SWFDEC_TEST_IMAGE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), SWFDEC_TYPE_TEST_IMAGE, SwfdecTestImage))
+#define SWFDEC_TEST_IMAGE_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), SWFDEC_TYPE_TEST_IMAGE, SwfdecTestImageClass))
+#define SWFDEC_TEST_IMAGE_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), SWFDEC_TYPE_TEST_IMAGE, SwfdecTestImageClass))
+
+struct _SwfdecTestImage
+{
+ SwfdecAsObject as_object;
+
+ cairo_surface_t * surface; /* surface or NULL when broken image */
+};
+
+struct _SwfdecTestImageClass
+{
+ SwfdecAsObjectClass as_object_class;
+};
+
+GType swfdec_test_image_get_type (void);
+
+SwfdecAsObject *swfdec_test_image_new (SwfdecAsContext * context,
+ guint width,
+ guint height);
+
+G_END_DECLS
+#endif
diff --git a/test/swfdec_test_initialize.as b/test/swfdec_test_initialize.as
index 6d72d9b..debff41 100644
--- a/test/swfdec_test_initialize.as
+++ b/test/swfdec_test_initialize.as
@@ -17,12 +17,18 @@
* Boston, MA 02110-1301 USA
*/
+Image = Native.Image;
+Image.prototype = {};
+Image.prototype.compare = Native.Image_compare;
+Image.prototype.save = Native.Image_save;
+
Test = Native.Test;
Test.prototype = {};
Test.prototype.advance = Native.Test_advance;
Test.prototype.mouse_move = Native.Test_mouse_move;
Test.prototype.mouse_press = Native.Test_mouse_press;
Test.prototype.mouse_release = Native.Test_mouse_release;
+Test.prototype.render = Native.Test_render;
Test.prototype.reset = Native.Test_reset;
Test.prototype.trace = Native.Test_trace;
Test.prototype.addProperty ("rate", Native.Test_get_rate, null);
diff --git a/test/swfdec_test_initialize.h b/test/swfdec_test_initialize.h
index a625182..20be2e5 100644
--- a/test/swfdec_test_initialize.h
+++ b/test/swfdec_test_initialize.h
@@ -2,41 +2,53 @@
/* compiled from swfdec_test_initialize.as */
static const unsigned char swfdec_test_initialize[] = {
- 0x88, 0xE4, 0x00, 0x17, 0x00, 0x54, 0x65, 0x73, 0x74, 0x00, 0x4E, 0x61, 0x74, 0x69, 0x76, 0x65,
- 0x00, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x00, 0x61, 0x64, 0x76, 0x61, 0x6E,
- 0x63, 0x65, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F, 0x61, 0x64, 0x76, 0x61, 0x6E, 0x63, 0x65, 0x00,
- 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x6D, 0x6F, 0x76, 0x65, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F,
- 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x6D, 0x6F, 0x76, 0x65, 0x00, 0x6D, 0x6F, 0x75, 0x73, 0x65,
- 0x5F, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F, 0x6D, 0x6F, 0x75, 0x73,
- 0x65, 0x5F, 0x70, 0x72, 0x65, 0x73, 0x73, 0x00, 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x72, 0x65,
- 0x6C, 0x65, 0x61, 0x73, 0x65, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F, 0x6D, 0x6F, 0x75, 0x73, 0x65,
- 0x5F, 0x72, 0x65, 0x6C, 0x65, 0x61, 0x73, 0x65, 0x00, 0x72, 0x65, 0x73, 0x65, 0x74, 0x00, 0x54,
- 0x65, 0x73, 0x74, 0x5F, 0x72, 0x65, 0x73, 0x65, 0x74, 0x00, 0x74, 0x72, 0x61, 0x63, 0x65, 0x00,
- 0x54, 0x65, 0x73, 0x74, 0x5F, 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x72, 0x61, 0x74, 0x65, 0x00,
- 0x54, 0x65, 0x73, 0x74, 0x5F, 0x67, 0x65, 0x74, 0x5F, 0x72, 0x61, 0x74, 0x65, 0x00, 0x61, 0x64,
- 0x64, 0x50, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x00,
- 0x73, 0x00, 0x49, 0x4E, 0x46, 0x4F, 0x3A, 0x20, 0x00, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x45,
- 0x52, 0x52, 0x4F, 0x52, 0x3A, 0x20, 0x00, 0x96, 0x04, 0x00, 0x08, 0x00, 0x08, 0x01, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x00, 0x4E, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x07, 0x00, 0x08,
- 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02,
- 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x03, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08,
- 0x04, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96,
- 0x04, 0x00, 0x08, 0x05, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x06, 0x4E, 0x4F, 0x96, 0x02,
- 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x07, 0x08,
- 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x08, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96,
- 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x09, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00,
- 0x08, 0x0A, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E,
- 0x96, 0x04, 0x00, 0x08, 0x0B, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0C, 0x4E, 0x4F, 0x96,
- 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x0D,
- 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0E, 0x4E, 0x4F, 0x96, 0x03, 0x00, 0x02, 0x08, 0x01,
- 0x1C, 0x96, 0x02, 0x00, 0x08, 0x10, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x0F, 0x07, 0x03, 0x00, 0x00,
- 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x11, 0x52,
- 0x17, 0x96, 0x02, 0x00, 0x08, 0x12, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x27, 0x00,
- 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x12, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x04, 0x00, 0x08,
- 0x14, 0x08, 0x13, 0x1C, 0x47, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x01, 0x1C,
- 0x96, 0x02, 0x00, 0x08, 0x12, 0x52, 0x17, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x15, 0x9B, 0x07, 0x00,
- 0x00, 0x01, 0x00, 0x73, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x13, 0x1C, 0x12, 0x9D, 0x02,
- 0x00, 0x1B, 0x00, 0x96, 0x04, 0x00, 0x08, 0x16, 0x08, 0x13, 0x1C, 0x47, 0x96, 0x07, 0x00, 0x07,
- 0x01, 0x00, 0x00, 0x00, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x12, 0x52, 0x17, 0x1D, 0x00
+ 0x88, 0x23, 0x01, 0x1E, 0x00, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x00, 0x4E, 0x61, 0x74, 0x69, 0x76,
+ 0x65, 0x00, 0x70, 0x72, 0x6F, 0x74, 0x6F, 0x74, 0x79, 0x70, 0x65, 0x00, 0x63, 0x6F, 0x6D, 0x70,
+ 0x61, 0x72, 0x65, 0x00, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x5F, 0x63, 0x6F, 0x6D, 0x70, 0x61, 0x72,
+ 0x65, 0x00, 0x73, 0x61, 0x76, 0x65, 0x00, 0x49, 0x6D, 0x61, 0x67, 0x65, 0x5F, 0x73, 0x61, 0x76,
+ 0x65, 0x00, 0x54, 0x65, 0x73, 0x74, 0x00, 0x61, 0x64, 0x76, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x54,
+ 0x65, 0x73, 0x74, 0x5F, 0x61, 0x64, 0x76, 0x61, 0x6E, 0x63, 0x65, 0x00, 0x6D, 0x6F, 0x75, 0x73,
+ 0x65, 0x5F, 0x6D, 0x6F, 0x76, 0x65, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F, 0x6D, 0x6F, 0x75, 0x73,
+ 0x65, 0x5F, 0x6D, 0x6F, 0x76, 0x65, 0x00, 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x70, 0x72, 0x65,
+ 0x73, 0x73, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F, 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x70, 0x72,
+ 0x65, 0x73, 0x73, 0x00, 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x72, 0x65, 0x6C, 0x65, 0x61, 0x73,
+ 0x65, 0x00, 0x54, 0x65, 0x73, 0x74, 0x5F, 0x6D, 0x6F, 0x75, 0x73, 0x65, 0x5F, 0x72, 0x65, 0x6C,
+ 0x65, 0x61, 0x73, 0x65, 0x00, 0x72, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x00, 0x54, 0x65, 0x73, 0x74,
+ 0x5F, 0x72, 0x65, 0x6E, 0x64, 0x65, 0x72, 0x00, 0x72, 0x65, 0x73, 0x65, 0x74, 0x00, 0x54, 0x65,
+ 0x73, 0x74, 0x5F, 0x72, 0x65, 0x73, 0x65, 0x74, 0x00, 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x54,
+ 0x65, 0x73, 0x74, 0x5F, 0x74, 0x72, 0x61, 0x63, 0x65, 0x00, 0x72, 0x61, 0x74, 0x65, 0x00, 0x54,
+ 0x65, 0x73, 0x74, 0x5F, 0x67, 0x65, 0x74, 0x5F, 0x72, 0x61, 0x74, 0x65, 0x00, 0x61, 0x64, 0x64,
+ 0x50, 0x72, 0x6F, 0x70, 0x65, 0x72, 0x74, 0x79, 0x00, 0x70, 0x72, 0x69, 0x6E, 0x74, 0x00, 0x73,
+ 0x00, 0x49, 0x4E, 0x46, 0x4F, 0x3A, 0x20, 0x00, 0x65, 0x72, 0x72, 0x6F, 0x72, 0x00, 0x45, 0x52,
+ 0x52, 0x4F, 0x52, 0x3A, 0x20, 0x00, 0x96, 0x04, 0x00, 0x08, 0x00, 0x08, 0x01, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x00, 0x4E, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x02,
+ 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x03, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x04,
+ 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x00, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04,
+ 0x00, 0x08, 0x05, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x06, 0x4E, 0x4F, 0x96, 0x04, 0x00,
+ 0x08, 0x07, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x07, 0x4E, 0x1D, 0x96, 0x02, 0x00, 0x08,
+ 0x07, 0x1C, 0x96, 0x07, 0x00, 0x08, 0x02, 0x07, 0x00, 0x00, 0x00, 0x00, 0x43, 0x4F, 0x96, 0x02,
+ 0x00, 0x08, 0x07, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x08, 0x08,
+ 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x09, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96,
+ 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x0A, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00,
+ 0x08, 0x0B, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E,
+ 0x96, 0x04, 0x00, 0x08, 0x0C, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0D, 0x4E, 0x4F, 0x96,
+ 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x0E,
+ 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x0F, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C,
+ 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08, 0x10, 0x08, 0x01, 0x1C, 0x96, 0x02,
+ 0x00, 0x08, 0x11, 0x4E, 0x4F, 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02,
+ 0x4E, 0x96, 0x04, 0x00, 0x08, 0x12, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x13, 0x4E, 0x4F,
+ 0x96, 0x02, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x04, 0x00, 0x08,
+ 0x14, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x15, 0x4E, 0x4F, 0x96, 0x03, 0x00, 0x02, 0x08,
+ 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x17, 0x4E, 0x96, 0x09, 0x00, 0x08, 0x16, 0x07, 0x03, 0x00,
+ 0x00, 0x00, 0x08, 0x07, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x02, 0x4E, 0x96, 0x02, 0x00, 0x08, 0x18,
+ 0x52, 0x17, 0x96, 0x02, 0x00, 0x08, 0x19, 0x9B, 0x07, 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x27,
+ 0x00, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x12, 0x9D, 0x02, 0x00, 0x1B, 0x00, 0x96, 0x04, 0x00,
+ 0x08, 0x1B, 0x08, 0x1A, 0x1C, 0x47, 0x96, 0x07, 0x00, 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x01,
+ 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x52, 0x17, 0x1D, 0x96, 0x02, 0x00, 0x08, 0x1C, 0x9B, 0x07,
+ 0x00, 0x00, 0x01, 0x00, 0x73, 0x00, 0x27, 0x00, 0x96, 0x02, 0x00, 0x08, 0x1A, 0x1C, 0x12, 0x9D,
+ 0x02, 0x00, 0x1B, 0x00, 0x96, 0x04, 0x00, 0x08, 0x1D, 0x08, 0x1A, 0x1C, 0x47, 0x96, 0x07, 0x00,
+ 0x07, 0x01, 0x00, 0x00, 0x00, 0x08, 0x01, 0x1C, 0x96, 0x02, 0x00, 0x08, 0x19, 0x52, 0x17, 0x1D,
+ 0x00
};
diff --git a/test/swfdec_test_test.c b/test/swfdec_test_test.c
index b0e04f4..f1a5d9f 100644
--- a/test/swfdec_test_test.c
+++ b/test/swfdec_test_test.c
@@ -26,6 +26,7 @@
#include "swfdec_test_test.h"
#include "swfdec_test_function.h"
+#include "swfdec_test_image.h"
static void
swfdec_test_throw (SwfdecAsContext *cx, const char *message, ...)
@@ -346,6 +347,36 @@ swfdec_test_test_mouse_release (SwfdecAsContext *cx, SwfdecAsObject *object, gui
swfdec_player_mouse_release (test->player, x, y, button);
}
+SWFDEC_TEST_FUNCTION ("Test_render", swfdec_test_test_render, 0)
+void
+swfdec_test_test_render (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
+ SwfdecAsValue *argv, SwfdecAsValue *retval)
+{
+ SwfdecTestTest *test;
+ SwfdecAsObject *image;
+ int x, y, w, h;
+ cairo_t *cr;
+
+ SWFDEC_AS_CHECK (SWFDEC_TYPE_TEST_TEST, &test, "|iiii", &x, &y, &w, &h);
+
+ if (!swfdec_test_test_ensure_player (test))
+ return;
+
+ if (argc == 0) {
+ swfdec_player_get_size (test->player, &w, &h);
+ if (w < 0 || h < 0)
+ swfdec_player_get_default_size (test->player, (guint *) &w, (guint *) &h);
+ }
+ image = swfdec_test_image_new (cx, w, h);
+ if (image == NULL)
+ return;
+ cr = cairo_create (SWFDEC_TEST_IMAGE (image)->surface);
+ cairo_translate (cr, -x, -y);
+ swfdec_player_render (test->player, cr, x, y, w, h);
+ cairo_destroy (cr);
+ SWFDEC_AS_VALUE_SET_OBJECT (retval, image);
+}
+
SWFDEC_TEST_FUNCTION ("Test", swfdec_test_test_new, swfdec_test_test_get_type)
void
swfdec_test_test_new (SwfdecAsContext *cx, SwfdecAsObject *object, guint argc,
More information about the Swfdec
mailing list