Test: Add some minimal regression testing

This commit is contained in:
Kim Woelders 2019-11-11 19:22:02 +01:00
parent e9d84bd216
commit 8ac8041adf
25 changed files with 935 additions and 2 deletions

View File

@ -2,7 +2,11 @@ AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = src data doc
if BUILD_TEST
SUBDIRS_TEST = test
endif
SUBDIRS = src data doc $(SUBDIRS_TEST)
CLEANFILES = $(PACKAGE).spec

View File

@ -4,7 +4,7 @@ AC_CONFIG_MACRO_DIR([m4])
AC_CANONICAL_BUILD
AC_CANONICAL_HOST
AM_INIT_AUTOMAKE(1.6 dist-xz)
AM_INIT_AUTOMAKE(1.6 dist-xz -Wno-portability)
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
AM_CONDITIONAL(SRC_IS_GIT, test -d $srcdir/.git)
@ -12,6 +12,7 @@ AM_CONDITIONAL(SRC_IS_GIT, test -d $srcdir/.git)
AC_C_BIGENDIAN
AC_PROG_CC
AM_PROG_AS
AC_PROG_CXX
AC_C_CONST
@ -388,6 +389,7 @@ else
fi
AM_CONDITIONAL(BUILD_ID3_LOADER, test "$id3_ok" = yes)
AM_CONDITIONAL(BUILD_TEST, false)
EC_C_WARNINGS()
EC_C_VISIBILITY(yes)
@ -407,6 +409,7 @@ data/Makefile
data/fonts/Makefile
data/images/Makefile
doc/Makefile
test/Makefile
README
])
AC_OUTPUT

4
test/.gitignore vendored Normal file
View File

@ -0,0 +1,4 @@
/*.d
/images/empty.*
/images/nonex.*
/images/icon-64.*.*

53
test/Makefile.am Normal file
View File

@ -0,0 +1,53 @@
# Unit test makefile
#
noinst_PROGRAMS = $(GTESTS)
GTEST_LIBS = -lgtest -lstdc++
GTESTS = test_file
GTESTS += test_load
GTESTS += test_save
AM_CFLAGS = -Wall -Wextra -Werror -Wno-unused-parameter
AM_CFLAGS += $(CFLAGS_ASAN)
AM_CXXFLAGS = $(AM_CFLAGS)
AM_CPPFLAGS = -I $(top_builddir) -I $(top_srcdir)/src/lib
AM_CPPFLAGS += -D SRC_DIR='"$(top_srcdir)"'
AM_CPPFLAGS += -D BUILD_TEST=1
# Must have proper -lImlib2 on all progs
LIBS = -L$(top_builddir)/src/lib -lImlib2
LIBS += $(GTEST_LIBS)
vpath %.c $(top_srcdir)/src/lib
test_file_SOURCES = test_file.cpp file.c
test_file_LDADD = $(LIBS)
test_load_SOURCES = test_load.cpp
test_load_LDADD = $(LIBS)
test_save_SOURCES = test_save.cpp
test_save_LDADD = $(LIBS)
TESTS_RUN = $(addprefix run-, $(GTESTS))
TEST_ENV = IMLIB2_LOADER_PATH=$(top_builddir)/src/modules/loaders/.libs
VG_PROG = valgrind --leak-check=full
all-local: run
.PHONY: run $(TESTS_RUN)
run: $(TESTS_RUN)
$(TESTS_RUN): run-%: %
$(TEST_ENV) ./$* $(RUN_OPTS)
TESTS_RUN_VG = $(addprefix run-vg-, $(GTESTS))
.PHONY: run-vg $(TESTS_RUN_VG)
run-vg: $(TESTS_RUN_VG)
$(TESTS_RUN_VG): run-vg-%: %
$(TEST_ENV) $(VG_PROG) ./$* $(RUN_OPTS)

2
test/images/icon-64.argb Normal file

File diff suppressed because one or more lines are too long

BIN
test/images/icon-64.bmp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
test/images/icon-64.ff Normal file

Binary file not shown.

BIN
test/images/icon-64.ff.bz2 Normal file

Binary file not shown.

BIN
test/images/icon-64.ff.gz Normal file

Binary file not shown.

BIN
test/images/icon-64.gif Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
test/images/icon-64.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
test/images/icon-64.ilbm Normal file

Binary file not shown.

BIN
test/images/icon-64.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
test/images/icon-64.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

BIN
test/images/icon-64.jpg.mp3 Executable file

Binary file not shown.

BIN
test/images/icon-64.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.0 KiB

4
test/images/icon-64.ppm Normal file

File diff suppressed because one or more lines are too long

BIN
test/images/icon-64.tga Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

BIN
test/images/icon-64.tiff Normal file

Binary file not shown.

BIN
test/images/icon-64.webp Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 784 B

46
test/images/icon-64.xbm Normal file
View File

@ -0,0 +1,46 @@
#define icon-64_width 64
#define icon-64_height 64
static char icon-64_bits[] = {
0x00, 0x00, 0x00, 0xF0, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xFF,
0xFF, 0x03, 0x00, 0x00, 0x00, 0x00, 0xE0, 0x5F, 0xFF, 0x0F, 0x00, 0x00,
0x00, 0x00, 0xB8, 0x05, 0xE1, 0x3F, 0x00, 0x00, 0x00, 0x00, 0x2B, 0x00,
0x00, 0xFE, 0x00, 0x00, 0x00, 0x80, 0x05, 0x00, 0x00, 0xF8, 0x03, 0x00,
0x00, 0xA0, 0x0A, 0x00, 0x00, 0xF8, 0x0F, 0x00, 0x00, 0x30, 0x01, 0x00,
0x00, 0xF0, 0x0F, 0x00, 0x00, 0x48, 0x94, 0x00, 0x00, 0xF8, 0x3F, 0x00,
0x00, 0x0C, 0x02, 0x45, 0x94, 0xA0, 0x7F, 0x00, 0x00, 0x40, 0x58, 0x54,
0x81, 0xD5, 0xFF, 0x00, 0x00, 0x51, 0xA5, 0xAB, 0x5A, 0xFA, 0xFF, 0x00,
0x80, 0x80, 0x7E, 0x2C, 0xAF, 0xFB, 0xFF, 0x01, 0x00, 0xA8, 0xC5, 0xF7,
0xE9, 0xEE, 0xFF, 0x03, 0x40, 0xE1, 0xFF, 0xFE, 0x7B, 0xFF, 0xFF, 0x07,
0x20, 0x50, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x07, 0x00, 0xD4, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x0F, 0x10, 0xF8, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F,
0x10, 0xE2, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x1F, 0x00, 0xFC, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F,
0x04, 0xFD, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x3F, 0x04, 0xFF, 0xFF, 0xFF,
0xFF, 0xFF, 0xFF, 0x7F, 0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F,
0x80, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x7F, 0x40, 0xF6, 0x9F, 0x99,
0x97, 0xBB, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0xFF,
0x00, 0xE6, 0x3D, 0x5A, 0x2B, 0xE8, 0xFF, 0xFF, 0xC0, 0xFF, 0xFF, 0xFF,
0xBF, 0xFD, 0xFF, 0xFF, 0xA0, 0xFD, 0xEF, 0xDE, 0x6B, 0xFA, 0xFF, 0xFF,
0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0xF7, 0x00, 0x40, 0x44, 0x04,
0x04, 0x42, 0xD8, 0xFE, 0x10, 0xF7, 0xFF, 0xAB, 0xAF, 0xED, 0xFE, 0xFF,
0xC8, 0xEC, 0xDE, 0xFE, 0xFD, 0xFF, 0xFF, 0xFF, 0x80, 0x1A, 0x01, 0x22,
0x00, 0x44, 0x58, 0xEB, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xE0,
0x08, 0xD8, 0xC4, 0xC2, 0x45, 0x64, 0xB5, 0xD1, 0x50, 0x5F, 0x7F, 0x7D,
0xFD, 0xDF, 0xFF, 0x6F, 0x90, 0xFA, 0xE7, 0x16, 0xA6, 0xDD, 0xFF, 0x56,
0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x02, 0x00, 0x00,
0x00, 0x00, 0x40, 0x40, 0xA0, 0xFC, 0xDF, 0x0E, 0x58, 0xFB, 0x7F, 0x26,
0xA0, 0xFF, 0xF5, 0x05, 0x6E, 0xDD, 0xBF, 0x23, 0x40, 0x5A, 0x5F, 0xBD,
0xD5, 0xBB, 0xFF, 0x20, 0x40, 0xA5, 0x6F, 0x5E, 0x96, 0xEE, 0x3F, 0x11,
0xA0, 0xFE, 0x95, 0xA1, 0x69, 0xA9, 0x57, 0x10, 0x50, 0xBA, 0x5E, 0x16,
0x40, 0xB0, 0x7D, 0x00, 0x80, 0xDD, 0xA9, 0x52, 0x06, 0xE8, 0x1F, 0x08,
0x00, 0x7B, 0x4A, 0x13, 0x01, 0x60, 0x1F, 0x04, 0x80, 0xD5, 0x27, 0x84,
0x00, 0xC0, 0x16, 0x00, 0x00, 0x5F, 0xB9, 0x02, 0x00, 0x90, 0x06, 0x02,
0x00, 0xFE, 0x06, 0x00, 0x00, 0x60, 0x07, 0x01, 0x00, 0xFE, 0x5D, 0x00,
0x00, 0xC0, 0x05, 0x00, 0x00, 0x5C, 0x01, 0x01, 0x00, 0x50, 0x02, 0x00,
0x00, 0xF0, 0x16, 0x00, 0x00, 0xA0, 0x43, 0x00, 0x00, 0xA0, 0x4B, 0x00,
0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x0A, 0x00, 0x00, 0xA0, 0x00, 0x00,
0x00, 0x00, 0x17, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x00, 0x16, 0x00,
0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x84, 0x00, 0x00,
0x00, 0x00, 0x20, 0x00, 0x00, 0x0C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x08, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, };

296
test/images/icon-64.xpm Normal file
View File

@ -0,0 +1,296 @@
/* XPM */
static char *icon_64[] = {
/* columns rows colors chars-per-pixel */
"64 64 226 2 ",
" c #1F0D35",
". c #200E36",
"X c #230F3B",
"o c #25113C",
"O c #28163E",
"+ c #2C1544",
"@ c #2E1C44",
"# c #2A1342",
"$ c #331B4C",
"% c #301A47",
"& c #381D52",
"* c #36234B",
"= c #3B2354",
"- c #3E2855",
"; c #432B5B",
": c #41255B",
"> c #47335C",
", c #4A2C65",
"< c #492A65",
"1 c #4C3363",
"2 c #4C3467",
"3 c #51356D",
"4 c #533B6B",
"5 c #513A67",
"6 c #543472",
"7 c #563971",
"8 c #593C74",
"9 c #5D3C7B",
"0 c #583576",
"q c #502E6D",
"w c #603E7E",
"e c #57446C",
"r c #5C4473",
"t c #5E437A",
"y c #5E4D71",
"u c #5F516F",
"i c #614D75",
"p c #62437D",
"a c #654B7C",
"s c #684E7F",
"d c #65517A",
"f c #6A547D",
"g c #6A5B7C",
"h c #635375",
"j c #6C607D",
"k c #623F80",
"l c #644381",
"z c #664A82",
"x c #694C83",
"c c #6D4E89",
"v c #6C5383",
"b c #6E5B82",
"n c #6D538B",
"m c #705786",
"M c #725C86",
"N c #71528E",
"B c #745C8B",
"V c #755592",
"C c #785694",
"Z c #755C93",
"A c #795B94",
"S c #7C559D",
"D c #7E5A9C",
"F c #76628A",
"G c #7A648D",
"H c #7C6A8D",
"J c #746684",
"K c #7B6394",
"L c #7E6A92",
"P c #7C6499",
"I c #7F7091",
"U c #7F57A3",
"Y c #805C9E",
"T c #806D93",
"R c #846C9C",
"E c #82659D",
"W c #847395",
"Q c #86739B",
"! c #88759A",
"~ c #8C7C9B",
"^ c #857894",
"/ c #825CA3",
"( c #855FA9",
") c #8563A4",
"_ c #8866A7",
"` c #866BA2",
"' c #896CA4",
"] c #8965AA",
"[ c #8D6AAB",
"{ c #8661A9",
"} c #906EAE",
"| c #8B74A4",
" . c #8E7AA6",
".. c #8C72A7",
"X. c #9273AD",
"o. c #947BAC",
"O. c #927CA7",
"+. c #8F69B2",
"@. c #8C66B0",
"#. c #916BB5",
"$. c #946EB9",
"%. c #9574B3",
"&. c #9876B7",
"*. c #997BB5",
"=. c #9671BA",
"-. c #9975BC",
";. c #9D7CBB",
":. c #977AB0",
">. c #A07FBF",
",. c #9E7BC1",
"<. c #9C75C4",
"1. c #A27DC4",
"2. c #92899E",
"3. c #8F839C",
"4. c #9383A3",
"5. c #9582AB",
"6. c #9981AF",
"7. c #9B8CAB",
"8. c #978BA4",
"9. c #9E90AC",
"0. c #9D96A7",
"q. c #9C82B3",
"w. c #9E8CB3",
"e. c #9E82B9",
"r. c #9885B3",
"t. c #9F90B0",
"y. c #A095AE",
"u. c #A39AAD",
"i. c #A18DB6",
"p. c #A183BC",
"a. c #A58BBC",
"s. c #A58BBB",
"d. c #A293B3",
"f. c #A99DB5",
"g. c #A593BC",
"h. c #A994BD",
"j. c #AB9CBB",
"k. c #A599B2",
"l. c #ADA1BC",
"z. c #ACA5B4",
"x. c #B2A8BD",
"c. c #A585C2",
"v. c #A78AC2",
"b. c #AA8CC3",
"n. c #AC8DCA",
"m. c #A784CA",
"M. c #AD94C3",
"N. c #AD9BC3",
"B. c #AE92CA",
"V. c #AF98C8",
"C. c #B19BC5",
"Z. c #B195CB",
"A. c #B49ACB",
"S. c #B298C8",
"D. c #AE8BD2",
"F. c #B495D4",
"G. c #B99ED2",
"H. c #B89BD5",
"J. c #AEA0C3",
"K. c #B3A3C4",
"L. c #B6ACC3",
"P. c #B8ADC4",
"I. c #B5A4C9",
"U. c #B9A3CD",
"Y. c #B6A9C9",
"T. c #BBABCC",
"R. c #BCB4C4",
"E. c #BDB2CC",
"W. c #BFBAC6",
"Q. c #BCA4D2",
"!. c #BEAAD1",
"~. c #BEA3DA",
"^. c #BEB1D0",
"/. c #C0B5CE",
"(. c #C4BBCD",
"). c #C1ACD4",
"_. c #C4ACDB",
"`. c #C0A5DD",
"'. c #C4B3D4",
"]. c #C5BBD3",
"[. c #C8BCD5",
"{. c #C6B2DA",
"}. c #C9B5DB",
"|. c #CCBCDB",
" X c #C8B7D7",
".X c #D0BFDD",
"XX c #CAB4E1",
"oX c #CEBAE1",
"OX c #D1BEE3",
"+X c #C6ADE0",
"@X c #C7C1CD",
"#X c #C8C2CF",
"$X c #CBC2D5",
"%X c #CFC8D6",
"&X c #CDC3DA",
"*X c #C7C0D0",
"=X c #D1C5DD",
"-X c #D3CBDC",
";X c #D0CAD7",
":X c #DAD6DE",
">X c #D6D2DB",
",X c #D4C3E3",
"<X c #D6CBE2",
"1X c #D9CDE4",
"2X c #DBCCE9",
"3X c #D7C7E7",
"4X c #DCD3E5",
"5X c #DED9E3",
"6X c #DED3EA",
"7X c #DFD8E8",
"8X c #E1DCE6",
"9X c #E1D5EB",
"0X c #E4DBEC",
"qX c #E8DFEF",
"wX c #E7DDF0",
"eX c #E3E1E6",
"rX c #E6E3EA",
"tX c #E9E4ED",
"yX c #EBE8EE",
"uX c #EBE4F1",
"iX c #EEE9F3",
"pX c #F1EDF6",
"aX c #F3EFF8",
"sX c #F3F1F4",
"dX c #FFFFFF",
"fX c #F7F5F9",
/* pixels */
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX#X0.8.b h h h y y 8.2.@XeXdXfXfXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX>X~ h , 2 3 2 2 1 > 1 > ; ; = $ + > H z.sXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeX~ d a F B B K K L | ~ ! I H H M f r 5 ; = % o g x.dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXeX^ h W Q | .5.t.l.R.*X;X>X>X-X%X@XR.z.0.~ F i 5 ; $ O ; z.dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXsX^ g 5.5.7.i.j.P.&X5XrXrXyXrXyXrXrXyXrXrXrXeX:X(.u.T f 5 ; $ X ; W.dXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXu.g 7.t.d.N.C.E.-XrXyXyXyXyXyXrXrXeXrXrXyXrXrXrXrXrX8X@X9.G i > * + . h sXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXsXH ^ f.f.N.Y.P.].5XyXyXeXeX5X5X5X5X5X5X:X5X:X8X:XeXrXrXtXeX#Xu.T h 1 = O o O #XdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdX:Xg z.l.K.Y.T.T.'.-X5X8X:X>X;X;X;X&X%X%X%X;X;X;X;X>X;X>X:X5XeX:XR.9.T h 5 ; O O . 0.dXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdX:Xb L.L.Y.Y.T.T.Y./.].$X$X].[.(.(.(.(.(.(.(.(.(.(.(.(.(.(.(.#X#X%XW.f.~ G 8 > & + o . j dXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdX:XH W.W.Y.T.T.Y.K.K.L.P.T.P.P.P.P.P.P.P.P.x.P.x.R.P.R.P.P.L.P.R.P.R.x.k.2.T h 4 ; $ o . . J dXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdX:XJ (.].T.E.T.Y.N.f.h.j.j.l.f.f.f.j.j.j.l.l.l.l.j.l.l.j.l.l.f.f.f.f.u.u.9.~ T f e > = + o . . j dXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdX4Xb (.*X^.E.T.Y.J.i.w.w.w.i.w.7.w.9.d.9.d.d.9.k.k.d.y.d.d.d.d.9.9.8.8.8.4.~ W H f r 5 : $ # X . . 0.dXdXdXdXdXdXdX",
"dXdXdXdXdXdXsXJ W.$X].^.E.Y.J.i.6.o.5.o.O.O.O.~ O.O.8.O.O.~ O.~ 3.4.3.3.4.4.2.~ O.~ W W T T J f r 5 : $ + X . . O x.dXdXdXdXdXdX",
"dXdXdXdXdXdXI z.&X].$X^.Y.J.g.5. .! Q Q ! ~ ~ W ! W W ~ T T ~ ^ ! ! ! ! ! ! W W W W T T F j f i e > ; $ % o . . . O eXdXdXdXdXdX",
"dXdXdXdXfX#X^ -X].].].T.J.g.r.` T E T E T Y F F G T T T T T T T T T T T T T T T T T M T f f i r 5 > : $ + o . . e dXdXdXdXdX",
"dXdXdXdXfXb &X$X].$X^.J.N.i.| P Y C s f f f M M M M F F T m T T T G G G G G M B M M j f f a r 4 5 ; : $ @ O . . z.dXdXdXdX",
"dXdXdXdXy.l.&X].&X].Y.J.r.r.P P n t t y z b n b f Y f Y j Y T m G m G m M m M m m m f s i w 8 4 > ; : % # # . . . + pXdXdXdX",
"dXdXdXyXL 4X$X$X].^.J.g.r.P Z t 7 e t t z z z z s s f f f f m m m m m m m m m v s a a i w 8 4 5 , ; = $ # # . . . 3.dXdXdX",
"dXdXdXf.Y.-X].&X].Y.g.r.r.Z 7 3 7 7 7 t t z z z s s s s s s s c x m s m v s s s a w i w e e 4 1 < : = $ $ # X . . . . @ pXdXdX",
"dXdXsXI 5X&X-X].^.J.w.r.P 2 2 7 3 7 7 7 t e z z w s w s s s s c x x x x x x l a i w w 8 0 4 q 1 ; : : $ $ # X X . . . z.dXdX",
"fXfX*XY.:X&X&X^.Y.g.r.P z 3 3 3 6 6 6 9 7 k k z w w p s s x p s l x x l l l l a w w 8 8 4 q q , < : & & & # # # o X . . . ; dXdX",
"dXfX7.-X-X&X&X^.Y.g.P n k 3 3 3 3 6 6 6 7 k k k s w w p w k p a l l l l l l w w w 8 8 8 0 q q , < : : : & $ $ # O O O . . . >XdX",
"dXeXg.7X&X-X].^.J.I b z t 3 3 3 3 3 6 0 6 9 7 k k w w w w k p w l l l l w l w w 9 8 8 0 0 q q < < : : & & $ $ $ % + O O . . ^ dX",
"dX;X^.7X&X-X^.Y.r.Z n z z 3 3 3 6 6 6 6 9 t k k k k w w k k w w l l l l l w w w w 9 9 0 0 q q q < < : & & & $ $ $ % @ O O O > dX",
"dXL.&X-X&X&X^.N.P P P P n z z z k z n n N N V V V C V V Y V V Y Y Y C C C C C C Y s Y s c w w s p r 8 4 4 5 2 1 ; ; ; = * @ O sX",
"dXf.4X=X1X-X].N.g.w.5.5. .Q Q | P r.r.P o.o.6.6.q.q.q.6.6.:.6.6.:.O.:.:.:.9.:.O.:.O.~ O.O.:.X.! R R T H K F M M v f i e > - @ R.",
"rX^.7X7X0X7X<X,X&X$X].$X$X$X&X;X<X7X7XwXtXtXtXtXtXyXyXyXuXtX0X8X8X8X8X8X4X9XeXeXtX8X>X<X=X;X%X#X(.(././.R.P.L.x.z.f.y.~ J u ; 2.",
"rX^.7X&X<X^.J.g.w.r. . . .` Q ` P P .P ....o.o.X.X.:.:.o.o.X.X.X.X.X.X.>.x.U.C.C.C.h.| | ' ' R R R T K Z B M M m f i r 5 > * j ",
"%X].4X&X&XN.g.r.P P P P P V N n Z Z Z Z V S S S Y Y Y Y Y Y Y Y Y Y Y Y :.*.*.s.q.q.q._ V N N c c x x a p p p t 7 4 2 2 > - $ u ",
">X&X<X&X^.J.J.g.g.g... ...P ` P P P P ........ .X.X.X.X.:.:.X.X.[ X.X.:.f.s.s.s.s.s.h.9.' ' ' R E E E A A B A A Z n a r 4 1 - - ",
";X-X7X4X<X&X&X&XoX].^.^.&X&X^.$X-X&X&X,X<X<X<X<X-X1X-X4X1X1X1X>X;X1X;X1X1X:X:X:X<X>X-X%X.X[.[.[.[./././.P.P.Y.L.K.l.g.8.W b e * ",
"P.-X4X&X&X&X^.^.Y.Y.Y.J.V.J.K.K.Y.Y.Y.Y.T.T.^.!.)./.).).)./.).).!.!.!.!.'. X).).'.'.'.).U.L.I.C.l.j.h.d.d.i.i.i.w.6.4.| R d 5 * ",
"P.&X,XY.T.I.N.g.r.o...` ' ' E E Y ) _ _ _ [ [ [ [ } } } } } X.X.X.[ | } [ X.X.X.X.X.[ [ _ E _ Y E Y Y m Y x Y Y s s c c m m > % ",
"-X&X&XY.!.J.M.p.*.%..._ _ ) ) Y Y Y ) _ _ _ _ [ [ [ } } } } } X.X.[ [ [ [ [ [ [ [ _ _ _ _ _ ) Y Y Y Y Y m Y m Y Y c c N C Y m @ ",
"-X-X&XE.^.^.T.Y.V.N.M.g.a.g.a.s.h.s.h.h.h.S.S.S.l.S.S.S.S.A.S.C.S.C.C.C.C.C.C.C.C.C.S.C.M.s.M.s.s.s.:.:.:.:.:.:.[ O.' *.e.O. .; ",
"].>X-X-X7XqX7X7X7X6X6X5X9X0XqXtXtXuXuXiXiXiXiXpXpXpXsXiXsXiXiXiXtXyXiXyXyXiXiXtXtXtXtXtXtXtXtXtX0XeX8X5X:X1X>X<X%X.X,X.X'.j.y.g ",
"eX-X&XY. X^.!.I.V.M.b.b.a.a.a.v.s.s.s.s.s.h.S.M.S.M.M.S.C.C.S.C.S.S.C.C.M.M.M.M.M.S.M.s.M.s.s.s.>.>.*.*.:.O.&.>.v.n.B.B.M.w.w.J ",
"rX^.&XJ.Y.Y.V.b.e.*.X.%.} ] ] @.} _ [ +.} } } } } %.%.%.:.:.%.%.:.%.:.:.X.X.X.X.} %.} [ [ [ _ _ _ E Y Y Y Y ( >.<.<.m.n.v.w.4.8.",
"dXJ.-XY.Q.!.J.B.b.p.e.-.*.%.%.%.&.&.&.&.*.*.*.;.*.>.;.>.>.>.>.>.>.>.>.>.>.*.*.*.*.s.>.:.:.:.X.X.X.[ [ _ ) ) X.>.m.m.n.F.V.f.I W.",
"dXE.<X$X^.&X&X&X].XX^.^.{.{.{.}.|..X.X.X=X=X<X>X1X1X1X4X4X4X8X4X4X5X4X4X:X<X;X<X;X.X.X.X.X X X XR.).U.U.C.C.U.}._._.XXXX!.K.g sX",
"dX&X;X&X!. X|.{.{.).).).G.).`.U.).).).'.'.'. X X.X X.X.X1X8X9X4X1X.X.X.X.X X X X X X X).).!.U.U.I.C.C.N.M.B.~.`._._.XXoX^.T.b dX",
"dXsX^.&XJ.I.Y.V.n.p.;.&.-.&.-.$.&.&.>.>.>.>.>.>.>.c.>.s.).1X1X1X Xb.s.b.M.s.>.s.s.s.>.>.*.&.:.X.X.} [ [ _ +.<.D.D.F.~.XXY.t.3.dX",
"dXdXT.&XY.v.A.B.c.;.$.#.#.#.+.@.] @.} +.%.&.*.X.%.&.;.>.>.;XtX6Xs.>.>.>.>.*.*.>.;.*.*.*.[ _ _ _ / / U S S U <.1.D.H.+XXXY.J :XdX",
"dXdX;X&XT.M.M.B.c.>.$.#.#.+.@.#.@.@.+.#.=.&.;.>.;.;.>.>.>.>.>.s.b.b.>.s.s.>.>.>.>.>.;.*.} _ _ / / / U S S U 1.D.H._.&X&XY.h dXdX",
"dXdXfXK.$XM.a.V.n.>.&.$.#.#.#.$.#.+.=.&.&.>.>.>.c.c.c.>.c.b.b.b.b.b.>.b.b.b.b.>.c.>.>.>.%.} [ _ ) / Y S U @.D.F.~.XX3X|.3.L.dXdX",
"dXdXdX^.&XI.v.v.n.1.-.$.#.#.#.$.-.-.&.;.>.>.>.b.b.b.Z.Z.Z.b.Z.Z.S.S.S.S.S.S.G.S.S.M.c.c.>.X.} [ _ ) / / ( <.D.~.+X,X6X^.y sXdXdX",
"dXdXdXsXY.^.v.p.1.1.<.$.$.#.$.$.-.;.>.>.>.1.b.n.Z.Z.Z.S.S.A.S.S.S.S.S.S.G..X}.).).).Q.Z.s.&.X.} ] ) / ( @.m.H.+XoX2X<X4.0.dXdXdX",
"dXdXdXdX&X^.J.c.>.1.<.$.$.$.$.-.-.1.1.m.b.b.n.Z.S.F.G.G.Q.Q.Q.Q.U.G.Q.Q..X1X3X,X,X,X.X).S.&.&.X.} _ ) ] $.H.+XoX3X0X^.g sXdXdXdX",
"dXdXdXdXfXN.^.v.;.,.,.-.$.$.=.<.>.1.m.n.n.Z.Z.A.H.G.Q.Q.).).`.)._.).)._.0XqX0XwX0X9X9X}.S.>.*.*.} [ ] } c.`.XX3X6X2XW @XdXdXdXdX",
"dXdXdXdXdX0Xg.M.;.-.-.<.=.$.=.-.1.b.n.Z.F.F.A.G.G.Q.)._.)._._.}.{.}.}.}.9XaXaXaXpXpXiX.XA.s.>.*.%.[ } $.H.XXOX6XwXI.H dXdXdXdXdX",
"dXdXdXdXdXdX&Xw._ @.+.=.=.=.=.;.>.1.b.n.Z.G.Q.).Q._._._.}.}.XX}.oXOXOXOXOXpXfXfXfXaX6X.XS.s.p.;.%.%.%.c.+XOX2X0X&XJ aXdXdXdXdXdX",
"dXdXdXdXdXdXfX^.w.S U U { +.+.-.>.1.b.Z.A.G._._.}.}.}..XOXOXOX3X3X3X3X2X3X3X6XwX0X2X2XOXS.M.s.>.*.&.&.H.oX3X9X6X! >XdXdXdXdXdXdX",
"dXdXdXdXdXdXdXiX^.e.U U { { +.-.>.1.B.Z.A.)._.}.XXoX.XOXOX3X3X2X2X2X6X2X2X9X6X2X9X6X6X}.A.C.s.>.>.;.v.XX3X6X9Xd.L.dXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXaX^.w.U ( { [ %.>.p.n.A.G.)._.}.oXOX,X,X3X2X2X2X6X9X9XwXwXwXwXwXwXwX2X).G.S.b.a.>.p._.3X6X9XK.0.dXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXaX[.M.U _ +.+.&.>.b.S.G.).{.}..X,X3X2X2X6X9XwXwXwXwXuXuXuXuXuXuXqX X).U.A.B.v.p.G.OX2X9XY.9.dXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXaX&XY._ _ +.&.>.b.S.G.).}.oXOX3X2X9X9XwXwXqXuXuXiXiXiXpXiXiXuX,X}.'.U.A.B.v.B.oX3X2XJ.d.dXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXaX<X[.%._ [ ;.v.B.U.).}.=X<X1X1X9XwXuXuXuXaXaXaXaXaXaXaXwX3X,X|.{.).A.b.n.XX3X,Xd.@XdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdX7X-XM.] %.;.b.A.Q.{..X3X9X9X9X9XwXqXiXiXaXaXaXiXqX9X6X4X<X=X).U.Z.Z.XX,X Xy.8XdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXiX7X[.*.X.;.v.A.).}.<X9XqX0XwXqXqXqXwXwXwXqXqXqX0X0X9X1X}.!.Z.A.XX}.J.K.fXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXuX5X).q.;.a.S.).}.=X9XtXqXqXtXqXwXwXuXwXrXqXqXqX1XoX!.V.G._.Q.l.5XdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXfXuX9X Xa.s.M.U.).|.1X9X0XtXtXuXuXtXtXqX0X6X.X{.U.A.Q.U.f.%XdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXfXuX8X1X).S.S.G.).{.|.=X1X1X1X2X=X.X X).).A.U.M.].5XdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXpX9X8X$X=X X).).U.).).).).)./.).C.C.].;XfXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX",
"dXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXqX9X8X4X=X=X=X[. X-X[.8XsXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdXdX"
};

193
test/test_file.cpp Normal file
View File

@ -0,0 +1,193 @@
#include <gtest/gtest.h>
/**INDENT-OFF**/
extern "C" {
#include "file.h"
}
/**INDENT-ON**/
#if 0
#define D(...) printf(__VA_ARGS__)
#else
#define D(...)
#endif
#define EXPECT_OK(x) EXPECT_FALSE(x)
#define EXPECT_ERR(x) EXPECT_TRUE(x)
#if 0
char *__imlib_FileKey(const char *file);
char *__imlib_FileRealFile(const char *file);
char *__imlib_FileExtension(const char *file);
//int __imlib_FileExists(const char *s);
//int __imlib_FileIsFile(const char *s);
//int __imlib_FileIsDir(const char *s);
char **__imlib_FileDir(const char *dir, int *num);
void __imlib_FileFreeDirList(char **l, int num);
void __imlib_FileDel(const char *s);
time_t __imlib_FileModDate(const char *s);
char *__imlib_FileHomeDir(int uid);
int __imlib_FilePermissions(const char *s);
//int __imlib_FileCanRead(const char *s);
int __imlib_IsRealFile(const char *s);
#endif
#define USE_REAL_FILE 0
TEST(FILE, file_extension)
{
const char *s;
s = __imlib_FileExtension("abc.def");
EXPECT_STREQ(s, "def");
s = __imlib_FileExtension(".def");
EXPECT_STREQ(s, "def");
s = __imlib_FileExtension("def");
EXPECT_STREQ(s, "def");
s = __imlib_FileExtension(".");
EXPECT_STREQ(s, NULL);
s = __imlib_FileExtension("def.");
EXPECT_STREQ(s, NULL);
s = __imlib_FileExtension("/def.x");
EXPECT_STREQ(s, "x");
s = __imlib_FileExtension("/def");
EXPECT_STREQ(s, "def");
}
TEST(FILE, file_exists)
{
int rc;
rc = __imlib_FileExists("./Makefile");
EXPECT_EQ(rc, 1);
rc = __imlib_FileExists(".");
EXPECT_EQ(rc, 1);
rc = __imlib_FileExists("./foob");
EXPECT_EQ(rc, 0);
rc = __imlib_FileExists("./Makefile:foo");
EXPECT_EQ(rc, USE_REAL_FILE);
rc = __imlib_FileExists(".:foo");
EXPECT_EQ(rc, USE_REAL_FILE);
rc = __imlib_FileExists("./foob:foo");
EXPECT_EQ(rc, 0);
}
TEST(FILE, file_is_file)
{
int rc;
rc = __imlib_FileIsFile("./Makefile");
EXPECT_EQ(rc, 1);
rc = __imlib_FileIsFile(".");
EXPECT_EQ(rc, 0);
rc = __imlib_FileIsFile("./foob");
EXPECT_EQ(rc, 0);
rc = __imlib_FileIsFile("./Makefile:foo");
EXPECT_EQ(rc, USE_REAL_FILE);
rc = __imlib_FileIsFile(".:foo");
EXPECT_EQ(rc, 0);
rc = __imlib_FileIsFile("./foob:foo");
EXPECT_EQ(rc, 0);
}
TEST(FILE, file_is_dir)
{
int rc;
rc = __imlib_FileIsDir("./Makefile");
EXPECT_EQ(rc, 0);
rc = __imlib_FileIsDir(".");
EXPECT_EQ(rc, 1);
rc = __imlib_FileIsDir("./foob");
EXPECT_EQ(rc, 0);
rc = __imlib_FileIsDir("./Makefile:foo");
EXPECT_EQ(rc, 0);
rc = __imlib_FileIsDir(".:foo");
EXPECT_EQ(rc, USE_REAL_FILE);
rc = __imlib_FileIsDir("./foob:foo");
EXPECT_EQ(rc, 0);
}
TEST(FILE, file_can_read)
{
int rc;
rc = __imlib_FileCanRead("./Makefile");
EXPECT_EQ(rc, 1);
rc = __imlib_FileCanRead(".");
EXPECT_EQ(rc, 1);
rc = __imlib_FileCanRead("./foob");
EXPECT_EQ(rc, 0);
rc = system("touch gylle");
EXPECT_EQ(rc, 0);
rc = __imlib_FileCanRead("gylle");
EXPECT_EQ(rc, 1);
rc = system("chmod 000 gylle");
EXPECT_EQ(rc, 0);
rc = __imlib_FileCanRead("gylle");
EXPECT_EQ(rc, 0);
rc = unlink("gylle");
EXPECT_EQ(rc, 0);
}
TEST(FILE, file_is_real_file)
{
int rc;
rc = __imlib_IsRealFile("./Makefile");
EXPECT_EQ(rc, 1);
rc = __imlib_IsRealFile(".");
EXPECT_EQ(rc, 0);
rc = __imlib_IsRealFile("./foob");
EXPECT_EQ(rc, 0);
rc = system("touch gylle");
EXPECT_EQ(rc, 0);
rc = __imlib_IsRealFile("gylle");
EXPECT_EQ(rc, 1);
rc = system("chmod 000 gylle");
EXPECT_EQ(rc, 0);
rc = __imlib_IsRealFile("gylle");
EXPECT_EQ(rc, 1);
rc = unlink("gylle");
EXPECT_EQ(rc, 0);
}
int
main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

174
test/test_load.cpp Normal file
View File

@ -0,0 +1,174 @@
#include <gtest/gtest.h>
#include <Imlib2.h>
#include <fcntl.h>
int debug = 0;
#define D(...) if (debug) printf(__VA_ARGS__)
#define EXPECT_OK(x) EXPECT_FALSE(x)
#define EXPECT_ERR(x) EXPECT_TRUE(x)
#define TOPDIR SRC_DIR
#define IMGDIR TOPDIR "/test/images"
#define FILE_REF "icon-64.png"
static const char *const pfxs[] = {
"argb",
"bmp",
"ff.bz2", // bz2
"ff",
"gif",
"ico",
"jpg.mp3", // id3
"jpeg",
"ilbm", // lbm
"png",
"ppm", // pnm
"tga",
"tiff",
"webp",
"xbm",
"xpm",
"ff.gz", // zlib
};
#define N_PFX (sizeof(pfxs) / sizeof(char*))
static int
progress(Imlib_Image im, char percent, int update_x, int update_y,
int update_w, int update_h)
{
D("%s: %3d%% %4d,%4d %4dx%4d\n",
__func__, percent, update_x, update_y, update_w, update_h);
return 1; /* Continue */
}
static void
image_free(Imlib_Image im)
{
imlib_context_set_image(im);
imlib_free_image_and_decache();
}
static void
test_load(void)
{
char filei[256];
char fileo[256];
unsigned int i, j;
Imlib_Image im;
Imlib_Load_Error lerr;
FILE *fp;
int fd;
int err;
snprintf(filei, sizeof(filei), "%s/%s", IMGDIR, FILE_REF);
D("Load '%s'\n", filei);
im = imlib_load_image(filei);
ASSERT_TRUE(im);
image_free(im);
for (i = 0; i < N_PFX; i++)
{
// Load files of all types
snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "icon-64", pfxs[i]);
D("Load '%s'\n", fileo);
im = imlib_load_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, 0);
if (lerr)
D("Error %d loading '%s'\n", lerr, fileo);
if (im)
image_free(im);
if (strchr(pfxs[i], '.') == 0)
{
snprintf(filei, sizeof(filei), "%s.%s", "icon-64", pfxs[i]);
for (j = 0; j < N_PFX; j++)
{
// Load certain types pretending they are something else
snprintf(fileo, sizeof(fileo), "%s/%s.%s.%s", IMGDIR,
"icon-64", pfxs[i], pfxs[j]);
unlink(fileo);
symlink(filei, fileo);
D("Load incorrect suffix '%s'\n", fileo);
im = imlib_load_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, 0);
if (lerr)
D("Error %d loading '%s'\n", lerr, fileo);
if (im)
image_free(im);
}
}
// Empty files of all types
snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "empty", pfxs[i]);
unlink(fileo);
fp = fopen(fileo, "wb");
fclose(fp);
D("Load empty '%s'\n", fileo);
im = imlib_load_image_with_error_return(fileo, &lerr);
D(" err = %d\n", lerr);
EXPECT_TRUE(lerr == IMLIB_LOAD_ERROR_NO_LOADER_FOR_FILE_FORMAT ||
lerr == IMLIB_LOAD_ERROR_UNKNOWN ||
lerr == IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST);
// Non-existing files of all types
snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "nonex", pfxs[i]);
unlink(fileo);
symlink("non-existing", fileo);
D("Load non-existing '%s'\n", fileo);
im = imlib_load_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, IMLIB_LOAD_ERROR_FILE_DOES_NOT_EXIST);
// Load via fd
snprintf(fileo, sizeof(fileo), "%s/%s.%s", IMGDIR, "icon-64", pfxs[i]);
fd = open(fileo, O_RDONLY);
D("Load fd %d '%s'\n", fd, fileo);
snprintf(fileo, sizeof(fileo), ".%s", pfxs[i]);
im = imlib_load_image_fd(fd, pfxs[i]);
EXPECT_TRUE(im);
if (im)
image_free(im);
err = close(fd);
EXPECT_TRUE(err != 0);
}
}
TEST(LOAD, load_1)
{
test_load();
}
TEST(LOAD, load_2)
{
imlib_context_set_progress_function(progress);
imlib_context_set_progress_granularity(10);
test_load();
}
int
main(int argc, char **argv)
{
const char *s;
::testing::InitGoogleTest(&argc, argv);
for (argc--, argv++; argc > 0; argc--, argv++)
{
s = argv[0];
if (*s++ != '-')
break;
switch (*s)
{
case 'd':
debug++;
break;
}
}
return RUN_ALL_TESTS();
}

154
test/test_save.cpp Normal file
View File

@ -0,0 +1,154 @@
#include <gtest/gtest.h>
#include <Imlib2.h>
#if 0
#define D(...) printf(__VA_ARGS__)
#else
#define D(...) do { } while (0)
#endif
#define EXPECT_OK(x) EXPECT_FALSE(x)
#define EXPECT_ERR(x) EXPECT_TRUE(x)
#define TOPDIR SRC_DIR
#define FILE_REF "test/images/icon-64.bmp"
static const char *const pfxs[] = {
"argb",
"bmp",
"ff",
// "gif",
// "ico",
"jpeg",
// "lbm",
"png",
"pnm",
"tga",
"tiff",
"webp",
"xbm",
// "xpm",
};
#define N_PFX (sizeof(pfxs) / sizeof(char*))
static int
progress(Imlib_Image im, char percent, int update_x, int update_y,
int update_w, int update_h)
{
D("%s: %3d%% %4d,%4d %4dx%4d\n",
__func__, percent, update_x, update_y, update_w, update_h);
return 1; /* Continue */
}
static void
test_save(void)
{
char filei[256];
char fileo[256];
unsigned int i;
int w, h;
Imlib_Image im, im1, im2, im3;
Imlib_Load_Error lerr;
snprintf(filei, sizeof(filei), "%s/%s", TOPDIR, FILE_REF);
D("Load '%s'\n", filei);
im = imlib_load_image(filei);
if (!im)
{
printf("Error loading '%s'\n", filei);
exit(0);
}
imlib_context_set_image(im);
w = imlib_image_get_width();
h = imlib_image_get_height();
im1 = imlib_create_cropped_scaled_image(0, 0, w, h, w + 1, h + 1);
im2 = imlib_create_cropped_scaled_image(0, 0, w, h, w + 2, h + 2);
im3 = imlib_create_cropped_scaled_image(0, 0, w, h, w + 3, h + 3);
ASSERT_TRUE(im);
ASSERT_TRUE(im1);
ASSERT_TRUE(im2);
ASSERT_TRUE(im3);
for (i = 0; i < N_PFX; i++)
{
imlib_context_set_image(im);
imlib_image_set_format(pfxs[i]);
w = imlib_image_get_width();
h = imlib_image_get_height();
snprintf(fileo, sizeof(fileo), "%s/%s-%dx%d.%s",
".", "img_save", w, h, pfxs[i]);
D("Save '%s'\n", fileo);
imlib_save_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, 0);
if (lerr)
D("Error %d saving '%s'\n", lerr, fileo);
imlib_context_set_image(im1);
imlib_image_set_format(pfxs[i]);
w = imlib_image_get_width();
h = imlib_image_get_height();
snprintf(fileo, sizeof(fileo), "%s/%s-%dx%d.%s",
".", "img_save", w, h, pfxs[i]);
D("Save '%s'\n", fileo);
imlib_save_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, 0);
if (lerr)
D("Error %d saving '%s'\n", lerr, fileo);
imlib_context_set_image(im2);
imlib_image_set_format(pfxs[i]);
w = imlib_image_get_width();
h = imlib_image_get_height();
snprintf(fileo, sizeof(fileo), "%s/%s-%dx%d.%s",
".", "img_save", w, h, pfxs[i]);
D("Save '%s'\n", fileo);
imlib_save_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, 0);
if (lerr)
D("Error %d saving '%s'\n", lerr, fileo);
imlib_context_set_image(im3);
imlib_image_set_format(pfxs[i]);
w = imlib_image_get_width();
h = imlib_image_get_height();
snprintf(fileo, sizeof(fileo), "%s/%s-%dx%d.%s",
".", "img_save", w, h, pfxs[i]);
D("Save '%s'\n", fileo);
imlib_save_image_with_error_return(fileo, &lerr);
EXPECT_EQ(lerr, 0);
if (lerr)
D("Error %d saving '%s'\n", lerr, fileo);
}
imlib_context_set_image(im);
imlib_free_image_and_decache();
imlib_context_set_image(im1);
imlib_free_image_and_decache();
imlib_context_set_image(im2);
imlib_free_image_and_decache();
imlib_context_set_image(im3);
imlib_free_image_and_decache();
}
TEST(SAVE, save_1)
{
test_save();
}
TEST(SAVE, save_2)
{
imlib_context_set_progress_function(progress);
imlib_context_set_progress_granularity(10);
test_save();
}
int
main(int argc, char **argv)
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}