Test: Add some minimal regression testing
|
@ -2,7 +2,11 @@ AUTOMAKE_OPTIONS = foreign
|
||||||
|
|
||||||
ACLOCAL_AMFLAGS = -I m4
|
ACLOCAL_AMFLAGS = -I m4
|
||||||
|
|
||||||
SUBDIRS = src data doc
|
if BUILD_TEST
|
||||||
|
SUBDIRS_TEST = test
|
||||||
|
endif
|
||||||
|
|
||||||
|
SUBDIRS = src data doc $(SUBDIRS_TEST)
|
||||||
|
|
||||||
CLEANFILES = $(PACKAGE).spec
|
CLEANFILES = $(PACKAGE).spec
|
||||||
|
|
||||||
|
|
|
@ -4,7 +4,7 @@ AC_CONFIG_MACRO_DIR([m4])
|
||||||
AC_CANONICAL_BUILD
|
AC_CANONICAL_BUILD
|
||||||
AC_CANONICAL_HOST
|
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])])
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||||
|
|
||||||
AM_CONDITIONAL(SRC_IS_GIT, test -d $srcdir/.git)
|
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_C_BIGENDIAN
|
||||||
AC_PROG_CC
|
AC_PROG_CC
|
||||||
AM_PROG_AS
|
AM_PROG_AS
|
||||||
|
AC_PROG_CXX
|
||||||
|
|
||||||
AC_C_CONST
|
AC_C_CONST
|
||||||
|
|
||||||
|
@ -388,6 +389,7 @@ else
|
||||||
fi
|
fi
|
||||||
AM_CONDITIONAL(BUILD_ID3_LOADER, test "$id3_ok" = yes)
|
AM_CONDITIONAL(BUILD_ID3_LOADER, test "$id3_ok" = yes)
|
||||||
|
|
||||||
|
AM_CONDITIONAL(BUILD_TEST, false)
|
||||||
|
|
||||||
EC_C_WARNINGS()
|
EC_C_WARNINGS()
|
||||||
EC_C_VISIBILITY(yes)
|
EC_C_VISIBILITY(yes)
|
||||||
|
@ -407,6 +409,7 @@ data/Makefile
|
||||||
data/fonts/Makefile
|
data/fonts/Makefile
|
||||||
data/images/Makefile
|
data/images/Makefile
|
||||||
doc/Makefile
|
doc/Makefile
|
||||||
|
test/Makefile
|
||||||
README
|
README
|
||||||
])
|
])
|
||||||
AC_OUTPUT
|
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();
|
||||||
|
}
|