]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[test] Generalise pnm_ok() to pixbuf_ok()
authorMichael Brown <mcb30@ipxe.org>
Mon, 6 Jan 2014 19:10:18 +0000 (19:10 +0000)
committerMichael Brown <mcb30@ipxe.org>
Sun, 12 Jan 2014 21:53:16 +0000 (22:53 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/tests/pixbuf_test.c [new file with mode: 0644]
src/tests/pixbuf_test.h [new file with mode: 0644]
src/tests/pnm_test.c

diff --git a/src/tests/pixbuf_test.c b/src/tests/pixbuf_test.c
new file mode 100644 (file)
index 0000000..15cd33d
--- /dev/null
@@ -0,0 +1,76 @@
+/*
+ * Copyright (C) 2013 Michael Brown <mbrown@fensystems.co.uk>.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License as
+ * published by the Free Software Foundation; either version 2 of the
+ * License, or any later version.
+ *
+ * This program 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
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+ * 02110-1301, USA.
+ */
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+/** @file
+ *
+ * Pixel buffer self-tests
+ *
+ */
+
+/* Forcibly enable assertions */
+#undef NDEBUG
+
+#include <assert.h>
+#include <ipxe/image.h>
+#include <ipxe/pixbuf.h>
+#include <ipxe/test.h>
+#include "pixbuf_test.h"
+
+/**
+ * Report pixel buffer test result
+ *
+ * @v test             Pixel buffer test
+ * @v file             Test code file
+ * @v line             Test code line
+ */
+void pixbuf_okx ( struct pixel_buffer_test *test, const char *file,
+                 unsigned int line ) {
+       struct pixel_buffer *pixbuf;
+       int rc;
+
+       /* Sanity check */
+       assert ( ( test->width * test->height * sizeof ( test->data[0] ) )
+                == test->len );
+
+       /* Correct image data pointer */
+       test->image->data = virt_to_user ( ( void * ) test->image->data );
+
+       /* Check that image is detected as PNM */
+       okx ( image_probe ( test->image ) == 0, file, line );
+       okx ( test->image->type == test->type, file, line );
+
+       /* Check that a pixel buffer can be created from the image */
+       okx ( ( rc = image_pixbuf ( test->image, &pixbuf ) ) == 0, file, line );
+       if ( rc == 0 ) {
+
+               /* Check pixel buffer dimensions */
+               okx ( pixbuf->width == test->width, file, line );
+               okx ( pixbuf->height == test->height, file, line );
+
+               /* Check pixel buffer data */
+               okx ( pixbuf->len == test->len, file, line );
+               okx ( memcmp_user ( pixbuf->data, 0,
+                                   virt_to_user ( test->data ), 0,
+                                   test->len ) == 0, file, line );
+
+               pixbuf_put ( pixbuf );
+       }
+}
diff --git a/src/tests/pixbuf_test.h b/src/tests/pixbuf_test.h
new file mode 100644 (file)
index 0000000..394f7f5
--- /dev/null
@@ -0,0 +1,66 @@
+#ifndef _PIXBUF_TEST_H
+#define _PIXBUF_TEST_H
+
+FILE_LICENCE ( GPL2_OR_LATER );
+
+#include <stdint.h>
+#include <ipxe/refcnt.h>
+#include <ipxe/image.h>
+#include <ipxe/test.h>
+
+/** A pixel buffer test */
+struct pixel_buffer_test {
+       /** Image type */
+       struct image_type *type;
+       /** Source image */
+       struct image *image;
+       /** Pixel data */
+       const uint32_t *data;
+       /** Length of pixel data */
+       size_t len;
+       /** Width */
+       unsigned int width;
+       /** Height */
+       unsigned int height;
+};
+
+/**
+ * Define a pixel buffer test
+ *
+ * @v _name            Test name
+ * @v _type            Test image file type
+ * @v _file            Test image file data
+ * @v _width           Expected pixel buffer width
+ * @v _height          Expected pixel buffer height
+ * @v _data            Expected pixel buffer data
+ * @ret test           Pixel buffer test
+ */
+#define PIX( _name, _type, _file, _width, _height, _data )             \
+       static const char _name ## __file[] = _file;                    \
+       static const uint32_t _name ## __data[] = _data;                \
+       static struct image _name ## __image = {                        \
+               .refcnt = REF_INIT ( ref_no_free ),                     \
+               .name = #_name,                                         \
+               .data = ( userptr_t ) ( _name ## __file ),              \
+               .len = sizeof ( _name ## __file ),                      \
+       };                                                              \
+       static struct pixel_buffer_test _name = {                       \
+               .type = _type,                                          \
+               .image = & _name ## __image,                            \
+               .data = _name ## __data,                                \
+               .len = sizeof ( _name ## __data ),                      \
+               .width = _width,                                        \
+               .height = _height,                                      \
+       };
+
+extern void pixbuf_okx ( struct pixel_buffer_test *test, const char *file,
+                        unsigned int line );
+
+/**
+ * Report pixel buffer test result
+ *
+ * @v test             Pixel buffer test
+ */
+#define pixbuf_ok( test ) pixbuf_okx ( test, __FILE__, __LINE__ )
+
+#endif /* _PIXBUF_TEST_H */
index 099ccbc59ad91c8f8d63522199dd1bd8409504c0..26b0c0726347407a13b8a0d294aeb8621925db18 100644 (file)
@@ -33,44 +33,13 @@ FILE_LICENCE ( GPL2_OR_LATER );
 #include <ipxe/pixbuf.h>
 #include <ipxe/pnm.h>
 #include <ipxe/test.h>
+#include "pixbuf_test.h"
 
 /** Define inline pixel data */
 #define DATA(...) { __VA_ARGS__ }
 
-/** A PNM test */
-struct pnm_test {
-       /** Source image */
-       struct image *image;
-       /** Pixel data */
-       const uint32_t *data;
-       /** Length of pixel data */
-       size_t len;
-       /** Width */
-       unsigned int width;
-       /** Height */
-       unsigned int height;
-};
-
-/** Define a PNM test */
-#define PNM( NAME, FILE, WIDTH, HEIGHT, DATA )                         \
-       static const char NAME ## _file[] = FILE;                       \
-       static const uint32_t NAME ## _data[] = DATA;                   \
-       static struct image NAME ## _image = {                          \
-               .refcnt = REF_INIT ( ref_no_free ),                     \
-               .name = #NAME,                                          \
-               .data = ( userptr_t ) ( NAME ## _file ),                \
-               .len = sizeof ( NAME ## _file ),                        \
-       };                                                              \
-       static struct pnm_test NAME = {                                 \
-               .image = & NAME ## _image,                              \
-               .data = NAME ## _data,                                  \
-               .len = sizeof ( NAME ## _data ),                        \
-               .width = WIDTH,                                         \
-               .height = HEIGHT,                                       \
-       };
-
 /** PBM ASCII example (from Wikipedia) */
-PNM ( pbm_ascii,
+PIX ( pbm_ascii, &pnm_image_type,
       "P1\n"
       "# This is an example bitmap of the letter \"J\"\n"
       "6 10\n"
@@ -97,7 +66,7 @@ PNM ( pbm_ascii,
             0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff ) );
 
 /** PGM ASCII example (from Wikipedia) */
-PNM ( pgm_ascii,
+PIX ( pgm_ascii, &pnm_image_type,
       "P2\n"
       "# Shows the word \"FEEP\" (example from Netpbm man page on PGM)\n"
       "24 7\n"
@@ -140,7 +109,7 @@ PNM ( pgm_ascii,
             0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 ) );
 
 /** PPM ASCII example (from Wikipedia) */
-PNM ( ppm_ascii,
+PIX ( ppm_ascii, &pnm_image_type,
       "P3\n"
       "# The P3 means colors are in ASCII, then 3 columns and 2 rows,\n"
       "# then 255 for max color, then RGB triplets\n"
@@ -152,7 +121,7 @@ PNM ( ppm_ascii,
       DATA ( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xffffff, 0x000000 ) );
 
 /** PBM ASCII with no space between pixel values */
-PNM ( pbm_ascii_no_space,
+PIX ( pbm_ascii_no_space, &pnm_image_type,
       "P1\n"
       "3 3\n"
       "001\n"
@@ -163,7 +132,7 @@ PNM ( pbm_ascii_no_space,
             0x000000, 0x000000, 0x000000 ) );
 
 /** PBM binary example (converted from Wikipedia) */
-PNM ( pbm_binary,
+PIX ( pbm_binary, &pnm_image_type,
       DATA ( 0x50, 0x34, 0x0a, 0x23, 0x20, 0x43, 0x52, 0x45, 0x41, 0x54, 0x4f,
             0x52, 0x3a, 0x20, 0x47, 0x49, 0x4d, 0x50, 0x20, 0x50, 0x4e, 0x4d,
             0x20, 0x46, 0x69, 0x6c, 0x74, 0x65, 0x72, 0x20, 0x56, 0x65, 0x72,
@@ -183,7 +152,7 @@ PNM ( pbm_binary,
             0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff, 0xffffff ) );
 
 /** PGM binary example (converted from Wikipedia) */
-PNM ( pgm_binary,
+PIX ( pgm_binary, &pnm_image_type,
       DATA ( 0x50, 0x35, 0x0a, 0x32, 0x34, 0x20, 0x37, 0x0a, 0x31, 0x35, 0x0a,
             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
@@ -232,68 +201,26 @@ PNM ( pgm_binary,
             0x000000, 0x000000, 0x000000, 0x000000, 0x000000, 0x000000 ) );
 
 /** PPM binary example (converted from Wikipedia) */
-PNM ( ppm_binary,
+PIX ( ppm_binary, &pnm_image_type,
       DATA ( 0x50, 0x36, 0x0a, 0x33, 0x20, 0x32, 0x0a, 0x32, 0x35, 0x35, 0x0a,
             0xff, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff,
             0x00, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00 ),
       3, 2,
       DATA ( 0xff0000, 0x00ff00, 0x0000ff, 0xffff00, 0xffffff, 0x000000 ) );
 
-/**
- * Report PNM test result
- *
- * @v test             PNM test
- * @v file             Test code file
- * @v line             Test code line
- */
-static void pnm_okx ( struct pnm_test *test, const char *file,
-                     unsigned int line ) {
-       struct pixel_buffer *pixbuf;
-       int rc;
-
-       /* Sanity check */
-       assert ( ( test->width * test->height * sizeof ( test->data[0] ) )
-                == test->len );
-
-       /* Correct image data pointer */
-       test->image->data = virt_to_user ( ( void * ) test->image->data );
-
-       /* Check that image is detected as PNM */
-       okx ( image_probe ( test->image ) == 0, file, line );
-       okx ( test->image->type == &pnm_image_type, file, line );
-
-       /* Check that a pixel buffer can be created from the image */
-       okx ( ( rc = image_pixbuf ( test->image, &pixbuf ) ) == 0, file, line );
-       if ( rc == 0 ) {
-
-               /* Check pixel buffer dimensions */
-               okx ( pixbuf->width == test->width, file, line );
-               okx ( pixbuf->height == test->height, file, line );
-
-               /* Check pixel buffer data */
-               okx ( pixbuf->len == test->len, file, line );
-               okx ( memcmp_user ( pixbuf->data, 0,
-                                   virt_to_user ( test->data ), 0,
-                                   test->len ) == 0, file, line );
-
-               pixbuf_put ( pixbuf );
-       }
-}
-#define pnm_ok( test ) pnm_okx ( test, __FILE__, __LINE__ )
-
 /**
  * Perform PNM self-test
  *
  */
 static void pnm_test_exec ( void ) {
 
-       pnm_ok ( &pbm_ascii );
-       pnm_ok ( &pgm_ascii );
-       pnm_ok ( &ppm_ascii );
-       pnm_ok ( &pbm_ascii_no_space );
-       pnm_ok ( &pbm_binary );
-       pnm_ok ( &pgm_binary );
-       pnm_ok ( &ppm_binary );
+       pixbuf_ok ( &pbm_ascii );
+       pixbuf_ok ( &pgm_ascii );
+       pixbuf_ok ( &ppm_ascii );
+       pixbuf_ok ( &pbm_ascii_no_space );
+       pixbuf_ok ( &pbm_binary );
+       pixbuf_ok ( &pgm_binary );
+       pixbuf_ok ( &ppm_binary );
 }
 
 /** PNM self-test */