Test: Add some minimal regression testing
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
/*.d
|
||||
/images/empty.*
|
||||
/images/nonex.*
|
||||
/images/icon-64.*.*
|
|
@ -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)
|
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 17 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 6.0 KiB |
After Width: | Height: | Size: 12 KiB |
After Width: | Height: | Size: 784 B |
|
@ -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, };
|
|
@ -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"
|
||||
};
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
}
|
|
@ -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();
|
||||
}
|