summaryrefslogtreecommitdiff
path: root/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c
diff options
context:
space:
mode:
Diffstat (limited to 'Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c')
-rw-r--r--Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c169
1 files changed, 169 insertions, 0 deletions
diff --git a/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c b/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c
new file mode 100644
index 00000000000..dd8f0196a59
--- /dev/null
+++ b/Build/source/libs/gd/libgd-src/tests/gdimagefile/gdnametest.c
@@ -0,0 +1,169 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+#include "gd.h"
+#include "gdtest.h"
+#include "../test_config.h"
+
+#define WIDTH 60
+#define HEIGHT 50
+#define LX (WIDTH/2) // Line X
+#define LY (HEIGHT/2) // Line Y
+#define HT 2 // Half of line-thickness
+
+
+gdImagePtr mkwhite(int x, int y)
+{
+ gdImagePtr im;
+
+ im = gdImageCreateTrueColor(x, y);
+ gdImageFilledRectangle(im, 0, 0, x-1, y-1,
+ gdImageColorExactAlpha(im, 255, 255, 255, 0));
+
+ gdTestAssert(im != NULL);
+
+ gdImageSetInterpolationMethod(im, GD_BICUBIC); // FP interp'n
+
+ return im;
+}/* mkwhite*/
+
+
+gdImagePtr mkcross() {
+ gdImagePtr im;
+ int fg, n;
+
+ im = mkwhite(WIDTH, HEIGHT);
+ fg = gdImageColorAllocate(im, 0, 0, 0);
+
+ for (n = -HT; n < HT; n++) {
+ gdImageLine(im, LX-n, 0, LX-n, HEIGHT-1, fg);
+ gdImageLine(im, 0, LY-n, WIDTH-1, LY-n, fg);
+ }/* for */
+
+ return im;
+}/* mkcross*/
+
+
+
+
+void
+do_test() {
+
+ gdTestAssertMsg(strchr("123",'2') != 0, "strchr() is not functional.\n",1);
+ gdTestAssertMsg(strcasecmp("123abC","123Abc") == 0, "strcasecmp() is not functional.\n",1);
+
+ int n;
+ struct {
+ const char *nm; // Filename
+ unsigned maxdiff; // Maximum total pixel diff
+ int required; // 1 -> image type always supported, -1 -> skip it
+ int readonly; // 1 -> gd can only read this type
+ } names[] = {
+ {"img.png", 0, 0, 0},
+ {"img.gif", 5, 1, 0}, // This seems to come from tc<->palette
+ {"img.GIF", 5, 1, 0}, // Test for case insensitivity
+ {"img.gd", 0, 1, 0},
+ {"img.gd2", 0, 0, 0},
+ {"img.jpg", 25, 0, 0},
+ {"img.jpeg", 25, 0, 0},
+ {"img.wbmp", 0, 1, 0},
+ {"img.bmp", 0, 1, 0},
+ {"img-ref.xpm", 0, 0, 1},
+
+ // These break the test so I'm skipping them since the point
+ // of this test is not those loaders.
+ {"img-ref.xbm", 0, -1, 1},
+ {"img-ref.tga", 0, -1, 1},
+ {"img.webp", 0, -1, 0},
+ {"img.tiff", 0, -1, 0},
+
+ {NULL, 0}
+ };
+
+ for (n = 0; names[n].nm; n++) {
+ gdImagePtr orig, copy;
+ int status;
+ char full_filename[255];
+
+ /* Some image readers are buggy and crash the program so we
+ * skip them. Bug fixers should remove these from the list of
+ * skipped items as bugs are fixed. */
+ if (names[n].required < 0) {
+ printf("Skipping test for '%s'. FIX THIS!\n", names[n].nm);
+ continue;
+ }/* if */
+
+ /* Skip this file if the current library build doesn't support
+ * it. (If it's one of the built-in types, *that* a different
+ * problem; we assert that here.) */
+ if (!gdSupportsFileType(names[n].nm, 0)) {
+ gdTestAssertMsg(!names[n].required, "GD doesn't support required file type: %s\n", full_filename);
+ continue;
+ }/* if */
+
+ orig = mkcross();
+
+
+ #ifdef GDTEST_TOP_DIR
+
+ snprintf(full_filename, sizeof(full_filename), GDTEST_TOP_DIR"/gdimagefile/%s",
+ names[n].nm);
+
+ #else
+ /* Prepend the test directory; this is expected to be run in
+ * the parent dir. */
+ snprintf(full_filename, sizeof(full_filename), "gdimagefile/%s",
+ names[n].nm);
+ #endif
+
+
+ /* Write the image unless writing is not supported. */
+ if (!names[n].readonly) {
+ status = gdImageFile(orig, full_filename);
+ gdTestAssertMsg(status == GD_TRUE, "Failed to create %s\n", full_filename);
+ }/* if */
+
+ copy = gdImageCreateFromFile(full_filename);
+ gdTestAssertMsg(!!copy, "Failed to load %s\n", full_filename);
+ if (!copy) continue;
+
+ /* Debug printf. */
+ //printf("%s -> %d\n", full_filename, gdMaxPixelDiff(orig, copy));
+
+ gdTestAssertMsg(gdMaxPixelDiff(orig, copy) <= names[n].maxdiff,"Pixels different on %s\n", full_filename, full_filename);
+
+ if (!names[n].readonly) {
+ status = remove(full_filename);
+ gdTestAssertMsg(status == 0, "Failed to delete %s\n", full_filename);
+ }/* if */
+
+ gdImageDestroy(orig);
+ gdImageDestroy(copy);
+ }/* for */
+
+}/* do_test*/
+
+
+void
+do_errortest() {
+ gdImagePtr im;
+
+ im = mkcross();
+
+ gdTestAssert(!gdImageFile(im, "img.xpng"));
+ gdTestAssert(!gdImageFile(im, "bobo"));
+ gdTestAssert(!gdImageFile(im, "png"));
+ gdTestAssert(!gdImageFile(im, ""));
+
+ gdImageDestroy(im);
+}/* do_errortest*/
+
+
+int main(int argc, char **argv)
+{
+
+ do_test();
+ do_errortest();
+
+ return gdNumFailures();
+}