summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorBenjamin Otte <otte@gnome.org>2004-06-20 17:05:40 +0000
committerBenjamin Otte <otte@gnome.org>2004-06-20 17:05:40 +0000
commit02c304efb95636f51f962f17a97d9d020f72da08 (patch)
treee95d7b07a78d1cc49ee0c71c48d2dfefbacf4256 /tests
parentda7ece5e274a5be5acbd4632f3a7bfc99bad1619 (diff)
gst/gstvalue.c: test that start is smaller then end
Original commit message from CVS: * gst/gstvalue.c: (gst_value_set_int_range): test that start is smaller then end * libs/gst/bytestream/Makefile.am: * libs/gst/bytestream/filepad.c: * libs/gst/bytestream/filepad.h: add GstFilePad - a pad that behaves like a FILE* * testsuite/bytestream/.cvsignore: * testsuite/bytestream/Makefile.am: * testsuite/bytestream/filepadsink.c: test for the GstFilePad
Diffstat (limited to 'tests')
-rw-r--r--tests/old/testsuite/bytestream/.gitignore1
-rw-r--r--tests/old/testsuite/bytestream/Makefile.am3
-rw-r--r--tests/old/testsuite/bytestream/filepadsink.c281
3 files changed, 284 insertions, 1 deletions
diff --git a/tests/old/testsuite/bytestream/.gitignore b/tests/old/testsuite/bytestream/.gitignore
index 7df60c92d..6b90160e0 100644
--- a/tests/old/testsuite/bytestream/.gitignore
+++ b/tests/old/testsuite/bytestream/.gitignore
@@ -6,3 +6,4 @@ Makefile.in
.deps
.libs
test1
+filepadsink
diff --git a/tests/old/testsuite/bytestream/Makefile.am b/tests/old/testsuite/bytestream/Makefile.am
index 583c94b92..77ea58526 100644
--- a/tests/old/testsuite/bytestream/Makefile.am
+++ b/tests/old/testsuite/bytestream/Makefile.am
@@ -1,9 +1,10 @@
include ../Rules
-tests_pass =
+tests_pass = filepadsink
tests_fail = test1
tests_ignore =
test1_SOURCES = test1.c gstbstest.c
test1_LDFLAGS = $(top_builddir)/libs/gst/bytestream/libgstbytestream.la
+filepadsink_LDFLAGS = $(top_builddir)/libs/gst/bytestream/libgstbytestream.la
diff --git a/tests/old/testsuite/bytestream/filepadsink.c b/tests/old/testsuite/bytestream/filepadsink.c
new file mode 100644
index 000000000..410cf643a
--- /dev/null
+++ b/tests/old/testsuite/bytestream/filepadsink.c
@@ -0,0 +1,281 @@
+/* GStreamer
+ * Copyright (C) 2004 Benjamin Otte <otte@gnome.org>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
+#include <gst/gst.h>
+#include <gst/bytestream/filepad.h>
+#include <stdio.h>
+#include <string.h>
+
+#define GST_TYPE_FP_SINK \
+ (gst_fp_sink_get_type())
+#define GST_FP_SINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_FP_SINK,GstFpSink))
+#define GST_FP_SINK_CLASS(klass) \
+ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_FP_SINK,GstFpSinkClass))
+#define GST_IS_FP_SINK(obj) \
+ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_FP_SINK))
+#define GST_IS_FP_SINK_CLASS(obj) \
+ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_FP_SINK))
+
+
+typedef struct _GstFpSink GstFpSink;
+typedef struct _GstFpSinkClass GstFpSinkClass;
+
+struct _GstFpSink
+{
+ GstElement element;
+ /* pads */
+ GstFilePad *sinkpad;
+
+ /* fd */
+ FILE *stream;
+ guint state;
+};
+
+struct _GstFpSinkClass
+{
+ GstElementClass parent_class;
+};
+
+GST_BOILERPLATE (GstFpSink, gst_fp_sink, GstElement, GST_TYPE_ELEMENT);
+
+static void do_tests (GstFilePad * pad);
+
+
+static void
+gst_fp_sink_base_init (gpointer g_class)
+{
+}
+
+static void
+gst_fp_sink_class_init (GstFpSinkClass * klass)
+{
+}
+
+static GstStaticPadTemplate template = GST_STATIC_PAD_TEMPLATE ("sink",
+ GST_PAD_SINK,
+ GST_PAD_ALWAYS,
+ GST_STATIC_CAPS ("ANY")
+ );
+
+static void
+gst_fp_sink_init (GstFpSink * fp)
+{
+ GST_FLAG_SET (fp, GST_ELEMENT_EVENT_AWARE);
+
+ fp->sinkpad =
+ GST_FILE_PAD (gst_file_pad_new (gst_static_pad_template_get (&template),
+ "src"));
+ gst_file_pad_set_iterate_function (fp->sinkpad, do_tests);
+ gst_element_add_pad (GST_ELEMENT (fp), GST_PAD (fp->sinkpad));
+}
+
+#define THE_CHECK(result) G_STMT_START{ \
+ gint64 pos = gst_file_pad_tell(fp->sinkpad); \
+ if (pos >= 0) \
+ g_assert (pos == ftell (fp->stream)); \
+ g_print ("%s (%"G_GINT64_FORMAT")\n", result ? "OK" : "no", pos); \
+ return result; \
+}G_STMT_END
+#define FAIL THE_CHECK(FALSE)
+#define SUCCESS THE_CHECK(TRUE)
+
+static gboolean
+fp_read (GstFpSink * fp, guint size)
+{
+ guint8 buf[size], buf2[size];
+ gint64 amount;
+
+ g_print ("reading %u bytes...", size);
+ amount = gst_file_pad_read (fp->sinkpad, buf, size);
+ if (amount == -EAGAIN)
+ FAIL;
+ g_assert (amount == size);
+ amount = fread (buf2, 1, amount, fp->stream);
+ g_assert (amount == size);
+ if (memcmp (buf, buf2, amount) != 0)
+ g_assert_not_reached ();
+ fp->state++;
+ SUCCESS;
+}
+
+static gboolean
+fp_try_read (GstFpSink * fp, guint size)
+{
+ guint8 buf[size], buf2[size];
+ gint64 amount;
+ size_t amount2;
+
+ g_print ("reading %u bytes...", size);
+ amount = gst_file_pad_try_read (fp->sinkpad, buf, size);
+ if (amount == -EAGAIN)
+ FAIL;
+ g_assert (amount > 0);
+ amount2 = fread (buf2, 1, amount, fp->stream);
+ g_assert (amount == amount2);
+ if (memcmp (buf, buf2, amount) != 0)
+ g_assert_not_reached ();
+ fp->state++;
+ SUCCESS;
+}
+
+static gboolean
+fp_seek (GstFpSink * fp, gint64 pos, GstSeekType whence)
+{
+ int seek_type = whence == GST_SEEK_METHOD_SET ? SEEK_SET :
+ whence == GST_SEEK_METHOD_CUR ? SEEK_CUR : SEEK_END;
+
+ g_print ("seeking to %s %" G_GINT64_FORMAT " bytes...",
+ whence == GST_SEEK_METHOD_SET ? "" : whence ==
+ GST_SEEK_METHOD_CUR ? "+-" : "-", pos);
+ if (gst_file_pad_seek (fp->sinkpad, pos, whence) != 0)
+ g_assert_not_reached ();
+ if (fseek (fp->stream, pos, seek_type) != 0)
+ g_assert_not_reached ();
+ fp->state++;
+ SUCCESS;
+}
+
+static gboolean
+fp_eof (GstFpSink * fp)
+{
+ guint8 buf;
+
+ g_print ("checking for EOF...");
+ if (!gst_file_pad_eof (fp->sinkpad))
+ FAIL;
+ if (fread (&buf, 1, 1, fp->stream) != 0)
+ g_assert_not_reached ();
+ fp->state++;
+ SUCCESS;
+}
+
+#define MIN_SIZE 10050
+#define MAX_SIZE 1000000
+static void
+do_tests (GstFilePad * pad)
+{
+ GstFpSink *fp = GST_FP_SINK (gst_pad_get_parent (GST_PAD (pad)));
+
+ while (TRUE) {
+ switch (fp->state) {
+ case 0:
+ if (!fp_try_read (fp, 50))
+ return;
+ break;
+ case 1:
+ if (!fp_try_read (fp, MAX_SIZE)) /* more than file size */
+ return;
+ break;
+ case 2:
+ if (!fp_seek (fp, 0, GST_SEEK_METHOD_SET))
+ return;
+ break;
+ case 3:
+ if (!fp_read (fp, 50))
+ return;
+ break;
+ case 4:
+ if (!fp_read (fp, MIN_SIZE - 50)) /* bigger than 1 buffer */
+ return;
+ break;
+ case 5:
+ if (!fp_seek (fp, -200, GST_SEEK_METHOD_CUR))
+ return;
+ break;
+ case 6:
+ if (!fp_read (fp, 50))
+ return;
+ break;
+ case 7:
+ if (!fp_seek (fp, 50, GST_SEEK_METHOD_CUR))
+ return;
+ break;
+ case 8:
+ if (!fp_read (fp, 50))
+ return;
+ break;
+ case 9:
+ if (!fp_seek (fp, MIN_SIZE - 50, GST_SEEK_METHOD_SET))
+ return;
+ break;
+ case 10:
+ if (!fp_read (fp, 50))
+ return;
+ break;
+ case 11:
+ if (!fp_seek (fp, 0, GST_SEEK_METHOD_END))
+ return;
+ break;
+ case 12:
+ if (!fp_eof (fp))
+ return;
+ gst_element_set_eos (GST_ELEMENT (fp));
+ return;
+ default:
+ g_assert_not_reached ();
+ }
+ }
+}
+
+#ifndef THE_FILE
+# define THE_FILE "../../configure.ac"
+#endif
+gint
+main (gint argc, gchar ** argv)
+{
+ GstElement *pipeline, *src, *sink;
+ long size;
+
+ gst_init (&argc, &argv);
+ gst_library_load ("bytestream");
+
+ pipeline = gst_element_factory_make ("pipeline", NULL);
+ g_assert (pipeline);
+ src = gst_element_factory_make ("filesrc", NULL);
+ g_assert (src);
+ sink = g_object_new (GST_TYPE_FP_SINK, NULL);
+ gst_object_set_name (GST_OBJECT (sink), "sink");
+ gst_bin_add_many (GST_BIN (pipeline), src, sink, NULL);
+ if (!gst_element_link (src, sink))
+ g_assert_not_reached ();
+ g_object_set (src, "location", THE_FILE, NULL);
+ GST_FP_SINK (sink)->stream = fopen (THE_FILE, "r");
+ g_assert (GST_FP_SINK (sink)->stream);
+ /* check correct file sizes */
+ if (fseek (GST_FP_SINK (sink)->stream, 0, SEEK_END) != 0)
+ g_assert_not_reached ();
+ size = ftell (GST_FP_SINK (sink)->stream);
+ if (fseek (GST_FP_SINK (sink)->stream, 0, SEEK_SET) != 0)
+ g_assert_not_reached ();
+ g_assert (size >= MIN_SIZE);
+ g_assert (size <= MAX_SIZE);
+
+ if (gst_element_set_state (pipeline, GST_STATE_PLAYING) != GST_STATE_SUCCESS)
+ g_assert_not_reached ();
+ while (gst_bin_iterate (GST_BIN (pipeline)));
+
+ g_assert (GST_FP_SINK (sink)->state == 13);
+ g_object_unref (pipeline);
+ pipeline = NULL;
+ return 0;
+}