put again efreet tests in the source tree
authorcaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 16 Jan 2011 19:07:19 +0000 (19:07 +0000)
committercaro <caro@7cbeb6ba-43b4-40fd-8cce-4c39aea84d33>
Sun, 16 Jan 2011 19:07:19 +0000 (19:07 +0000)
git-svn-id: svn+ssh://svn.enlightenment.org/var/svn/e/trunk/efreet@56197 7cbeb6ba-43b4-40fd-8cce-4c39aea84d33

43 files changed:
Makefile.am
configure.ac
src/Makefile.am
src/tests/.cvsignore [new file with mode: 0644]
src/tests/Makefile.am [new file with mode: 0644]
src/tests/compare/.cvsignore [new file with mode: 0644]
src/tests/compare/Makefile.am [new file with mode: 0644]
src/tests/compare/comp.h [new file with mode: 0644]
src/tests/compare/efreet_alloc.c [new file with mode: 0644]
src/tests/compare/efreet_menu_alloc.c [new file with mode: 0644]
src/tests/data/.cvsignore [new file with mode: 0644]
src/tests/data/Makefile.am [new file with mode: 0644]
src/tests/data/entry [new file with mode: 0644]
src/tests/data/entry.png [new file with mode: 0644]
src/tests/data/long.ini [new file with mode: 0644]
src/tests/data/preferences.menu [new file with mode: 0644]
src/tests/data/sub/.cvsignore [new file with mode: 0644]
src/tests/data/sub/Makefile.am [new file with mode: 0644]
src/tests/data/sub/test.desktop [new file with mode: 0644]
src/tests/data/test.desktop [new file with mode: 0644]
src/tests/data/test.ini [new file with mode: 0644]
src/tests/data/test.menu [new file with mode: 0644]
src/tests/data/test_garbage [new file with mode: 0644]
src/tests/data/test_menu_bad_comment.menu [new file with mode: 0644]
src/tests/data/test_menu_slash_bad.menu [new file with mode: 0644]
src/tests/data/test_type.desktop [new file with mode: 0644]
src/tests/ef_cache.c [new file with mode: 0644]
src/tests/ef_data_dirs.c [new file with mode: 0644]
src/tests/ef_desktop.c [new file with mode: 0644]
src/tests/ef_icon_theme.c [new file with mode: 0644]
src/tests/ef_ini.c [new file with mode: 0644]
src/tests/ef_locale.c [new file with mode: 0644]
src/tests/ef_menu.c [new file with mode: 0644]
src/tests/ef_mime.c [new file with mode: 0644]
src/tests/ef_test.h [new file with mode: 0644]
src/tests/ef_utils.c [new file with mode: 0644]
src/tests/efreet_icon_cache_dump.c [new file with mode: 0644]
src/tests/efreet_spec_test.c [new file with mode: 0644]
src/tests/efreet_suite.c [new file with mode: 0644]
src/tests/efreet_suite.h [new file with mode: 0644]
src/tests/efreet_test_efreet.c [new file with mode: 0644]
src/tests/efreet_test_efreet_cache.c [new file with mode: 0644]
src/tests/main.c [new file with mode: 0644]

index a5dbb37..5e4fbf9 100644 (file)
@@ -34,10 +34,58 @@ efreet.pc.in \
 efreet-mime.pc.in \
 efreet.spec.in \
 efreet.spec \
+m4/efl_coverage.m4\
+m4/efl_tests.m4\
 README
 
-.PHONY: doc
+.PHONY: doc coverage
 
 doc:
        @echo "entering doc/"
        make -C doc doc
+
+# Unit tests
+
+if EFL_ENABLE_TESTS
+
+check-local:
+       @./src/tests/efreet_suite
+
+else
+
+check-local:
+       @echo "reconfigure with --enable-tests"
+
+endif
+
+# Coverage report
+
+if EFL_ENABLE_COVERAGE
+lcov-reset:
+       @rm -rf coverage
+       @find . -name "*.gcda" -exec rm {} \;
+       @lcov --directory . --zerocounters
+
+lcov-report:
+       @mkdir coverage
+       @lcov --compat-libtool --directory $(top_srcdir)/src --capture --output-file coverage/coverage.info
+       @lcov -l coverage/coverage.info | grep -v "`cd $(top_srcdir) && pwd`" | cut -d: -f1 > coverage/remove
+       @lcov -r coverage/coverage.info `cat coverage/remove` > coverage/coverage.cleaned.info
+       @rm coverage/remove
+       @mv coverage/coverage.cleaned.info coverage/coverage.info
+       @genhtml -t "$(PACKAGE_STRING)" -o coverage coverage/coverage.info
+
+coverage:
+       @make lcov-reset
+       @make check
+       @make lcov-report
+else
+lcov-reset:
+       @echo "reconfigure with --enable-coverage"
+
+lcov-report:
+       @echo "reconfigure with --enable-coverage"
+
+coverage:
+       @echo "reconfigure with --enable-tests --enable-coverage"
+endif
index 8f810da..5a8da4d 100644 (file)
@@ -219,6 +219,17 @@ AC_ISC_POSIX
 AC_FUNC_ALLOCA
 AC_CHECK_FUNCS(strlcpy)
 
+### Unit tests, coverage
+
+EFL_CHECK_TESTS([enable_tests="yes"], [enable_tests="no"])
+
+EFL_CHECK_COVERAGE([${enable_tests}], [enable_coverage="yes"], [enable_coverage="no"])
+EFREET_CFLAGS="${EFREET_CFLAGS} ${EFL_COVERAGE_CFLAGS}"
+EFREET_LIBS="${EFREET_LIBS} ${EFL_COVERAGE_LIBS}"
+if test "x$enable_coverage" = "xyes" ; then
+   EFREET_CFLAGS="${EFREET_CFLAGS} ${EFL_DEBUG_CFLAGS}"
+fi
+
 AC_SUBST(requirement_efreet)
 
 AC_OUTPUT([
@@ -232,6 +243,10 @@ doc/Doxyfile
 src/Makefile
 src/lib/Makefile
 src/bin/Makefile
+src/tests/Makefile
+src/tests/data/Makefile
+src/tests/data/sub/Makefile
+src/tests/compare/Makefile
 ])
 
 
@@ -253,6 +268,9 @@ echo "    Sloppy.............: ${enable_sloppy_spec}"
 echo
 echo "  Icon cache...........: ${enable_icon_cache}"
 echo
+echo "  Tests................: ${enable_tests}"
+echo "  Coverage.............: ${enable_coverage}"
+echo
 echo "  Documentation........: ${build_doc}"
 echo
 echo "Compilation............: make (or gmake)"
index ad292fa..add035f 100644 (file)
@@ -1,4 +1,4 @@
 
-SUBDIRS = lib bin
+SUBDIRS = lib bin tests
 
 MAINTAINERCLEANFILES = Makefile.in
diff --git a/src/tests/.cvsignore b/src/tests/.cvsignore
new file mode 100644 (file)
index 0000000..d8dfbd7
--- /dev/null
@@ -0,0 +1,7 @@
+.deps
+.libs
+Makefile
+Makefile.in
+efreet_spec_test
+efreet_test
+efreet_cache_test
diff --git a/src/tests/Makefile.am b/src/tests/Makefile.am
new file mode 100644 (file)
index 0000000..06155d0
--- /dev/null
@@ -0,0 +1,69 @@
+
+SUBDIRS = data compare
+
+MAINTAINERCLEANFILES = Makefile.in
+
+AM_CPPFLAGS = \
+-I. \
+-I$(top_srcdir)/src/lib \
+-DPACKAGE_BIN_DIR=\"$(bindir)\" \
+-DPACKAGE_LIB_DIR=\"$(libdir)\" \
+-DPACKAGE_DATA_DIR=\"$(pkgdatadir)\" \
+@EFREET_CFLAGS@
+
+bin_PROGRAMS = efreet_test efreet_spec_test efreet_cache_test
+
+if ICON_CACHE
+bin_PROGRAMS += efreet_icon_cache_dump
+endif
+
+efreet_test_LDADD = $(top_builddir)/src/lib/libefreet.la \
+                    $(top_builddir)/src/lib/libefreet_mime.la \
+                    @EFREET_LIBS@
+efreet_test_SOURCES = \
+ef_test.h \
+ef_data_dirs.c \
+ef_icon_theme.c \
+ef_ini.c \
+ef_utils.c \
+ef_desktop.c \
+ef_menu.c \
+ef_mime.c \
+main.c
+
+if DEFAULT_VISIBILITY
+efreet_test_SOURCES += \
+ef_locale.c
+endif
+
+efreet_spec_test_LDADD = $(top_builddir)/src/lib/libefreet.la @EINA_LIBS@
+efreet_spec_test_SOURCES = \
+efreet_spec_test.c
+
+efreet_cache_test_LDADD = $(top_builddir)/src/lib/libefreet.la @EFREET_LIBS@
+efreet_cache_test_SOURCES = \
+ef_cache.c
+
+if EFL_ENABLE_TESTS
+
+check_PROGRAMS = efreet_suite
+
+efreet_suite_SOURCES = \
+efreet_suite.c \
+efreet_test_efreet.c \
+efreet_test_efreet_cache.c
+
+efreet_suite_LDADD = @CHECK_LIBS@ $(top_builddir)/src/lib/libefreet.la
+
+endif
+
+if ICON_CACHE
+
+efreet_icon_cache_dump_LDADD = \
+$(top_builddir)/src/lib/libefreet.la \
+@EFREET_LIBS@
+
+efreet_icon_cache_dump_SOURCES = \
+efreet_icon_cache_dump.c
+
+endif
diff --git a/src/tests/compare/.cvsignore b/src/tests/compare/.cvsignore
new file mode 100644 (file)
index 0000000..695ac40
--- /dev/null
@@ -0,0 +1,8 @@
+.deps
+.libs
+Makefile
+Makefile.in
+compare_results
+ecore_alloc
+efreet_alloc
+efreet_menu_alloc
diff --git a/src/tests/compare/Makefile.am b/src/tests/compare/Makefile.am
new file mode 100644 (file)
index 0000000..bb43591
--- /dev/null
@@ -0,0 +1,15 @@
+MAINTAINERCLEANFILES = Makefile.in
+
+AM_CPPFLAGS = \
+-I. \
+-I$(top_srcdir)/src/lib \
+@EFREET_CFLAGS@
+
+bin_PROGRAMS = efreet_alloc efreet_menu_alloc
+
+efreet_menu_alloc_SOURCES = efreet_menu_alloc.c comp.h
+efreet_menu_alloc_LDADD = $(top_builddir)/src/lib/libefreet.la @EFREET_LIBS@
+
+efreet_alloc_SOURCES = efreet_alloc.c comp.h
+efreet_alloc_LDADD = $(top_builddir)/src/lib/libefreet.la @EFREET_LIBS@
+
diff --git a/src/tests/compare/comp.h b/src/tests/compare/comp.h
new file mode 100644 (file)
index 0000000..c02eebe
--- /dev/null
@@ -0,0 +1,527 @@
+#ifndef COMP_H
+#define COMP_H
+
+#define LOOPS 1000
+#define THEME "Tango"
+#define SIZE 16
+
+#define ADDRESS_BOOK_NEW "address-book-new"
+#define APPLICATION_EXIT "application-exit"
+#define APPOINTMENT_NEW "appointment-new"
+#define CONTACT_NEW "contact-new"
+#define DIALOG_APPLY "dialog-apply"
+#define DIALOG_CANCEL "dialog-cancel"
+#define DIALOG_CLOSE "dialog-close"
+#define DIALOG_OK "dialog-ok"
+#define DOCUMENT_NEW "document-new"
+#define DOCUMENT_OPEN "document-open"
+#define DOCUMENT_OPEN_RECENT "document-open-recent"
+#define DOCUMENT_PAGE_SETUP "document-page-setup"
+#define DOCUMENT_PRINT "document-print"
+#define DOCUMENT_PRINT_PREVIEW "document-print-preview"
+#define DOCUMENT_PROPERTIES "document-properties"
+#define DOCUMENT_REVERT "document-revert"
+#define DOCUMENT_SAVE "document-save"
+#define DOCUMENT_SAVE_AS "document-save-as"
+#define EDIT_COPY "edit-copy"
+#define EDIT_CUT "edit-cut"
+#define EDIT_DELETE "edit-delete"
+#define EDIT_FIND "edit-find"
+#define EDIT_FIND_REPLACE "edit-find-replace"
+#define EDIT_PASTE "edit-paste"
+#define EDIT_REDO "edit-redo"
+#define EDIT_SELECT_ALL "edit-select-all"
+#define EDIT_UNDO "edit-undo"
+#define FORMAT_INDENT_LESS "format-indent-less"
+#define FORMAT_INDENT_MORE "format-indent-more"
+#define FORMAT_JUSTIFY_CENTER "format-justify-center"
+#define FORMAT_JUSTIFY_FILL "format-justify-fill"
+#define FORMAT_JUSTIFY_LEFT "format-justify-left"
+#define FORMAT_JUSTIFY_RIGHT "format-justify-right"
+#define FORMAT_TEXT_DIRECTION_LTR "format-text-direction-ltr"
+#define FORMAT_TEXT_DIRECTION_RTL "format-text-direction-rtl"
+#define FORMAT_TEXT_BOLD "format-text-bold"
+#define FORMAT_TEXT_ITALIC "format-text-italic"
+#define FORMAT_TEXT_UNDERLINE "format-text-underline"
+#define FORMAT_TEXT_STRIKETHROUGH "format-text-strikethrough"
+#define GO_BOTTOM "go-bottom"
+#define GO_DOWN "go-down"
+#define GO_FIRST "go-first"
+#define GO_HOME "go-home"
+#define GO_JUMP "go-jump"
+#define GO_LAST "go-last"
+#define GO_NEXT "go-next"
+#define GO_PREVIOUS "go-previous"
+#define GO_TOP "go-top"
+#define GO_UP "go-up"
+#define HELP_ABOUT "help-about"
+#define HELP_CONTENTS "help-contents"
+#define HELP_FAQ "help-faq"
+#define INSERT_IMAGE "insert-image"
+#define INSERT_LINK "insert-link"
+#define INSERT_OBJECT "insert-object"
+#define INSERT_TEXT "insert-text"
+#define LIST_ADD "list-add"
+#define LIST_REMOVE "list-remove"
+#define MAIL_FORWARD "mail-forward"
+#define MAIL_MARK_IMPORTANT "mail-mark-important"
+#define MAIL_MARK_JUNK "mail-mark-junk"
+#define MAIL_MARK_NOTJUNK "mail-mark-notjunk"
+#define MAIL_MARK_READ "mail-mark-read"
+#define MAIL_MARK_UNREAD "mail-mark-unread"
+#define MAIL_MESSAGE_NEW "mail-message-new"
+#define MAIL_REPLY_ALL "mail-reply-all"
+#define MAIL_REPLY_SENDER "mail-reply-sender"
+#define MAIL_SEND_RECEIVE "mail-send-receive"
+#define MEDIA_EJECT "media-eject"
+#define MEDIA_PLAYBACK_PAUSE "media-playback-pause"
+#define MEDIA_PLAYBACK_START "media-playback-start"
+#define MEDIA_PLAYBACK_STOP "media-playback-stop"
+#define MEDIA_RECORD "media-record"
+#define MEDIA_SEEK_BACKWARD "media-seek-backward"
+#define MEDIA_SEEK_FORWARD "media-seek-forward"
+#define MEDIA_SKIP_BACKWARD "media-skip-backward"
+#define MEDIA_SKIP_FORWARD "media-skip-forward"
+#define SYSTEM_LOCK_SCREEN "system-lock-screen"
+#define SYSTEM_LOG_OUT "system-log-out"
+#define SYSTEM_RUN "system-run"
+#define SYSTEM_SEARCH "system-search"
+#define TOOLS_CHECK_SPELLING "tools-check-spelling"
+#define VIEW_FULLSCREEN "view-fullscreen"
+#define VIEW_REFRESH "view-refresh"
+#define VIEW_SORT_ASCENDING "view-sort-ascending"
+#define VIEW_SORT_DESCENDING "view-sort-descending"
+#define WINDOW_CLOSE "window-close"
+#define WINDOW_NEW "window-new"
+#define ZOOM_BEST_FIT "zoom-best-fit"
+#define ZOOM_IN "zoom-in"
+#define ZOOM_ORIGINAL "zoom-original"
+#define ZOOM_OUT "zoom-out"
+
+#define PROCESS_WORKING "process-working"
+
+#define ACCESSORIES_CALCULATOR "accessories-calculator"
+#define ACCESSORIES_CHARACTER_MAP "accessories-character-map"
+#define ACCESSORIES_DICTIONARY "accessories-dictionary"
+#define ACCESSORIES_TEXT_EDITOR "accessories-text-editor"
+#define HELP_BROWSER "help-browser"
+#define MULTIMEDIA_VOLUME_CONTROL "multimedia-volume-control"
+#define PREFERENCES_DESKTOP_ACCESSIBILITY "preferences-desktop-accessibility"
+#define PREFERENCES_DESKTOP_FONT "preferences-desktop-font"
+#define PREFERENCES_DESKTOP_KEYBOARD "preferences-desktop-keyboard"
+#define PREFERENCES_DESKTOP_LOCALE "preferences-desktop-locale"
+#define PREFERENCES_DESKTOP_MULTIMEDIA "preferences-desktop-multimedia"
+#define PREFERENCES_DESKTOP_SCREENSAVER "preferences-desktop-screensaver"
+#define PREFERENCES_DESKTOP_THEME "preferences-desktop-theme"
+#define PREFERENCES_DESKTOP_WALLPAPER "preferences-desktop-wallpaper"
+#define SYSTEM_FILE_MANAGER "system-file-manager"
+#define SYSTEM_SOFTWARE_UPDATE "system-software-update"
+#define UTILITIES_TERMINAL "utilities-terminal"
+
+#define APPLICATIONS_ACCESSORIES "applications-accessories"
+#define APPLICATIONS_DEVELOPMENT "applications-development"
+#define APPLICATIONS_GAMES "applications-games"
+#define APPLICATIONS_GRAPHICS "applications-graphics"
+#define APPLICATIONS_INTERNET "applications-internet"
+#define APPLICATIONS_MULTIMEDIA "applications-multimedia"
+#define APPLICATIONS_OFFICE "applications-office"
+#define APPLICATIONS_OTHER "applications-other"
+#define APPLICATIONS_SYSTEM "applications-system"
+#define APPLICATIONS_UTILITIES "applications-utilities"
+#define PREFERENCES_DESKTOP "preferences-desktop"
+#define PREFERENCES_DESKTOP_ACCESSIBILITY "preferences-desktop-accessibility"
+#define PREFERENCES_DESKTOP_PERIPHERALS "preferences-desktop-peripherals"
+#define PREFERENCES_DESKTOP_PERSONAL "preferences-desktop-personal"
+#define PREFERENCES_OTHER "preferences-other"
+#define PREFERENCES_SYSTEM "preferences-system"
+#define PREFERENCES_SYSTEM_NETWORK "preferences-system-network"
+#define SYSTEM_HELP "system-help"
+
+#define AUDIO_CARD "audio-card"
+#define AUDIO_INPUT_MICROPHONE "audio-input-microphone"
+#define BATTERY "battery"
+#define CAMERA_PHOTO "camera-photo"
+#define CAMERA_VIDEO "camera-video"
+#define COMPUTER "computer"
+#define DRIVE_CDROM "drive-cdrom"
+#define DRIVE_HARDDISK "drive-harddisk"
+#define DRIVE_REMOVABLE_MEDIA "drive-removable-media"
+#define INPUT_GAMING "input-gaming"
+#define INPUT_KEYBOARD "input-keyboard"
+#define INPUT_MOUSE "input-mouse"
+#define MEDIA_CDROM "media-cdrom"
+#define MEDIA_FLOPPY "media-floppy"
+#define MULTIMEDIA_PLAYER "multimedia-player"
+#define NETWORK_WIRED "network-wired"
+#define NETWORK_WIRELESS "network-wireless"
+#define PRINTER "printer"
+
+#define EMBLEM_DEFAULT "emblem-default"
+#define EMBLEM_DOCUMENTS "emblem-documents"
+#define EMBLEM_DOWNLOADS "emblem-downloads"
+#define EMBLEM_FAVORITE "emblem-favorite"
+#define EMBLEM_IMPORTANT "emblem-important"
+#define EMBLEM_MAIL "emblem-mail"
+#define EMBLEM_PHOTOS "emblem-photos"
+#define EMBLEM_READONLY "emblem-readonly"
+#define EMBLEM_SHARED "emblem-shared"
+#define EMBLEM_SYMBOLIC_LINK "emblem-symbolic-link"
+#define EMBLEM_SYNCHRONIZED "emblem-synchronized"
+#define EMBLEM_SYSTEM "emblem-system"
+#define EMBLEM_UNREADABLE "emblem-unreadable"
+
+#define FACE_ANGEL "face-angel"
+#define FACE_CRYING "face-crying"
+#define FACE_DEVIL_GRIN "face-devil-grin"
+#define FACE_DEVIL_SAD "face-devil-sad"
+#define FACE_GLASSES "face-glasses"
+#define FACE_KISS "face-kiss"
+#define FACE_MONKEY "face-monkey"
+#define FACE_PLAIN "face-plain"
+#define FACE_SAD "face-sad"
+#define FACE_SMILE "face-smile"
+#define FACE_SMILE_BIG "face-smile-big"
+#define FACE_SMIRK "face-smirk"
+#define FACE_SURPRISE "face-surprise"
+#define FACE_WINK "face-wink"
+
+#define APPLICATION_X_EXECUTABLE "application-x-executable"
+#define AUDIO_X_GENERIC "audio-x-generic"
+#define FONT_X_GENERIC "font-x-generic"
+#define IMAGE_X_GENERIC "image-x-generic"
+#define PACKAGE_X_GENERIC "package-x-generic"
+#define TEXT_HTML "text-html"
+#define TEXT_X_GENERIC "text-x-generic"
+#define TEXT_X_GENERIC_TEMPLATE "text-x-generic-template"
+#define TEXT_X_SCRIPT "text-x-script"
+#define VIDEO_X_GENERIC "video-x-generic"
+#define X_OFFICE_ADDRESS_BOOK "x-office-address-book"
+#define X_OFFICE_CALENDAR "x-office-calendar"
+#define X_OFFICE_DOCUMENT "x-office-document"
+#define X_OFFICE_PRESENTATION "x-office-presentation"
+#define X_OFFICE_SPREADSHEET "x-office-spreadsheet"
+
+#define FOLDER "folder"
+#define FOLDER_REMOTE "folder-remote"
+#define NETWORK_SERVER "network-server"
+#define NETWORK_WORKGROUP "network-workgroup"
+#define START_HERE "start-here"
+#define USER_DESKTOP "user-desktop"
+#define USER_HOME "user-home"
+#define USER_TRASH "user-trash"
+
+#define APPOINTMENT_MISSED "appointment-missed"
+#define APPOINTMENT_SOON "appointment-soon"
+#define AUDIO_VOLUME_HIGH "audio-volume-high"
+#define AUDIO_VOLUME_LOW "audio-volume-low"
+#define AUDIO_VOLUME_MEDIUM "audio-volume-medium"
+#define AUDIO_VOLUME_MUTED "audio-volume-muted"
+#define BATTERY_CAUTION "battery-caution"
+#define BATTERY_LOW "battery-low"
+#define DIALOG_ERROR "dialog-error"
+#define DIALOG_INFORMATION "dialog-information"
+#define DIALOG_PASSWORD "dialog-password"
+#define DIALOG_QUESTION "dialog-question"
+#define DIALOG_WARNING "dialog-warning"
+#define FOLDER_DRAG_ACCEPT "folder-drag-accept"
+#define FOLDER_OPEN "folder-open"
+#define FOLDER_VISITING "folder-visiting"
+#define IMAGE_LOADING "image-loading"
+#define IMAGE_MISSING "image-missing"
+#define MAIL_ATTACHMENT "mail-attachment"
+#define MAIL_UNREAD "mail-unread"
+#define MAIL_READ "mail-read"
+#define MAIL_REPLIED "mail-replied"
+#define MAIL_SIGNED "mail-signed"
+#define MAIL_SIGNED_VERIFIED "mail-signed-verified"
+#define MEDIA_PLAYLIST_REPEAT "media-playlist-repeat"
+#define MEDIA_PLAYLIST_SHUFFLE "media-playlist-shuffle"
+#define NETWORK_ERROR "network-error"
+#define NETWORK_IDLE "network-idle"
+
+#define NETWORK_OFFLINE "network-offline"
+#define NETWORK_RECEIVE "network-receive"
+#define NETWORK_TRANSMIT "network-transmit"
+#define NETWORK_TRANSMIT_RECEIVE "network-transmit-receive"
+#define PRINTER_ERROR "printer-error"
+#define PRINTER_PRINTING "printer-printing"
+#define SOFTWARE_UPDATE_AVAILABLE "software-update-available"
+#define SOFTWARE_UPDATE_URGENT "software-update-urgent"
+#define SYNC_ERROR "sync-error"
+#define SYNC_SYNCHRONIZING "sync-synchronizing"
+#define TASK_DUE "task-due"
+#define TASK_PASSED_DUE "task-passed-due"
+#define USER_AWAY "user-away"
+#define USER_IDLE "user-idle"
+#define USER_OFFLINE "user-offline"
+#define USER_ONLINE "user-online"
+#define USER_TRASH_FULL "user-trash-full"
+#define WEATHER_CLEAR "weather-clear"
+#define WEATHER_CLEAR_NIGHT "weather-clear-night"
+#define WEATHER_FEW_CLOUDS "weather-few-clouds"
+#define WEATHER_FEW_CLOUDS_NIGHT "weather-few-clouds-night"
+#define WEATHER_FOG "weather-fog"
+#define WEATHER_OVERCAST "weather-overcast"
+#define WEATHER_SEVERE_ALERT "weather-severe-alert"
+#define WEATHER_SHOWERS "weather-showers"
+#define WEATHER_SHOWERS_SCATTERED "weather-showers-scattered"
+#define WEATHER_SNOW "weather-snow"
+#define WEATHER_STORM "weather-storm"
+
+const char *icons[] = {
+                       ADDRESS_BOOK_NEW,
+                       APPLICATION_EXIT,
+                       APPOINTMENT_NEW,
+                       CONTACT_NEW,
+                       DIALOG_APPLY,
+                       DIALOG_CANCEL,
+                       DIALOG_CLOSE,
+                       DIALOG_OK,
+                       DOCUMENT_NEW,
+                       DOCUMENT_OPEN,
+                       DOCUMENT_OPEN_RECENT,
+                       DOCUMENT_PAGE_SETUP,
+                       DOCUMENT_PRINT,
+                       DOCUMENT_PRINT_PREVIEW,
+                       DOCUMENT_PROPERTIES,
+                       DOCUMENT_REVERT,
+                       DOCUMENT_SAVE,
+                       DOCUMENT_SAVE_AS,
+                       EDIT_COPY,
+                       EDIT_CUT,
+                       EDIT_DELETE,
+                       EDIT_FIND,
+                       EDIT_FIND_REPLACE,
+                       EDIT_PASTE,
+                       EDIT_REDO,
+                       EDIT_SELECT_ALL,
+                       EDIT_UNDO,
+                       FORMAT_INDENT_LESS,
+                       FORMAT_INDENT_MORE,
+                       FORMAT_JUSTIFY_CENTER,
+                       FORMAT_JUSTIFY_FILL,
+                       FORMAT_JUSTIFY_LEFT,
+                       FORMAT_JUSTIFY_RIGHT,
+                       FORMAT_TEXT_DIRECTION_LTR,
+                       FORMAT_TEXT_DIRECTION_RTL,
+                       FORMAT_TEXT_BOLD,
+                       FORMAT_TEXT_ITALIC,
+                       FORMAT_TEXT_UNDERLINE,
+                       FORMAT_TEXT_STRIKETHROUGH,
+                       GO_BOTTOM,
+                       GO_DOWN,
+                       GO_FIRST,
+                       GO_HOME,
+                       GO_JUMP,
+                       GO_LAST,
+                       GO_NEXT,
+                       GO_PREVIOUS,
+                       GO_TOP,
+                       GO_UP,
+                       HELP_ABOUT,
+                       HELP_CONTENTS,
+                       HELP_FAQ,
+                       INSERT_IMAGE,
+                       INSERT_LINK,
+                       INSERT_OBJECT,
+                       INSERT_TEXT,
+                       LIST_ADD,
+                       LIST_REMOVE,
+                       MAIL_FORWARD,
+                       MAIL_MARK_IMPORTANT,
+                       MAIL_MARK_JUNK,
+                       MAIL_MARK_NOTJUNK,
+                       MAIL_MARK_READ,
+                       MAIL_MARK_UNREAD,
+                       MAIL_MESSAGE_NEW,
+                       MAIL_REPLY_ALL,
+                       MAIL_REPLY_SENDER,
+                       MAIL_SEND_RECEIVE,
+                       MEDIA_EJECT,
+                       MEDIA_PLAYBACK_PAUSE,
+                       MEDIA_PLAYBACK_START,
+                       MEDIA_PLAYBACK_STOP,
+                       MEDIA_RECORD,
+                       MEDIA_SEEK_BACKWARD,
+                       MEDIA_SEEK_FORWARD,
+                       MEDIA_SKIP_BACKWARD,
+                       MEDIA_SKIP_FORWARD,
+                       SYSTEM_LOCK_SCREEN,
+                       SYSTEM_LOG_OUT,
+                       SYSTEM_RUN,
+                       SYSTEM_SEARCH,
+                       TOOLS_CHECK_SPELLING,
+                       VIEW_FULLSCREEN,
+                       VIEW_REFRESH,
+                       VIEW_SORT_ASCENDING,
+                       VIEW_SORT_DESCENDING,
+                       WINDOW_CLOSE,
+                       WINDOW_NEW,
+                       ZOOM_BEST_FIT,
+                       ZOOM_IN,
+                       ZOOM_ORIGINAL,
+                       ZOOM_OUT,
+                       PROCESS_WORKING,
+                       ACCESSORIES_CALCULATOR,
+                       ACCESSORIES_CHARACTER_MAP,
+                       ACCESSORIES_DICTIONARY,
+                       ACCESSORIES_TEXT_EDITOR,
+                       HELP_BROWSER,
+                       MULTIMEDIA_VOLUME_CONTROL,
+                       PREFERENCES_DESKTOP_ACCESSIBILITY,
+                       PREFERENCES_DESKTOP_FONT,
+                       PREFERENCES_DESKTOP_KEYBOARD,
+                       PREFERENCES_DESKTOP_LOCALE,
+                       PREFERENCES_DESKTOP_MULTIMEDIA,
+                       PREFERENCES_DESKTOP_SCREENSAVER,
+                       PREFERENCES_DESKTOP_THEME,
+                       PREFERENCES_DESKTOP_WALLPAPER,
+                       SYSTEM_FILE_MANAGER,
+                       SYSTEM_SOFTWARE_UPDATE,
+                       UTILITIES_TERMINAL,
+                       APPLICATIONS_ACCESSORIES,
+                       APPLICATIONS_DEVELOPMENT,
+                       APPLICATIONS_GAMES,
+                       APPLICATIONS_GRAPHICS,
+                       APPLICATIONS_INTERNET,
+                       APPLICATIONS_MULTIMEDIA,
+                       APPLICATIONS_OFFICE,
+                       APPLICATIONS_OTHER,
+                       APPLICATIONS_SYSTEM,
+                       APPLICATIONS_UTILITIES,
+                       PREFERENCES_DESKTOP,
+                       PREFERENCES_DESKTOP_ACCESSIBILITY,
+                       PREFERENCES_DESKTOP_PERIPHERALS,
+                       PREFERENCES_DESKTOP_PERSONAL,
+                       PREFERENCES_OTHER,
+                       PREFERENCES_SYSTEM,
+                       PREFERENCES_SYSTEM_NETWORK,
+                       SYSTEM_HELP,
+                       AUDIO_CARD,
+                       AUDIO_INPUT_MICROPHONE,
+                       BATTERY,
+                       CAMERA_PHOTO,
+                       CAMERA_VIDEO,
+                       COMPUTER,
+                       DRIVE_CDROM,
+                       DRIVE_HARDDISK,
+                       DRIVE_REMOVABLE_MEDIA,
+                       INPUT_GAMING,
+                       INPUT_KEYBOARD,
+                       INPUT_MOUSE,
+                       MEDIA_CDROM,
+                       MEDIA_FLOPPY,
+                       MULTIMEDIA_PLAYER,
+                       NETWORK_WIRED,
+                       NETWORK_WIRELESS,
+                       PRINTER,
+                       EMBLEM_DEFAULT,
+                       EMBLEM_DOCUMENTS,
+                       EMBLEM_DOWNLOADS,
+                       EMBLEM_FAVORITE,
+                       EMBLEM_IMPORTANT,
+                       EMBLEM_MAIL,
+                       EMBLEM_PHOTOS,
+                       EMBLEM_READONLY,
+                       EMBLEM_SHARED,
+                       EMBLEM_SYMBOLIC_LINK,
+                       EMBLEM_SYNCHRONIZED,
+                       EMBLEM_SYSTEM,
+                       EMBLEM_UNREADABLE,
+                       FACE_ANGEL,
+                       FACE_CRYING,
+                       FACE_DEVIL_GRIN,
+                       FACE_DEVIL_SAD,
+                       FACE_GLASSES,
+                       FACE_KISS,
+                       FACE_MONKEY,
+                       FACE_PLAIN,
+                       FACE_SAD,
+                       FACE_SMILE,
+                       FACE_SMILE_BIG,
+                       FACE_SMIRK,
+                       FACE_SURPRISE,
+                       FACE_WINK,
+                       APPLICATION_X_EXECUTABLE,
+                       AUDIO_X_GENERIC,
+                       FONT_X_GENERIC,
+                       IMAGE_X_GENERIC,
+                       PACKAGE_X_GENERIC,
+                       TEXT_HTML,
+                       TEXT_X_GENERIC,
+                       TEXT_X_GENERIC_TEMPLATE,
+                       TEXT_X_SCRIPT,
+                       VIDEO_X_GENERIC,
+                       X_OFFICE_ADDRESS_BOOK,
+                       X_OFFICE_CALENDAR,
+                       X_OFFICE_DOCUMENT,
+                       X_OFFICE_PRESENTATION,
+                       X_OFFICE_SPREADSHEET,
+                       FOLDER,
+                       FOLDER_REMOTE,
+                       NETWORK_SERVER,
+                       NETWORK_WORKGROUP,
+                       START_HERE,
+                       USER_DESKTOP,
+                       USER_HOME,
+                       USER_TRASH,
+                       APPOINTMENT_MISSED,
+                       APPOINTMENT_SOON,
+                       AUDIO_VOLUME_HIGH,
+                       AUDIO_VOLUME_LOW,
+                       AUDIO_VOLUME_MEDIUM,
+                       AUDIO_VOLUME_MUTED,
+                       BATTERY_CAUTION,
+                       BATTERY_LOW,
+                       DIALOG_ERROR,
+                       DIALOG_INFORMATION,
+                       DIALOG_PASSWORD,
+                       DIALOG_QUESTION,
+                       DIALOG_WARNING,
+                       FOLDER_DRAG_ACCEPT,
+                       FOLDER_OPEN,
+                       FOLDER_VISITING,
+                       IMAGE_LOADING,
+                       IMAGE_MISSING,
+                       MAIL_ATTACHMENT,
+                       MAIL_UNREAD,
+                       MAIL_READ,
+                       MAIL_REPLIED,
+                       MAIL_SIGNED,
+                       MAIL_SIGNED_VERIFIED,
+                       MEDIA_PLAYLIST_REPEAT,
+                       MEDIA_PLAYLIST_SHUFFLE,
+                       NETWORK_ERROR,
+                       NETWORK_IDLE,
+                       NETWORK_OFFLINE,
+                       NETWORK_RECEIVE,
+                       NETWORK_TRANSMIT,
+                       NETWORK_TRANSMIT_RECEIVE,
+                       PRINTER_ERROR,
+                       PRINTER_PRINTING,
+                       SOFTWARE_UPDATE_AVAILABLE,
+                       SOFTWARE_UPDATE_URGENT,
+                       SYNC_ERROR,
+                       SYNC_SYNCHRONIZING,
+                       TASK_DUE,
+                       TASK_PASSED_DUE,
+                       USER_AWAY,
+                       USER_IDLE,
+                       USER_OFFLINE,
+                       USER_ONLINE,
+                       USER_TRASH_FULL,
+                       WEATHER_CLEAR,
+                       WEATHER_CLEAR_NIGHT,
+                       WEATHER_FEW_CLOUDS,
+                       WEATHER_FEW_CLOUDS_NIGHT,
+                       WEATHER_FOG,
+                       WEATHER_OVERCAST,
+                       WEATHER_SEVERE_ALERT,
+                       WEATHER_SHOWERS,
+                       WEATHER_SHOWERS_SCATTERED,
+                       WEATHER_SNOW,
+                       WEATHER_STORM,
+                       NULL
+               };
+
+#endif
diff --git a/src/tests/compare/efreet_alloc.c b/src/tests/compare/efreet_alloc.c
new file mode 100644 (file)
index 0000000..65b0c88
--- /dev/null
@@ -0,0 +1,27 @@
+#include <Efreet.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "comp.h"
+
+int
+main(void)
+{
+    int i = 0, k;
+    const char *path;
+
+    efreet_init();
+
+    for (k = 0; k < LOOPS; k++)
+    {
+        for (i = 0; icons[i]; i++)
+        {
+            path = efreet_icon_path_find(THEME, icons[i], SIZE);
+//            printf("%s: %s\n", icons[i], (path ? path : "NOT FOUND"));
+        }
+    }
+
+    efreet_shutdown();
+
+    return 0;
+}
+
diff --git a/src/tests/compare/efreet_menu_alloc.c b/src/tests/compare/efreet_menu_alloc.c
new file mode 100644 (file)
index 0000000..fcfb75b
--- /dev/null
@@ -0,0 +1,23 @@
+#include <Efreet.h>
+#include <stdio.h>
+#include "comp.h"
+
+int
+main(void)
+{
+    int k;
+
+    efreet_init();
+
+    for (k = 0; k < LOOPS; k++)
+    {
+        Efreet_Menu *menu;
+        menu = efreet_menu_get();
+        efreet_menu_free(menu);
+    }
+
+    efreet_shutdown();
+
+    return 0;
+}
+
diff --git a/src/tests/data/.cvsignore b/src/tests/data/.cvsignore
new file mode 100644 (file)
index 0000000..282522d
--- /dev/null
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/src/tests/data/Makefile.am b/src/tests/data/Makefile.am
new file mode 100644 (file)
index 0000000..50eef85
--- /dev/null
@@ -0,0 +1,18 @@
+SUBDIRS = sub
+
+MAINTAINERCLEANFILES = Makefile.in
+
+testdir = $(pkgdatadir)/test
+test_DATA = \
+test.ini \
+long.ini \
+test.desktop \
+test_type.desktop \
+test.menu \
+test_menu_slash_bad.menu \
+entry.png \
+entry \
+preferences.menu \
+test_garbage
+
+EXTRA_DIST = $(test_DATA)
diff --git a/src/tests/data/entry b/src/tests/data/entry
new file mode 100644 (file)
index 0000000..503d8e5
Binary files /dev/null and b/src/tests/data/entry differ
diff --git a/src/tests/data/entry.png b/src/tests/data/entry.png
new file mode 100644 (file)
index 0000000..82e5cbe
Binary files /dev/null and b/src/tests/data/entry.png differ
diff --git a/src/tests/data/long.ini b/src/tests/data/long.ini
new file mode 100644 (file)
index 0000000..32154dd
--- /dev/null
@@ -0,0 +1,3 @@
+[section]
+key=averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,the last value
+key2=averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,averylongvalue,the last value
diff --git a/src/tests/data/preferences.menu b/src/tests/data/preferences.menu
new file mode 100644 (file)
index 0000000..904dbd2
--- /dev/null
@@ -0,0 +1,41 @@
+<!DOCTYPE Menu PUBLIC 
+        "-//freedesktop//DTD Menu 1.0//EN"
+        "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
+
+<Menu>
+  <Name>Preferences</Name>
+  <Directory>Preferences.directory</Directory>
+
+  <AppDir>blah</AppDir>
+  <AppDir>/var/tmp</AppDir>
+
+  <Move> 
+    <Old>Blah</Old 
+    <New>Borp</New> 
+  </Move>  
+
+  <Menu> 
+    <Name>House</Name> 
+    <Directory>House.directory</Directory> 
+    <Include> 
+      <Category>House</Category> 
+      <Category>Garden</Category>
+    </Include> 
+  </Menu> 
+  <Menu> 
+    <Name>Mouse</Name> 
+    <Directory>House.directory</Directory> 
+    <Include> 
+      <Category>House</Category> 
+      <Category>Garden</Category>
+    </Include> 
+  </Menu> 
+  <Menu> 
+    <Name>House</Name> 
+    <Directory>House.directory</Directory> 
+    <Include> 
+      <Category>Cat</Category>
+    </Include> 
+  </Menu> 
+</Menu>
+
diff --git a/src/tests/data/sub/.cvsignore b/src/tests/data/sub/.cvsignore
new file mode 100644 (file)
index 0000000..282522d
--- /dev/null
@@ -0,0 +1,2 @@
+Makefile
+Makefile.in
diff --git a/src/tests/data/sub/Makefile.am b/src/tests/data/sub/Makefile.am
new file mode 100644 (file)
index 0000000..7aaf7fc
--- /dev/null
@@ -0,0 +1,8 @@
+
+MAINTAINERCLEANFILES = Makefile.in
+
+testdir = $(pkgdatadir)/test/sub
+test_DATA = \
+test.desktop
+
+EXTRA_DIST = $(test_DATA)
diff --git a/src/tests/data/sub/test.desktop b/src/tests/data/sub/test.desktop
new file mode 100644 (file)
index 0000000..7abf2ae
--- /dev/null
@@ -0,0 +1,5 @@
+[Desktop Entry]
+Type=Application
+Name=Sub
+Exec=subtest
+Categories=Test
diff --git a/src/tests/data/test.desktop b/src/tests/data/test.desktop
new file mode 100644 (file)
index 0000000..412601f
--- /dev/null
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Name=Efreet Test Application
+GenericName=Test Application
+Exec=efreet_test %F %i
+Categories=Test;Enlightenment;
+Icon=TestIcon
+X-Test=Own key
diff --git a/src/tests/data/test.ini b/src/tests/data/test.ini
new file mode 100644 (file)
index 0000000..7f73d81
--- /dev/null
@@ -0,0 +1,21 @@
+# Comments should be ignored (and empty lines)
+
+[contact]
+Name=Foo Bar
+Name[en_US]=English Foo Bar
+Email=  foo@bar.com
+Email[de_DE] = foo@bar.de
+Age =  30
+TrueBoolean=true
+FalseBoolean=false
+InvalidBoolean=invalid
+Escaped=line1\nline2\r\nline3\ttabbed \\ with a backslash\sand\sspaces
+
+[AIM]
+Username=foobar
+
+# the next line has a single space. it should be skipped as well
+[Jabber]
+Username=foobar@bar.de
+
diff --git a/src/tests/data/test.menu b/src/tests/data/test.menu
new file mode 100644 (file)
index 0000000..7ae21ff
--- /dev/null
@@ -0,0 +1,52 @@
+<!DOCTYPE Menu PUBLIC 
+        "-//freedesktop//DTD Menu 1.0//EN"
+        "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
+
+<Menu>
+  <Name>Applications</Name>
+  <Directory>Applications.directory</Directory>
+
+  <DefaultAppDirs/>
+  <DefaultDirectoryDirs/>
+
+  <MergeDir>applications-merged</MergeDir>
+
+  <LegacyDir>/usr/share/applnk</LegacyDir>
+
+  <DefaultLayout>
+    <Merge type="menus"/>
+    <Merge type="files"/>
+    <Separator/>
+    <Menuname>More</Menuname>
+  </DefaultLayout>
+
+  <Move> 
+    <Old>Foo</Old> 
+    <New>Bar</New> 
+    <Old>Foo2</Old> 
+    <New>Bar2</New> 
+  </Move>  
+
+  <Menu> 
+    <Name>Preferences</Name> 
+    <Directory>Preferences.directory</Directory> 
+    <MergeFile>preferences.menu</MergeFile> 
+  </Menu> 
+
+  <Menu> 
+    <Name>Office</Name> 
+    <Directory>Office.directory</Directory> 
+    <Include> 
+      <Category>Office</Category> 
+    </Include> 
+    <Exclude> 
+      <Filename>foo.desktop</Filename> 
+      <And>
+        <Not>
+          <Filename>bar.desktop</Filename>
+        </Not>
+      </And>
+    </Exclude> 
+  </Menu> 
+</Menu>
+
diff --git a/src/tests/data/test_garbage b/src/tests/data/test_garbage
new file mode 100644 (file)
index 0000000..7d178fd
--- /dev/null
@@ -0,0 +1,2341 @@
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcd
\ No newline at end of file
diff --git a/src/tests/data/test_menu_bad_comment.menu b/src/tests/data/test_menu_bad_comment.menu
new file mode 100644 (file)
index 0000000..5815b89
--- /dev/null
@@ -0,0 +1,14 @@
+<!DOCTYPE Menu PUBLIC 
+        "-//freedesktop//DTD Menu 1.0//EN"
+        "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
+
+<Menu>
+  <Name>Applications</Name>
+  <Directory>Applications.directory</Directory>
+
+  <!-- a comment
+   <!-- with a comment -->
+  <Or> This should be commented </Or>
+  -->
+</Menu>
+
diff --git a/src/tests/data/test_menu_slash_bad.menu b/src/tests/data/test_menu_slash_bad.menu
new file mode 100644 (file)
index 0000000..8f7b6f0
--- /dev/null
@@ -0,0 +1,11 @@
+<!DOCTYPE Menu PUBLIC 
+        "-//freedesktop//DTD Menu 1.0//EN"
+        "http://www.freedesktop.org/standards/menu-spec/menu-1.0.dtd">
+
+<Menu>
+  <Name>Applications/Bar</Name>
+
+  <Menu> 
+    <Name>Preferences/Baz</Name> 
+  </Menu> 
+</Menu>
diff --git a/src/tests/data/test_type.desktop b/src/tests/data/test_type.desktop
new file mode 100644 (file)
index 0000000..1b67ff5
--- /dev/null
@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=My_Type
+Name=Efreet Test Application
+GenericName=Test Application
+Exec=efreet_test %F %i
+Categories=Test;Enlightenment;
+Icon=TestIcon
+X-Test=Own key
diff --git a/src/tests/ef_cache.c b/src/tests/ef_cache.c
new file mode 100644 (file)
index 0000000..1fc5cc6
--- /dev/null
@@ -0,0 +1,143 @@
+#include "Efreet.h"
+#include <stdio.h>
+#include <Ecore.h>
+#include "ef_test.h"
+
+#if 0
+EAPI Efreet_Desktop *efreet_util_desktop_file_id_find(const char *file_id);
+
+EAPI Eina_List *efreet_util_desktop_generic_name_glob_list(const char *glob);
+EAPI Eina_List *efreet_util_desktop_comment_glob_list(const char *glob);
+#endif
+
+static void
+check(void)
+{
+    Eina_List *list;
+    Efreet_Desktop *desktop;
+    double start;
+    const char *id;
+
+    // EAPI char *efreet_util_path_to_file_id(const char *path);
+    start = ecore_time_get();
+    id = efreet_util_path_to_file_id("/usr/share/applications/gnome-panel.desktop");
+    if (id)
+    {
+        printf("efreet_util_path_to_file_id(/usr/share/applications/gnome-panel.desktop): %s %.6f\n", id, (ecore_time_get() - start));
+    }
+    else
+        printf("efreet_util_path_to_file_id(/usr/share/applications/gnome-panel.desktop): NULL %.6f\n", (ecore_time_get() - start));
+
+    //EAPI Efreet_Desktop *efreet_util_desktop_name_find(const char *name);
+    start = ecore_time_get();
+    desktop = efreet_util_desktop_name_find("Evolution");
+    if (desktop)
+        printf("efreet_util_desktop_name_find(Evolution): %s %.6f\n", desktop->orig_path, (ecore_time_get() - start));
+    else
+        printf("efreet_util_desktop_name_find(Evolution): NULL %.6f\n", (ecore_time_get() - start));
+    efreet_desktop_free(desktop);
+
+    //EAPI Efreet_Desktop *efreet_util_desktop_generic_name_find(const char *generic_name);
+    start = ecore_time_get();
+    desktop = efreet_util_desktop_generic_name_find("Spreadsheet");
+    if (desktop)
+        printf("efreet_util_desktop_generic_name_find(Spreadsheet): %s %.6f\n", desktop->orig_path, (ecore_time_get() - start));
+    else
+        printf("efreet_util_desktop_generic_name_find(Spreadsheet): NULL %.6f\n", (ecore_time_get() - start));
+    efreet_desktop_free(desktop);
+
+    //EAPI Efreet_Desktop *efreet_util_desktop_wm_class_find(const char *wmname, const char *wmclass);
+    start = ecore_time_get();
+    desktop = efreet_util_desktop_wm_class_find("Firefox", NULL);
+    if (desktop)
+        printf("efreet_util_desktop_wm_class_find(Firefox): %s %.6f\n", desktop->orig_path, (ecore_time_get() - start));
+    else
+        printf("efreet_util_desktop_wm_class_find(Firefox): NULL %.6f\n", (ecore_time_get() - start));
+    efreet_desktop_free(desktop);
+
+    //EAPI Efreet_Desktop *efreet_util_desktop_exec_find(const char *exec);
+    start = ecore_time_get();
+    desktop = efreet_util_desktop_exec_find("/usr/bin/update-manager");
+    if (desktop)
+        printf("efreet_util_desktop_exec_find(update-manager): %s %.6f\n", desktop->orig_path, (ecore_time_get() - start));
+    else
+        printf("efreet_util_desktop_exec_find(update-manager): NULL %.6f\n", (ecore_time_get() - start));
+    efreet_desktop_free(desktop);
+
+    //EAPI Eina_List *efreet_util_desktop_name_glob_list(const char *glob);
+    start = ecore_time_get();
+    list = efreet_util_desktop_name_glob_list("Ubuntu*");
+    if (list)
+    {
+        EINA_LIST_FREE(list, desktop)
+        {
+            printf("efreet_util_desktop_name_glob_list(Ubuntu*): %s\n", desktop->name);
+            efreet_desktop_free(desktop);
+        }
+    }
+    printf("time: %.6f\n", (ecore_time_get() - start));
+
+    //EAPI Eina_List *efreet_util_desktop_mime_list(const char *mime);
+    start = ecore_time_get();
+    list = efreet_util_desktop_mime_list("application/ogg");
+    if (list)
+    {
+        EINA_LIST_FREE(list, desktop)
+        {
+            printf("efreet_util_desktop_mime_list(application/ogg): %s\n", desktop->name);
+            efreet_desktop_free(desktop);
+        }
+    }
+    printf("time: %.6f\n", (ecore_time_get() - start));
+
+    //EAPI Eina_List *efreet_util_desktop_exec_glob_list(const char *glob);
+    start = ecore_time_get();
+    list = efreet_util_desktop_exec_glob_list("*gnome*");
+    if (list)
+    {
+        EINA_LIST_FREE(list, desktop)
+        {
+            printf("efreet_util_desktop_exec_glob_list(*gnome*): %s\n", desktop->exec);
+            efreet_desktop_free(desktop);
+        }
+    }
+    printf("time: %.6f\n", (ecore_time_get() - start));
+
+    //EAPI Eina_List *efreet_util_desktop_categories_list(void);
+    start = ecore_time_get();
+    list = efreet_util_desktop_categories_list();
+    if (list)
+    {
+        EINA_LIST_FREE(list, id)
+        {
+            printf("efreet_util_desktop_categories_list(): %s\n", id);
+        }
+    }
+    printf("time: %.6f\n", (ecore_time_get() - start));
+
+    //EAPI Eina_List *efreet_util_desktop_category_list(const char *category);
+    start = ecore_time_get();
+    list = efreet_util_desktop_category_list("Graphics");
+    if (list)
+    {
+        EINA_LIST_FREE(list, desktop)
+        {
+            printf("efreet_util_desktop_category_list(Graphics): %s\n", desktop->name);
+            efreet_desktop_free(desktop);
+        }
+    }
+    printf("time: %.6f\n", (ecore_time_get() - start));
+
+    desktop = efreet_desktop_get("/opt/google/chrome/google-chrome.desktop");
+    if (desktop) efreet_desktop_free(desktop);
+}
+
+int
+main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+    if (!efreet_init()) return 1;
+    check();
+    ecore_main_loop_begin();
+    efreet_shutdown();
+    return 0;
+}
diff --git a/src/tests/ef_data_dirs.c b/src/tests/ef_data_dirs.c
new file mode 100644 (file)
index 0000000..d6c629b
--- /dev/null
@@ -0,0 +1,307 @@
+#include "Efreet.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int
+ef_cb_efreet_data_home(void)
+{
+    const char *tmp;
+    int ret = 1;
+
+    efreet_shutdown();
+    setenv("XDG_DATA_HOME", "/var/tmp", 1);
+    efreet_init();
+
+    tmp = efreet_data_home_get();
+    if (strcmp(tmp, "/var/tmp"))
+    {
+        printf("efreet_data_home_get() returned incorrect "
+                "value (%s) on XDG_DATA_HOME=/var/tmp\n", tmp);
+        ret = 0;
+    }
+
+    /* reset efreet here so we can set a new home dir */
+    efreet_shutdown();
+    unsetenv("XDG_DATA_HOME");
+    setenv("HOME", "/home/tmp", 1);
+    efreet_init();
+
+    tmp = efreet_data_home_get();
+    if (strcmp(tmp, "/home/tmp/.local/share"))
+    {
+        printf("efreet_data_home_get() returned incorrect "
+                "value (%s) on blank XDG_DATA_HOME\n", tmp);
+        ret = 0;
+    }
+
+    /* reset efreet here so we can set a new home dir */
+    efreet_shutdown();
+    unsetenv("XDG_DATA_HOME");
+    unsetenv("HOME");
+#ifdef _WIN32
+    unsetenv("USERPROFILE");
+#endif
+    efreet_init();
+
+    tmp = efreet_data_home_get();
+    if (strcmp(tmp, "/tmp/.local/share"))
+    {
+        printf("efreet_data_home_get() returned incorrect "
+                "value (%s) on blank XDG_DATA_HOME and blank HOME\n", tmp);
+        ret = 0;
+    }
+
+    return ret;
+}
+
+int
+ef_cb_efreet_config_home(void)
+{
+    const char *tmp;
+    int ret = 1;
+
+    efreet_shutdown();
+    setenv("XDG_CONFIG_HOME", "/var/tmp", 1);
+    efreet_init();
+
+    tmp = efreet_config_home_get();
+    if (strcmp(tmp, "/var/tmp"))
+    {
+        printf("efreet_config_home_get() returned incorrect "
+                "value (%s) on XDG_CONFIG_HOME=/var/tmp\n", tmp);
+        ret = 0;
+    }
+
+    /* reset efreet here so we can set a new home dir */
+    efreet_shutdown();
+    unsetenv("XDG_CONFIG_HOME");
+    setenv("HOME", "/home/tmp", 1);
+    efreet_init();
+
+    tmp = efreet_config_home_get();
+    if (strcmp(tmp, "/home/tmp/.config"))
+    {
+        printf("efreet_config_home_get() returned incorrect "
+                "value (%s) on blank XDG_CONFIG_HOME\n", tmp);
+        ret = 0;
+    }
+
+    /* reset efreet here so we can set a new home dir */
+    efreet_shutdown();
+    unsetenv("XDG_CONFIG_HOME");
+    unsetenv("HOME");
+#ifdef _WIN32
+    unsetenv("USERPROFILE");
+#endif
+    efreet_init();
+
+    tmp = efreet_config_home_get();
+    if (strcmp(tmp, "/tmp/.config"))
+    {
+        printf("efreet_config_home_get() returned incorrect "
+                "value (%s) on blank XDG_CONFIG_HOME and blank HOME\n", tmp);
+        ret = 0;
+    }
+
+    return ret;
+}
+
+int
+ef_cb_efreet_cache_home(void)
+{
+    const char *tmp;
+    int ret = 1;
+
+    efreet_shutdown();
+    setenv("XDG_CACHE_HOME", "/var/tmp", 1);
+    efreet_init();
+
+    tmp = efreet_cache_home_get();
+    if (strcmp(tmp, "/var/tmp"))
+    {
+        printf("efreet_cache_home_get() returned incorrect "
+                "value (%s) on XDG_CACHE_HOME=/var/tmp\n", tmp);
+        ret = 0;
+    }
+
+    /* reset efreet here so we can set a new home dir */
+    efreet_shutdown();
+    unsetenv("XDG_CACHE_HOME");
+    setenv("HOME", "/home/tmp", 1);
+    efreet_init();
+
+    tmp = efreet_cache_home_get();
+    if (strcmp(tmp, "/home/tmp/.cache"))
+    {
+        printf("efreet_cache_home_get() returned incorrect "
+                "value (%s) on blank XDG_CACHE_HOME\n", tmp);
+        ret = 0;
+    }
+
+    /* reset efreet here so we can set a new home dir */
+    efreet_shutdown();
+    unsetenv("XDG_CACHE_HOME");
+    unsetenv("HOME");
+#ifdef _WIN32
+    unsetenv("USERPROFILE");
+#endif
+    efreet_init();
+
+    tmp = efreet_cache_home_get();
+    if (strcmp(tmp, "/tmp/.cache"))
+    {
+        printf("efreet_cache_home_get() returned incorrect "
+                "value (%s) on blank XDG_CACHE_HOME and blank HOME\n", tmp);
+        ret = 0;
+    }
+
+    return ret;
+}
+
+int
+ef_cb_efreet_data_dirs(void)
+{
+    Eina_List *tmp, *l;
+    int ret = 1, i;
+    char dirs[128], *val;
+    char *vals[] = {"/var/tmp/a", "/tmp/b", "/usr/local/share", "/etc", NULL};
+    char *def_vals[] = {PACKAGE_DATA_DIR, "/usr/share", "/usr/local/share", NULL};
+
+    dirs[0] = '\0';
+    for (i = 0; vals[i]; i++)
+    {
+        if (i > 0) strcat(dirs, ":");
+        strcat(dirs, vals[i]);
+    }
+
+    efreet_shutdown();
+    setenv("XDG_DATA_DIRS", dirs, 1);
+    efreet_init();
+
+    i = 0;
+    tmp = efreet_data_dirs_get();
+    EINA_LIST_FOREACH(tmp, l, val)
+    {
+        if (!vals[i])
+        {
+            printf("efreet_data_dirs_get() returned more values then it "
+                    "should have given %s as input\n", dirs);
+            ret = 0;
+            break;
+        }
+
+        if (strcmp(val, vals[i]))
+        {
+            printf("efreet_data_dirs_get() returned incorrect value (%s) when "
+                    "%s set\n", val, dirs);
+            ret = 0;
+        }
+
+        i++;
+    }
+
+    efreet_shutdown();
+    unsetenv("XDG_DATA_DIRS");
+    efreet_init();
+
+    i = 0;
+    tmp = efreet_data_dirs_get();
+    if (eina_list_count(tmp) != 3)
+    {
+        printf("efreet_data_dirs_get() nodes is differnet from expected default\n");
+        ret = 0;
+    }
+
+    EINA_LIST_FOREACH(tmp, l, val)
+    {
+        if (!def_vals[i])
+        {
+            printf("efreet_data_dirs_get() returned more values then it "
+                    "should have given %s as input\n", dirs);
+            ret = 0;
+            break;
+        }
+
+        if (strcmp(val, def_vals[i]))
+        {
+            printf("efreet_data_dirs_get() returned incorrect value (%s) when "
+                    "XDG_DATA_DIRS= is set %s\n", val, def_vals[i]);
+            ret = 0;
+        }
+
+        i++;
+    }
+    return ret;
+}
+
+int
+ef_cb_efreet_config_dirs(void)
+{
+    Eina_List *tmp, *l;
+    int ret = 1, i;
+    char dirs[128], *val;
+    char *vals[] = {"/var/tmp/a", "/tmp/b", "/usr/local/share", "/etc", NULL};
+    char *def_vals[] = {"/etc/xdg", NULL};
+
+    dirs[0] = '\0';
+
+    for (i = 0; vals[i]; i++)
+    {
+        if (i > 0) strcat(dirs, ":");
+        strcat(dirs, vals[i]);
+    }
+
+    efreet_shutdown();
+    setenv("XDG_CONFIG_DIRS", dirs, 1);
+    efreet_init();
+
+    i = 0;
+    tmp = efreet_config_dirs_get();
+    EINA_LIST_FOREACH(tmp, l, val)
+    {
+        if (!vals[i])
+        {
+            printf("efreet_config_dirs_get() returned more values then it "
+                    "should have given %s as input\n", dirs);
+            ret = 0;
+            break;
+        }
+
+        if (strcmp(val, vals[i]))
+        {
+            printf("efreet_config_dirs_get() returned incorrect value (%s) when "
+                    "%s set\n", val, dirs);
+            ret = 0;
+        }
+
+        i++;
+    }
+
+    efreet_shutdown();
+    unsetenv("XDG_CONFIG_DIRS");
+    efreet_init();
+
+    i = 0;
+    tmp = efreet_config_dirs_get();
+    EINA_LIST_FOREACH(tmp, l, val)
+    {
+        if (!def_vals[i])
+        {
+            printf("efreet_config_dirs_get() returned more values then it "
+                    "should have given %s as input\n", dirs);
+            ret = 0;
+            break;
+        }
+
+        if (strcmp(val, def_vals[i]))
+        {
+            printf("efreet_config_dirs_get() returned incorrect value (%s) when "
+                    "XDG_CONFIG_DIRS= is set\n", val);
+            ret = 0;
+        }
+
+        i++;
+    }
+    return ret;
+}
diff --git a/src/tests/ef_desktop.c b/src/tests/ef_desktop.c
new file mode 100644 (file)
index 0000000..6a5e338
--- /dev/null
@@ -0,0 +1,401 @@
+#include "Efreet.h"
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <limits.h>
+#include "ef_test.h"
+
+static void *_cb_command(void *data, Efreet_Desktop *desktop, char *exec, int remaining);
+
+
+int
+ef_cb_desktop_parse(void)
+{
+    Efreet_Desktop *desktop;
+    Eina_List *l;
+    int ret = 1;
+
+    desktop = efreet_desktop_get(PACKAGE_DATA_DIR"/test/test.desktop");
+    if (!desktop)
+    {
+        printf("No desktop found.\n");
+        return 0;
+    }
+
+    if (!desktop->name || strcmp(desktop->name, "Efreet Test Application"))
+    {
+        printf("Invalid Name\n");
+        ret = 0;
+    }
+
+    if (!desktop->generic_name ||
+        strcmp(desktop->generic_name, "Test Application"))
+    {
+        printf("Incorrent GenericName\n");
+        ret = 0;
+    }
+
+    if (!desktop->exec || strcmp(desktop->exec, "efreet_test %F %i"))
+    {
+        printf("Incorrect Exec (%s)\n", (desktop->exec ? desktop->exec : "(null)"));
+        ret = 0;
+    }
+
+    if (desktop->categories)
+    {
+        const char *categories[] = {"Test", "Enlightenment"};
+        const char *cat;
+        int num_categories = 2, i = 0;
+
+       EINA_LIST_FOREACH(desktop->categories, l, cat)
+        {
+            if (i >= num_categories)
+            {
+                printf("Too many categories found.\n");
+                ret = 0;
+                break;
+            }
+
+            if (!cat || !categories[i] || strcmp(cat, categories[i]))
+            {
+                printf("Expected category %s, found %s\n", categories[i], cat);
+                ret = 0;
+            }
+            i++;
+        }
+    }
+    else ret = 0;
+
+    efreet_desktop_free(desktop);
+
+    return ret;
+}
+
+#if 0
+int
+ef_cb_desktop_file_id(void)
+{
+    Efreet_Desktop *desktop;
+    int ret = 1;
+
+    desktop = efreet_desktop_get(PACKAGE_DATA_DIR"/test/test.desktop");
+    if (desktop)
+    {
+        const char *id;
+        int i = 0;
+
+        struct {
+            char *dir;
+            int legacy;
+            char *prefix;
+            char *expected;
+        } tests[] = {
+            {PACKAGE_DATA_DIR"/test/", 0, NULL, "test.desktop"},
+            {PACKAGE_DATA_DIR"/", 0, NULL, "test-test.desktop"},
+            {PACKAGE_DATA_DIR"/", 1, NULL, "test.desktop"},
+            {PACKAGE_DATA_DIR"/", 1, "prefix", "prefix-test.desktop"},
+            {NULL, 0, NULL, NULL}
+        };
+
+        for (i = 0; tests[i].dir != NULL; i++)
+        {
+            id = efreet_desktop_id_get(desktop,
+                                       tests[i].dir,
+                                       tests[i].legacy,
+                                       tests[i].prefix);
+            if (!id || strcmp(id, tests[i].expected))
+            {
+                printf("Expecting id: %s, got: %s\n", tests[i].expected, id);
+                ret = 0;
+            }
+            if (id) eina_stringshare_del(id);
+        }
+    }
+    else
+        ret = 0;
+
+    return ret;
+}
+#endif
+
+int
+ef_cb_desktop_save(void)
+{
+    Efreet_Desktop *desktop;
+
+    printf("\n");
+    desktop = efreet_desktop_get(PACKAGE_DATA_DIR"/test/test.desktop");
+    if (!desktop)
+    {
+        printf("Failed to get Desktop file\n");
+        return 0;
+    }
+
+    printf("save data: %d\n", efreet_desktop_save(desktop));
+    efreet_desktop_free(desktop);
+
+    desktop = efreet_desktop_empty_new("/tmp/test.desktop");
+    desktop->name = strdup("Efreet Test Application");
+    desktop->type = EFREET_DESKTOP_TYPE_APPLICATION;
+    desktop->generic_name = strdup("Test Application");
+    desktop->exec = strdup("efreet_test");
+    desktop->categories = NULL;
+    desktop->categories = eina_list_append(desktop->categories, eina_stringshare_add("Test"));
+    desktop->categories = eina_list_append(desktop->categories, eina_stringshare_add("Enlightenment"));
+    printf("save test: %d\n", efreet_desktop_save(desktop));
+    unlink("/tmp/test.desktop");
+    efreet_desktop_free(desktop);
+
+    return 1;
+}
+
+typedef struct
+{
+  Eina_List *expected;
+  int error;
+  char type;
+} Test_Info;
+
+int
+ef_cb_desktop_command_get(void)
+{
+    Efreet_Desktop *desktop;
+    Eina_List *files, *expected;
+    char olddir[PATH_MAX];
+    Test_Info *info;
+    int ret;
+
+    if (getcwd(olddir, PATH_MAX) != 0) ret = 0;
+    if (chdir("/") != 0) ret = 0;
+
+    printf("\n");
+    desktop = efreet_desktop_empty_new("test.desktop");
+
+    desktop->name = strdup("App Name");
+    desktop->icon = strdup("icon.png");
+
+    files = NULL;
+    files = eina_list_append(files, "/tmp/absolute_path");
+    files = eina_list_append(files, "relative_path");
+    files = eina_list_append(files, "file:///tmp/absolute_uri");
+    files = eina_list_append(files, "file:relative_uri");
+
+    info = NEW(Test_Info, 1);
+    expected = NULL;
+    info->error = 0;
+
+    /* test single full path */
+    info->type = 'f';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %f");
+    expected = eina_list_append(expected, "app '/tmp/absolute_path'");
+    expected = eina_list_append(expected, "app '/relative_path'");
+    expected = eina_list_append(expected, "app '/tmp/absolute_uri'");
+    expected = eina_list_append(expected, "app '/relative_uri'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+
+    /* test single uri */
+    info->type = 'u';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %u");
+    expected = eina_list_append(expected, "app 'file:///tmp/absolute_path'");
+    expected = eina_list_append(expected, "app 'file:///relative_path'");
+    expected = eina_list_append(expected, "app 'file:///tmp/absolute_uri'");
+    expected = eina_list_append(expected, "app 'file:///relative_uri'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+
+    /* test single dir */
+#if 0
+    info->type = 'd';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %d");
+    expected = eina_list_append(expected, "app '/tmp'");
+    expected = eina_list_append(expected, "app '/'");
+    expected = eina_list_append(expected, "app '/tmp'");
+    expected = eina_list_append(expected, "app '/'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+#endif
+
+
+    /* test single names */
+#if 0
+    info->type = 'n';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %n");
+    expected = eina_list_append(expected, "app 'absolute_path'");
+    expected = eina_list_append(expected, "app 'relative_path'");
+    expected = eina_list_append(expected, "app 'absolute_uri'");
+    expected = eina_list_append(expected, "app 'relative_uri'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+#endif
+
+    /* test multiple fullpaths */
+    info->type = 'F';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %F");
+    expected = eina_list_append(expected, "app '/tmp/absolute_path' '/relative_path' '/tmp/absolute_uri' '/relative_uri'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+
+    /* test multiple URIs */
+    info->type = 'U';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %U");
+    expected = eina_list_append(expected, "app 'file:///tmp/absolute_path' 'file:///relative_path' 'file:///tmp/absolute_uri' 'file:///relative_uri'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+
+    /* test multiple dirs */
+#if 0
+    info->type = 'D';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %D");
+    expected = eina_list_append(expected, "app '/tmp' '/' '/tmp' '/'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+#endif
+
+    /* test multiple names */
+#if 0
+    info->type = 'N';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %N");
+    expected = eina_list_append(expected, "app 'absolute_path' 'relative_path' 'absolute_uri' 'relative_uri'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, files, _cb_command, info);
+    expected = eina_list_free(expected);
+#endif
+
+    /* test icon appending */
+    info->type = 'i';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %i");
+    expected = eina_list_append(expected, "app --icon 'icon.png'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, NULL, _cb_command, info);
+    expected = eina_list_free(expected);
+
+    /* test app name */
+    info->type = 'c';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %c");
+    expected = eina_list_append(expected, "app 'App Name'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, NULL, _cb_command, info);
+    expected = eina_list_free(expected);
+
+    /* test desktop path */
+    info->type = 'k';
+    IF_FREE(desktop->exec);
+    desktop->exec = strdup("app %k");
+    expected = eina_list_append(expected, "app 'test.desktop'");
+
+    info->expected = expected;
+    efreet_desktop_command_get(desktop, NULL, _cb_command, info);
+    eina_list_free(expected);
+
+    /* clean up */
+    efreet_desktop_free(desktop);
+    eina_list_free(files);
+
+    if (chdir(olddir) != 0) ret = 0;
+   
+    ret = info->error > 0 ? 0 : 1;
+    free(info);
+
+    return ret;
+}
+
+static void *
+_cb_command(void *data, Efreet_Desktop *desktop __UNUSED__,
+            char *exec, int remaining __UNUSED__)
+{
+  Test_Info *info = data;
+  char *expected;
+
+  expected = eina_list_data_get(info->expected);
+  info->expected = eina_list_demote_list(info->expected, info->expected);
+  if (!expected)
+  {
+    printf("  ERROR: (%%%c) got \"%s\", expected nothing\n", info->type, exec);
+    info->error++;
+  }
+  else
+  {
+    if (strcmp(exec, expected))
+    {
+      printf("  ERROR: (%%%c) got \"%s\", expected \"%s\"\n", info->type, exec, expected);
+      info->error++;
+    }
+  }
+  free(exec);
+  return NULL;
+}
+
+static void *
+cb_type_parse(Efreet_Desktop *desktop __UNUSED__, Efreet_Ini *ini)
+{
+    const char *val;
+    val = efreet_ini_string_get(ini, "X-Test");
+    if (!val) return NULL;
+    return (void *)strdup(val);
+}
+
+int
+ef_cb_desktop_type_parse(void)
+{
+    Efreet_Desktop *desktop;
+    int my_type;
+    char *val;
+    int ret = 1;
+
+    /* add my custom desktop type to efreet */
+    my_type = efreet_desktop_type_add("My_Type", cb_type_parse, NULL,
+                                        (Efreet_Desktop_Type_Free_Cb)free);
+
+    desktop = efreet_desktop_get(PACKAGE_DATA_DIR"/test/test_type.desktop");
+    if (!desktop)
+    {
+        printf("No desktop found.\n");
+        return 0;
+    }
+
+    if (desktop->type != my_type)
+    {
+        printf("Invalid type returned in desktop");
+        ret = 0;
+    }
+
+    val = (char *)efreet_desktop_type_data_get(desktop);
+    if (!val || strcmp(val, "Own key"))
+    {
+        printf("Invalid value of custom key (%s).\n", val);
+        ret = 0;
+    }
+
+    efreet_desktop_free(desktop);
+    return ret;
+}
diff --git a/src/tests/ef_icon_theme.c b/src/tests/ef_icon_theme.c
new file mode 100644 (file)
index 0000000..90eb668
--- /dev/null
@@ -0,0 +1,605 @@
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "Efreet.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+#include <limits.h>
+#include <Ecore.h>
+#include <Ecore_File.h>
+
+#define SIZE 128
+#define THEME "Tango"
+#define FREE(x) do { free(x); x = NULL; } while (0);
+
+static Eina_Bool _hash_keys(Eina_Hash *hash, const char *key, void *list);
+static void ef_icon_theme_themes_find(const char *search_dir,
+                                        Eina_Hash *themes);
+static void ef_icons_find(Efreet_Icon_Theme *theme, Eina_Hash *icons);
+static void ef_read_dir(const char *dir, Eina_Hash *icons);
+
+int
+ef_cb_efreet_icon_theme(void)
+{
+    int ret = 1;
+    const char *tmp;
+
+    unsetenv("XDG_DATA_HOME");
+    efreet_shutdown();
+    putenv("HOME=/var/tmp");
+    efreet_init();
+
+    tmp = efreet_icon_user_dir_get();
+    if (strcmp(tmp, "/var/tmp/.local/share/icons"))
+    {
+        printf("efreet_icon_user_dir_get() returned incorrect "
+                "value (%s) on HOME=/var/tmp\n", tmp);
+        ret = 0;
+    }
+
+    efreet_shutdown();
+    unsetenv("HOME");
+#ifdef _WIN32
+    unsetenv("USERPROFILE");
+#endif
+    efreet_init();
+
+    tmp = efreet_icon_user_dir_get();
+    if (strcmp(tmp, "/tmp/.local/share/icons"))
+    {
+        printf("efreet_icon_user_dir_get() returned incorrect "
+                "value (%s) on HOME=\n", tmp);
+        ret = 0;
+    }
+
+    return ret;
+}
+
+static Eina_Bool
+_hash_keys(Eina_Hash *hash __UNUSED__, const char *key, void *list)
+{
+  Eina_List **l = list;
+
+  *l = eina_list_append(*l, key);
+  return EINA_TRUE;
+}
+
+int
+ef_cb_efreet_icon_theme_list(void)
+{
+    int ret = 1;
+    Eina_List *themes;
+    Eina_List *icon_dirs;
+    Eina_List *l;
+    Eina_Hash *dirs;
+    Eina_Iterator *it;
+    Efreet_Icon_Theme *theme;
+    const char *dir;
+    char buf[PATH_MAX];
+
+    dirs = eina_hash_string_superfast_new(free);
+
+    icon_dirs = efreet_data_dirs_get();
+
+    ef_icon_theme_themes_find(efreet_icon_user_dir_get(), dirs);
+    EINA_LIST_FOREACH(icon_dirs, l, dir)
+    {
+        snprintf(buf, sizeof(buf), "%s/icons", dir);
+        ef_icon_theme_themes_find(buf, dirs);
+    }
+    EINA_LIST_FOREACH(icon_dirs, l, dir)
+    {
+        snprintf(buf, sizeof(buf), "%s/pixmaps", dir);
+        ef_icon_theme_themes_find(buf, dirs);
+    }
+    ef_icon_theme_themes_find("/usr/share/pixmaps", dirs);
+
+    themes = efreet_icon_theme_list_get();
+    EINA_LIST_FOREACH(themes, l, theme)
+    {
+        if ((eina_hash_find(dirs, theme->name.internal)))
+            eina_hash_del(dirs, theme->name.internal, NULL);
+        else
+        {
+            printf("efreet_icon_theme_list_get() returned %s which we didn't "
+                    "see when scanning the directories.\n", theme->name.internal);
+            ret = 0;
+        }
+    }
+    while (themes)
+    {
+        themes = eina_list_remove_list(themes, themes);
+    }
+
+    themes = NULL;
+    it = eina_hash_iterator_key_new(dirs);
+    eina_iterator_foreach(it, EINA_EACH_CB(_hash_keys), &themes);
+    eina_iterator_free(it);
+
+    if (eina_list_count(themes) > 0)
+    {
+        printf("efreet_icon_theme_list_get() missed: ");
+        EINA_LIST_FOREACH(themes, l, dir)
+            printf("%s ", dir);
+        printf("\n");
+
+        ret = 0;
+    }
+    while (themes)
+    {
+        themes = eina_list_remove_list(themes, themes);
+      }
+    eina_hash_free(dirs);
+
+    return ret;
+}
+
+static void
+ef_icon_theme_themes_find(const char *search_dir, Eina_Hash *themes)
+{
+    Eina_List *dirs;
+    char *dir;
+
+    if (!search_dir || !themes) return;
+
+    dirs = ecore_file_ls(search_dir);
+    if (!dirs) return;
+
+    while ((dir = eina_list_data_get(dirs)))
+    {
+        char p[PATH_MAX];
+
+        dirs = eina_list_remove_list(dirs, dirs);
+        /* if we've already added the theme we're done */
+        if (eina_hash_find(themes, dir))
+        {
+            free(dir);
+            continue;
+        }
+
+        /* if the index.theme file exists we open it and look for the hidden
+         * flag. */
+        snprintf(p, sizeof(p), "%s/%s/index.theme", search_dir, dir);
+        if (ecore_file_exists(p))
+        {
+            Efreet_Ini *ini;
+            char *d;
+            int skip = 0;
+
+            ini = efreet_ini_new(p);
+            efreet_ini_section_set(ini, "Icon Theme");
+
+            if (efreet_ini_boolean_get(ini, "Hidden")) skip = 1;
+            if (!efreet_ini_localestring_get(ini, "Name")) skip = 1;
+            efreet_ini_free(ini);
+
+            if (!skip)
+            {
+                d = strdup(dir);
+                eina_hash_add(themes, dir, d);
+            }
+        }
+        free(dir);
+    }
+}
+
+const char *system_icons[] =
+{
+    "address-book-new",
+    "application-exit",
+    "appointment-new",
+    "contact-new",
+    "dialog-apply",
+    "dialog-cancel",
+    "dialog-close",
+    "dialog-ok",
+    "document-new",
+    "document-open",
+    "document-open-recent",
+    "document-page-setup",
+    "document-print",
+    "document-print-preview",
+    "document-properties",
+    "document-revert",
+    "document-save",
+    "document-save-as",
+    "edit-copy",
+    "edit-cut",
+    "edit-delete",
+    "edit-find",
+    "edit-find-replace",
+    "edit-paste",
+    "edit-redo",
+    "edit-select-all",
+    "edit-undo",
+    "format-indent-less",
+    "format-indent-more",
+    "format-justify-center",
+    "format-justify-fill",
+    "format-justify-left",
+    "format-justify-right",
+    "format-text-direction-ltr",
+    "format-text-direction-rtl",
+    "format-text-bold",
+    "format-text-italic",
+    "format-text-underline",
+    "format-text-strikethrough",
+    "go-bottom",
+    "go-down",
+    "go-first",
+    "go-home",
+    "go-jump",
+    "go-last",
+    "go-next",
+    "go-previous",
+    "go-top",
+    "go-up",
+    "help-about",
+    "help-contents",
+    "help-faq",
+    "insert-image",
+    "insert-link",
+    "insert-object",
+    "insert-text",
+    "list-add",
+    "list-remove",
+    "mail-forward",
+    "mail-mark-important",
+    "mail-mark-junk",
+    "mail-mark-notjunk",
+    "mail-mark-read",
+    "mail-mark-unread",
+    "mail-message-new",
+    "mail-reply-all",
+    "mail-reply-sender",
+    "mail-send-receive",
+    "media-eject",
+    "media-playback-pause",
+    "media-playback-start",
+    "media-playback-stop",
+    "media-record",
+    "media-seek-backward",
+    "media-seek-forward",
+    "media-skip-backward",
+    "media-skip-forward",
+    "system-lock-screen",
+    "system-log-out",
+    "system-run",
+    "system-search",
+    "system-search",
+    "tools-check-spelling",
+    "view-fullscreen",
+    "view-refresh",
+    "view-sort-ascending",
+    "view-sort-descending",
+    "window-close",
+    "window-new",
+    "zoom-best-fit",
+    "zoom-in",
+    "zoom-original",
+    "zoom-out",
+    "process-working",
+    "accessories-calculator",
+    "accessories-character-map",
+    "accessories-dictionary",
+    "accessories-text-editor",
+    "help-browser",
+    "multimedia-volume-control",
+#if 0
+    "preferences-desktop-accessibility",
+    "preferences-desktop-font",
+    "preferences-desktop-keyboard",
+    "preferences-desktop-locale",
+    "preferences-desktop-multimedia",
+    "preferences-desktop-screensaver",
+    "preferences-desktop-theme",
+    "preferences-desktop-wallpaper",
+    "system-file-manager",
+    "system-software-update",
+    "utilities-terminal",
+    "applications-accessories",
+    "applications-development",
+    "applications-games",
+    "applications-graphics",
+    "applications-internet",
+    "applications-multimedia",
+    "applications-office",
+    "applications-other",
+    "applications-system",
+    "applications-utilities",
+    "preferences-desktop",
+    "preferences-desktop-accessibility",
+    "preferences-desktop-peripherals",
+    "preferences-desktop-personal",
+    "preferences-other",
+    "preferences-system",
+    "preferences-system-network",
+    "system-help",
+    "audio-card",
+    "audio-input-microphone",
+    "battery",
+    "camera-photo",
+    "camera-video",
+    "computer",
+    "drive-cdrom",
+    "drive-harddisk",
+    "drive-removable-media",
+    "input-gaming",
+    "input-keyboard",
+    "input-mouse",
+    "media-cdrom",
+    "media-floppy",
+    "multimedia-player",
+    "multimedia-player",
+    "network-wired",
+    "network-wireless",
+    "printer",
+    "emblem-default",
+    "emblem-documents",
+    "emblem-downloads",
+    "emblem-favorite",
+    "emblem-important",
+    "emblem-mail",
+    "emblem-photos",
+    "emblem-readonly",
+    "emblem-shared",
+    "emblem-symbolic-link",
+    "emblem-synchronized",
+    "emblem-system",
+    "emblem-unreadable",
+    "face-angel",
+    "face-crying",
+    "face-devil-grin",
+    "face-devil-sad",
+    "face-glasses",
+    "face-kiss",
+    "face-monkey",
+    "face-plain",
+    "face-sad",
+    "face-smile",
+    "face-smile-big",
+    "face-smirk",
+    "face-surprise",
+    "face-wink",
+    "application-x-executable",
+    "audio-x-generic",
+    "font-x-generic",
+    "image-x-generic",
+    "package-x-generic",
+    "text-html",
+    "text-x-generic",
+    "text-x-generic-template",
+    "text-x-script",
+    "video-x-generic",
+    "x-office-address-book",
+    "x-office-calendar",
+    "x-office-document",
+    "x-office-presentation",
+    "x-office-spreadsheet",
+    "folder",
+    "folder-remote",
+    "network-server",
+    "network-workgroup",
+    "start-here",
+    "user-desktop",
+    "user-home",
+    "user-trash",
+    "appointment-missed",
+    "appointment-soon",
+    "audio-volume-high",
+    "audio-volume-low",
+    "audio-volume-medium",
+    "audio-volume-muted",
+    "battery-caution",
+    "battery-low",
+    "dialog-error",
+    "dialog-information",
+    "dialog-password",
+    "dialog-question",
+    "dialog-warning",
+    "folder-drag-accept",
+    "folder-open",
+    "folder-visiting",
+    "image-loading",
+    "image-missing",
+    "mail-attachment",
+    "mail-unread",
+    "mail-read",
+    "mail-replied",
+    "mail-signed",
+    "mail-signed-verified",
+    "media-playlist-repeat",
+    "media-playlist-shuffle",
+    "network-error",
+    "network-idle",
+    "network-offline",
+    "network-receive",
+    "network-transmit",
+    "network-transmit-receive",
+    "printer-error",
+    "printer-printing",
+    "software-update-available",
+    "software-update-urgent",
+    "sync-error",
+    "sync-synchronizing",
+    "task-due",
+    "task-passed-due",
+    "user-away",
+    "user-idle",
+    "user-offline",
+    "user-online",
+    "user-trash-full",
+    "weather-clear",
+    "weather-clear-night",
+    "weather-few-clouds",
+    "weather-few-clouds-night",
+    "weather-fog",
+    "weather-overcast",
+    "weather-severe-alert",
+    "weather-showers",
+    "weather-showers-scattered",
+    "weather-snow",
+    "weather-storm",
+#endif
+    NULL
+};
+
+int
+ef_cb_efreet_icon_match(void)
+{
+    int i, ret = 1;
+    Eina_Hash *icon_hash;
+    Efreet_Icon_Theme *theme;
+
+    theme = efreet_icon_theme_find(THEME);
+    icon_hash = eina_hash_string_superfast_new(free);
+
+    ef_icons_find(theme, icon_hash);
+
+    double start = ecore_time_get();
+    for (i = 0; system_icons[i]; i++)
+    {
+        const char *path;
+        char *p, *s;
+
+        path = efreet_icon_path_find(THEME, system_icons[i], SIZE);
+
+        if (!path)
+        {
+#if 1
+            if (eina_hash_find(icon_hash, system_icons[i]))
+            {
+                printf("NOT FOUND %s\n", system_icons[i]);
+                ret = 0;
+            }
+#endif
+            continue;
+        }
+        else if (!eina_hash_find(icon_hash, system_icons[i]))
+        {
+            printf("Found icon not in hash: %s\n", system_icons[i]);
+        }
+
+        p = strdup(path);
+        s = strrchr(p, '.');
+        if (s) *s = '\0';
+        s = strrchr(p, '/');
+        if (s) s++;
+
+        if (s && strcmp(s, system_icons[i]))
+        {
+            printf("Name mismatch name (%s) vs ef (%s)\n", system_icons[i], s);
+            ret = 0;
+        }
+        free(p);
+    }
+    printf("Time: %f\n", (ecore_time_get() - start));
+    eina_hash_free(icon_hash);
+
+    start = ecore_time_get();
+    for (i = 0; system_icons[i]; i++)
+    {
+        const char *path;
+        char *p, *s;
+
+        path = efreet_icon_path_find(THEME, system_icons[i], SIZE);
+
+        if (!path) continue;
+        p = strdup(path);
+
+        s = strrchr(p, '.');
+        if (s) *s = '\0';
+        s = strrchr(p, '/');
+        if (s) s++;
+
+        if (s && strcmp(s, system_icons[i]))
+        {
+            printf("Name mismatch name (%s) vs ef (%s)\n", system_icons[i], s);
+            ret = 0;
+        }
+        free(p);
+    }
+    printf("Time: %f\n", (ecore_time_get() - start));
+
+    return ret;
+}
+
+static void
+ef_icons_find(Efreet_Icon_Theme *theme, Eina_Hash *icons)
+{
+    Eina_List *l, *ll;
+    char path[PATH_MAX];
+    const char *theme_path;
+
+    if (!theme || !icons) return;
+
+    EINA_LIST_FOREACH(theme->paths, l, theme_path)
+    {
+        Efreet_Icon_Theme_Directory *dir;
+
+        EINA_LIST_FOREACH(theme->directories, ll, dir)
+        {
+            snprintf(path, sizeof(path), "%s/%s/", theme_path, dir->name);
+            ef_read_dir(path, icons);
+        }
+    }
+
+    if (theme->inherits)
+    {
+        Efreet_Icon_Theme *parent_theme;
+        char *parent;
+
+        EINA_LIST_FOREACH(theme->inherits, l, parent)
+        {
+            parent_theme = efreet_icon_theme_find(parent);
+            if (parent_theme)
+                ef_icons_find(parent_theme, icons);
+        }
+    }
+    else if (theme->valid && strcmp(theme->name.internal, "hicolor"))
+    {
+        Efreet_Icon_Theme *parent_theme;
+
+        parent_theme = efreet_icon_theme_find("hicolor");
+        if (parent_theme)
+            ef_icons_find(parent_theme, icons);
+    }
+
+    ef_read_dir("/usr/share/pixmaps", icons);
+}
+
+static void
+ef_read_dir(const char *dir, Eina_Hash *icons)
+{
+    Eina_List *files;
+    char *file;
+
+    if (!dir || !icons) return;
+
+    files = ecore_file_ls(dir);
+    if (!files) return;
+
+    while ((file = eina_list_data_get(files)))
+    {
+        char *p;
+
+        files = eina_list_remove_list(files, files);
+        p = strrchr(file, '.');
+        if (!p)
+        {
+            FREE(file);
+            continue;
+        }
+
+        if (!strcmp(p, ".png") || !strcmp(p, ".xpm"))
+        {
+            *p = '\0';
+
+            eina_hash_add(icons, file, strdup(file));
+        }
+
+        FREE(file);
+    }
+}
diff --git a/src/tests/ef_ini.c b/src/tests/ef_ini.c
new file mode 100644 (file)
index 0000000..d31fb45
--- /dev/null
@@ -0,0 +1,174 @@
+#include "Efreet.h"
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+int
+ef_cb_ini_parse(void)
+{
+    int ret = 1;
+    Efreet_Ini *ini;
+
+    putenv("LC_ALL=en_US");
+
+    ini = efreet_ini_new(PACKAGE_DATA_DIR"/test/test.ini");
+    if (!ini)
+    {
+        printf("efreet_ini_parse() Failed to initialize Efreet_Ini\n");
+        return 0;
+    }
+
+    if (efreet_ini_section_set(ini, "contact"))
+    {
+        const char *val;
+        int ival;
+        unsigned int bval;
+
+        val = efreet_ini_string_get(ini, "Name");
+        if (!val || strcmp(val, "Foo Bar"))
+        {
+            printf("efreet_ini_string_get() Name parsed incorrectly\n");
+            ret = 0;
+        }
+
+        val = efreet_ini_localestring_get(ini, "Name");
+        if (!val || strcmp(val, "English Foo Bar"))
+        {
+            printf("efreet_ini_localestring_get() Name parsed incorrectly\n");
+            ret = 0;
+        }
+
+        val = efreet_ini_string_get(ini, "Email");
+        if (!val || strcmp(val, "foo@bar.com"))
+        {
+            printf("efreet_ini_string_get() Email parsed incorrectly\n");
+            ret = 0;
+        }
+
+        val = efreet_ini_localestring_get(ini, "Email");
+        if (!val || strcmp(val, "foo@bar.com"))
+        {
+            printf("efreet_ini_localestring_get() Email parsed incorrectly\n");
+            ret = 0;
+        }
+
+        ival = efreet_ini_int_get(ini, "Age");
+        if (ival != 30)
+        {
+            printf("efreet_ini_int_get() Age parsed incorrectly\n");
+            ret = 0;
+        }
+
+        bval = efreet_ini_boolean_get(ini, "TrueBoolean");
+        if (!bval)
+        {
+            printf("efreet_ini_boolean_get() TrueBoolean parsed incorrectly\n");
+            ret = 0;
+        }
+
+        bval = efreet_ini_boolean_get(ini, "FalseBoolean");
+        if (bval)
+        {
+            printf("efreet_ini_boolean_get() FalseBoolean parsed incorrectly\n");
+            ret = 0;
+        }
+
+        bval = efreet_ini_boolean_get(ini, "InvalidBoolean");
+        if (bval)
+        {
+            printf("efreet_ini_boolean_get() InvalidBoolean parsed incorrectly\n");
+            ret = 0;
+        }
+
+        val = efreet_ini_string_get(ini, "Escaped");
+        if (!val || strcmp(val, "line1\nline2\r\nline3\ttabbed \\ with a backslash and spaces"))
+        {
+            printf("efreet_ini_unescape() improperly unescaped value\n");
+            ret = 0;
+        }
+    }
+    else
+    {
+        printf("efreet_ini_section_set() Failed to set 'contact' section\n");
+        ret = 0;
+    }
+
+    efreet_ini_free(ini);
+
+    return ret;
+}
+
+int
+ef_cb_ini_long_line(void)
+{
+  Efreet_Ini *ini;
+  int ret = 1;
+
+  struct
+  {
+    char *key;
+    int len;
+  } tests[] = {
+    {"key", 5099},
+    {"key2", 5099},
+    {NULL, 0}
+  };
+
+  ini = efreet_ini_new(PACKAGE_DATA_DIR"/test/long.ini");
+  if (!ini)
+  {
+    printf("Ini failed to parse.\n");
+    ret = 0;
+  }
+
+  if (ret) ret = efreet_ini_section_set(ini, "section");
+  if (ret)
+  {
+    const char *val;
+    int i, len;
+
+    for (i = 0; tests[i].key; i++)
+    {
+      val = efreet_ini_string_get(ini, tests[i].key);
+      if (val)
+      {
+        len = strlen(val);
+        if (len != tests[i].len)
+        {
+          printf("Invalid long line parsing. Value length: %d (expected %d)\n", len, tests[i].len);
+          ret = 0;
+        }
+      }
+      else
+      {
+        printf("Key missing: %s.", tests[i].key);
+        ret = 0;
+      }
+    }
+  }
+  else
+  {
+    printf("Section missing: 'section'.");
+  }
+
+  if (ini) efreet_ini_free(ini);
+  return ret;
+}
+
+int
+ef_cb_ini_garbage(void)
+{
+  Efreet_Ini *ini;
+  int ret = 1;
+   
+  ini = efreet_ini_new(PACKAGE_DATA_DIR"/test/test_garbage");
+  if (!ini)
+  {
+    printf("Ini failed to parse.\n");
+    return 0;
+  }
+  if (ini->data) ret = 0;
+  efreet_ini_free(ini);
+  return ret;
+}
diff --git a/src/tests/ef_locale.c b/src/tests/ef_locale.c
new file mode 100644 (file)
index 0000000..cfc50e2
--- /dev/null
@@ -0,0 +1,85 @@
+#include "Efreet.h"
+#include "efreet_private.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+
+int
+ef_cb_locale(void)
+{
+    int ret = 1, i;
+    struct
+    {
+        char *lc_message;
+        char *lang;
+        char *country;
+        char *modifier;
+    } langs[] = {
+        /* these are ordered such that when we move from LANG to LC_MESSAGES
+         * the LANG env will still be effect. Same with moving from
+         * LC_MESSAGES to LANG */
+        {"LANG=", NULL, NULL, NULL},
+        {"LANG=en", "en", NULL, NULL},
+        {"LANG=en@Latn", "en", NULL, "Latn"},
+        {"LANG=en_US", "en", "US", NULL},
+        {"LANG=en_US@Latn", "en", "US", "Latn"},
+        {"LANG=en_US.blah@Latn", "en", "US", "Latn"},
+        {"LC_MESSAGES=", "en", "US", "Latn"}, /* This will fallback to LANG */
+        {"LC_MESSAGES=fr", "fr", NULL, NULL},
+        {"LC_MESSAGES=fr@Blah", "fr", NULL, "Blah"},
+        {"LC_MESSAGES=fr_FR", "fr", "FR", NULL},
+        {"LC_MESSAGES=fr_FR@Blah", "fr", "FR", "Blah"},
+        {"LC_MESSAGES=fr_FR.Foo@Blah", "fr", "FR", "Blah"},
+        {"LC_ALL=", "fr", "FR", "Blah"}, /* this will fallback to LC_MESSAGES */
+        {"LC_ALL=sr", "sr", NULL, NULL},
+        {"LC_ALL=sr@Ret", "sr", NULL, "Ret"},
+        {"LC_ALL=sr_YU", "sr", "YU", NULL},
+        {"LC_ALL=sr_YU@Ret", "sr", "YU", "Ret"},
+        {"LC_ALL=sr_YU.ssh@Ret", "sr", "YU", "Ret"},
+        {NULL, NULL, NULL, NULL}
+    };
+
+    /* reset everything to blank */
+    putenv("LC_ALL=");
+    putenv("LC_MESSAGES=");
+    putenv("LANG=");
+
+    for (i = 0; langs[i].lc_message; i++)
+    {
+        const char *tmp;
+
+        putenv(langs[i].lc_message);
+
+        tmp = efreet_lang_get();
+        if ((langs[i].lang && (!tmp || strcmp(tmp, langs[i].lang)))
+                || (!langs[i].lang && tmp))
+        {
+            printf("efreet_lang_get() is wrong (%s) with %s\n",
+                                            tmp, langs[i].lang);
+            ret = 0;
+        }
+
+        tmp = efreet_lang_country_get();
+        if ((langs[i].country && (!tmp || strcmp(tmp, langs[i].country)))
+                || (!langs[i].country && tmp))
+        {
+            printf("efreet_lang_country_get() is wrong (%s) with %s\n",
+                                                tmp, langs[i].lang);
+            ret = 0;
+        }
+
+        tmp = efreet_lang_modifier_get();
+        if ((langs[i].modifier && (!tmp || strcmp(tmp, langs[i].modifier)))
+                || (!langs[i].modifier && tmp))
+        {
+            printf("efreet_lang_modifier_get() is wrong with %s with %s\n",
+                                                tmp, langs[i].lang);
+            ret = 0;
+        }
+
+        efreet_shutdown();
+        efreet_init();
+    }
+
+    return ret;
+}
diff --git a/src/tests/ef_menu.c b/src/tests/ef_menu.c
new file mode 100644 (file)
index 0000000..4adbd94
--- /dev/null
@@ -0,0 +1,150 @@
+#include "Efreet.h"
+#include "config.h"
+#include <stdio.h>
+#include <unistd.h>
+
+#if 0
+static void
+ef_menu_desktop_exec(Efreet_Menu *menu)
+{
+    Eina_List *l;
+
+    if (menu->entries)
+    {
+        Efreet_Desktop *desktop;
+
+        EINA_LIST_FOREACH(menu->entries, l, desktop)
+            efreet_desktop_exec(desktop, NULL);
+    }
+    if (menu->sub_menus)
+    {
+        Efreet_Menu *sub_menu;
+
+        EINA_LIST_FOREACH(menu->sub_menus, l, sub_menu)
+            ef_menu_desktop_exec(sub_menu);
+    }
+}
+#endif
+
+int
+ef_cb_menu_get(void)
+{
+    Efreet_Menu *menu;
+
+    menu = efreet_menu_get();
+//    menu = efreet_menu_parse(PACKAGE_DATA_DIR"/test/test.menu");
+    if (!menu)
+    {
+        printf("efreet_menu_get() returned NULL\n");
+        return 0;
+    }
+    printf("\n");
+    efreet_menu_dump(menu, "");
+    efreet_menu_free(menu);
+
+    return 1;
+}
+
+int
+ef_cb_menu_with_slashes(void)
+{
+    Efreet_Menu *menu;
+
+    menu = efreet_menu_parse(PACKAGE_DATA_DIR"/test/test_menu_slash_bad.menu");
+    if (menu)
+    {
+        printf("efreet_menu_get() didn't return NULL\n");
+        return 0;
+    }
+
+    return 1;
+}
+
+int
+ef_cb_menu_save(void)
+{
+    Efreet_Menu *menu;
+    int ret;
+
+//    menu = efreet_menu_get();
+    menu = efreet_menu_parse(PACKAGE_DATA_DIR"/test/test.menu");
+    if (!menu)
+    {
+        printf("efreet_menu_get() returned NULL\n");
+        return 0;
+    }
+    unlink("/tmp/test.menu");
+    ret = efreet_menu_save(menu, "/tmp/test.menu");
+    efreet_menu_free(menu);
+    return ret;
+}
+
+int
+ef_cb_menu_edit(void)
+{
+    Efreet_Menu *menu, *entry;
+    Efreet_Desktop *desktop;
+
+//    menu = efreet_menu_get();
+    menu = efreet_menu_parse(PACKAGE_DATA_DIR"/test/test.menu");
+    if (!menu)
+    {
+        printf("efreet_menu_get() returned NULL\n");
+        return 0;
+    }
+#if 0
+    printf("\n");
+    efreet_menu_dump(menu, "");
+    printf("\n");
+#endif
+
+    desktop = efreet_desktop_get(PACKAGE_DATA_DIR"/test/test.desktop");
+    if (!desktop)
+    {
+        efreet_menu_free(menu);
+        printf("No desktop found.\n");
+        return 0;
+    }
+
+    efreet_menu_desktop_insert(menu, desktop, 0);
+#if 0
+    printf("\n");
+    efreet_menu_dump(menu, "");
+    printf("\n");
+#endif
+    entry = eina_list_data_get(menu->entries);
+    if (desktop != entry->desktop)
+    {
+        efreet_menu_free(menu);
+        return 0;
+    }
+
+    efreet_menu_desktop_insert(menu, desktop, 2);
+#if 0
+    printf("\n");
+    efreet_menu_dump(menu, "");
+    printf("\n");
+#endif
+    entry = eina_list_nth(menu->entries, 2);
+    if (desktop != entry->desktop)
+    {
+        efreet_menu_free(menu);
+        return 0;
+    }
+
+    efreet_menu_desktop_insert(menu, desktop, -1);
+#if 0
+    printf("\n");
+    efreet_menu_dump(menu, "");
+    printf("\n");
+#endif
+    entry = eina_list_data_get(eina_list_last(menu->entries));
+    if (desktop != entry->desktop)
+    {
+        efreet_menu_free(menu);
+        return 0;
+    }
+
+    efreet_menu_free(menu);
+    return 1;
+}
diff --git a/src/tests/ef_mime.c b/src/tests/ef_mime.c
new file mode 100644 (file)
index 0000000..9202f5b
--- /dev/null
@@ -0,0 +1,58 @@
+#include "Efreet.h"
+#include "Efreet_Mime.h"
+#include "config.h"
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <Ecore.h>
+
+#define THEME "Tango"
+#define SIZE 128
+
+int
+ef_mime_cb_get(void)
+{
+    const char *mime = NULL, *icon;
+    int misses = 0, i = 0;
+    struct
+    {
+        char *file;
+        char *mime;
+    } files[] = {
+        {PACKAGE_DATA_DIR"/test/test_type.desktop", "application/x-desktop"},
+        {PACKAGE_DATA_DIR"/test/entry.png", "image/png"},
+        {PACKAGE_DATA_DIR"/test/entry", "image/png"},
+        {PACKAGE_DATA_DIR"/test/sub", "inode/directory"},
+        {NULL, NULL}
+    };
+    double start;
+
+    if (!efreet_mime_init())
+    {
+        printf("Could not init efreet\n");
+        return 1;
+    }
+
+    for (i = 0; files[i].file; ++i)
+    {
+        mime = efreet_mime_type_get(files[i].file);
+        if (!mime)
+        {
+            printf("Got %s as null instead of %s\n", files[i].file, files[i].mime);
+            misses ++;
+        }
+        else if (strcmp(mime, files[i].mime))
+        {
+            printf("Got %s as %s instead of %s\n", files[i].file, mime, files[i].mime);
+            misses ++;
+        }
+        start = ecore_time_get();
+        icon = efreet_mime_type_icon_get(files[i].mime, THEME, SIZE);
+        printf("mime icon: %s %s %f\n", files[i].mime, icon, ecore_time_get() - start);
+    }
+
+    efreet_mime_shutdown();
+
+    return !misses;
+}
diff --git a/src/tests/ef_test.h b/src/tests/ef_test.h
new file mode 100644 (file)
index 0000000..2e88c68
--- /dev/null
@@ -0,0 +1,11 @@
+#ifndef EF_TEST
+#define EF_TEST
+
+#include "config.h"
+
+#include <eina_types.h>
+
+#define IF_FREE(x) do { if (x) free(x); x = NULL; } while (0);
+#define NEW(x, c) calloc(c, sizeof(x))
+
+#endif
diff --git a/src/tests/ef_utils.c b/src/tests/ef_utils.c
new file mode 100644 (file)
index 0000000..67e10ca
--- /dev/null
@@ -0,0 +1,29 @@
+#include "Efreet.h"
+#include "efreet_private.h"
+#include <stdio.h>
+
+int
+ef_cb_utils(void)
+{
+    Efreet_Desktop *desktop;
+    const char *tmp2;
+
+    printf("\n");
+
+    tmp2 = efreet_util_path_to_file_id("/usr/share/applications/this/tmp/test.desktop");
+    if (tmp2) printf("%s\n", tmp2);
+
+    desktop = efreet_util_desktop_file_id_find("kde-kresources.desktop");
+    printf("kde-kresources.desktop: %p\n", desktop);
+    efreet_desktop_free(desktop);
+
+    desktop = efreet_util_desktop_file_id_find("mplayer.desktop");
+    printf("mplayer.desktop: %p\n", desktop);
+    efreet_desktop_free(desktop);
+
+    desktop = efreet_util_desktop_file_id_find("nautilus-computer.desktop");
+    printf("nautilus-computer.desktop: %p\n", desktop);
+    efreet_desktop_free(desktop);
+
+    return 1;
+}
diff --git a/src/tests/efreet_icon_cache_dump.c b/src/tests/efreet_icon_cache_dump.c
new file mode 100644 (file)
index 0000000..40abf18
--- /dev/null
@@ -0,0 +1,134 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+#include <limits.h>
+#include <stdio.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/mman.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <errno.h>
+
+#include <Eina.h>
+#include <Eet.h>
+#include <Ecore.h>
+#include <Ecore_File.h>
+
+#include "Efreet.h"
+#include "efreet_private.h"
+#include "efreet_cache_private.h"
+
+static Eet_Data_Descriptor *edd = NULL;
+
+int verbose = 0;
+
+static void
+dump(Efreet_Icon_Theme *theme, Eet_File *ef)
+{
+    Efreet_Cache_Icons *cache;
+    Eina_Iterator *it;
+    const char *key;
+    unsigned int count = 0;
+    double start, avg;
+
+    start = ecore_time_get();
+
+    printf("open: %s\n", theme->name.internal);
+
+    cache = eet_data_read(ef, edd, theme->name.internal);
+
+    printf("read: %s %f\n", theme->name.internal, ecore_time_get() - start);
+
+    if (!cache || !cache->icons) return ;
+
+    it = eina_hash_iterator_key_new(cache->icons);
+
+    EINA_ITERATOR_FOREACH(it, key)
+    {
+        Efreet_Cache_Icon *icon;
+        unsigned int i;
+
+        icon = eina_hash_find(cache->icons, key);
+
+        for (i = 0; i < icon->icons_count; ++i)
+            count += icon->icons[i]->paths_count;
+    }
+
+    eina_iterator_free(it);
+
+    efreet_hash_free(cache->icons, EINA_FREE_CB(efreet_cache_icon_free));
+    free(cache);
+
+    start = ecore_time_get() - start;
+    avg = start / count;
+    printf("read: %s - %u paths (time: %f) (avg %f)\n", theme->name.internal, count, start, avg);
+}
+
+int
+main(int argc, char **argv)
+{
+    Eet_File *icons_ef;
+    Eet_File *theme_ef;
+    Eina_List *l = NULL;
+    Efreet_Icon_Theme *theme;
+    int i;
+
+    efreet_cache_update = 0;
+
+    if (!efreet_init()) return -1;
+
+    theme_ef = eet_open(efreet_icon_theme_cache_file(), EET_FILE_MODE_READ);
+    if (!theme_ef) return -1;
+
+    edd = efreet_icons_edd(EINA_FALSE);
+    if (!edd) return -1;
+
+    if (argc > 1)
+    {
+        for (i = 1; i < argc; i++)
+        {
+            theme = eet_data_read(theme_ef, efreet_icon_theme_edd(), argv[i]);
+            if (theme) l = eina_list_append(l, theme);
+        }
+    }
+    else
+    {
+        char **keys;
+        int num;
+
+        keys = eet_list(theme_ef, "*", &num);
+        if (keys)
+        {
+            for (i = 0; i < num; i++)
+            {
+                theme = eet_data_read(theme_ef, efreet_icon_theme_edd(), keys[i]);
+                if (theme) l = eina_list_append(l, theme);
+            }
+            free(keys);
+        }
+    }
+
+    icons_ef = eet_open(efreet_icon_cache_file(), EET_FILE_MODE_READ);
+    if (!icons_ef) return -1;
+
+    EINA_LIST_FREE(l, theme)
+    {
+        void *data;
+
+        dump(theme, icons_ef);
+
+        /* free theme */
+        eina_list_free(theme->paths);
+        eina_list_free(theme->inherits);
+        EINA_LIST_FREE(theme->directories, data)
+            free(data);
+        free(theme);
+    }
+
+    eet_close(icons_ef);
+
+    efreet_shutdown();
+    return 0;
+}
diff --git a/src/tests/efreet_spec_test.c b/src/tests/efreet_spec_test.c
new file mode 100644 (file)
index 0000000..7c414b5
--- /dev/null
@@ -0,0 +1,57 @@
+#include <Efreet.h>
+#include <stdio.h>
+#include <limits.h>
+#include "ef_test.h"
+
+static void dump(Efreet_Menu *menu, const char *path);
+
+int
+main(int argc __UNUSED__, char **argv __UNUSED__)
+{
+    Efreet_Menu *menu;
+
+    if (!efreet_init())
+    {
+        fprintf(stderr, "Failed to init Efreet\n");
+        return 1;
+    }
+
+    menu = efreet_menu_get();
+    if (!menu)
+    {
+        fprintf(stderr, "Failed to read menu\n");
+        return 1;
+    }
+
+    dump(menu, "");
+
+    efreet_menu_free(menu);
+    efreet_shutdown();
+    return 0;
+}
+
+static void
+dump(Efreet_Menu *menu, const char *path)
+{
+    Efreet_Menu *entry;
+    Eina_List *l;
+
+    if (!menu || !menu->entries) return;
+
+    EINA_LIST_FOREACH(menu->entries, l, entry)
+    {
+        if (entry->type == EFREET_MENU_ENTRY_DESKTOP)
+        {
+            if (!path || !*path) path = "/";
+            printf("%s\t%s\t%s\n", path, entry->id,
+                                    entry->desktop->orig_path);
+        }
+        else if (entry->type == EFREET_MENU_ENTRY_MENU)
+        {
+            char new_path[PATH_MAX];
+
+            snprintf(new_path, sizeof(new_path), "%s%s/", path, entry->name);
+            dump(entry, new_path);
+        }
+    }
+}
diff --git a/src/tests/efreet_suite.c b/src/tests/efreet_suite.c
new file mode 100644 (file)
index 0000000..7424435
--- /dev/null
@@ -0,0 +1,103 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <Efreet.h>
+
+#include "efreet_suite.h"
+
+typedef struct _Efreet_Test_Case Efreet_Test_Case;
+
+struct _Efreet_Test_Case
+{
+   const char *test_case;
+   void      (*build)(TCase *tc);
+};
+
+static const Efreet_Test_Case etc[] = {
+  { "Efreet", efreet_test_efreet },
+  { "Efreet Cache", efreet_test_efreet_cache },
+  { NULL, NULL }
+};
+
+static void
+_list_tests(void)
+{
+  const Efreet_Test_Case *itr;
+
+   itr = etc;
+   fputs("Available Test Cases:\n", stderr);
+   for (; itr->test_case; itr++)
+     fprintf(stderr, "\t%s\n", itr->test_case);
+}
+
+static Eina_Bool
+_use_test(int argc, const char **argv, const char *test_case)
+{
+   if (argc < 1)
+     return 1;
+
+   for (; argc > 0; argc--, argv++)
+     if (strcmp(test_case, *argv) == 0)
+       return 1;
+   return 0;
+}
+
+static Suite *
+efreet_suite_build(int argc, const char **argv)
+{
+   TCase *tc;
+   Suite *s;
+   int i;
+
+   s = suite_create("Efreet");
+
+   for (i = 0; etc[i].test_case; ++i)
+     {
+       if (!_use_test(argc, argv, etc[i].test_case)) continue;
+       tc = tcase_create(etc[i].test_case);
+
+       etc[i].build(tc);
+
+       suite_add_tcase(s, tc);
+       tcase_set_timeout(tc, 0);
+     }
+
+   return s;
+}
+
+int
+main(int argc, char **argv)
+{
+   Suite *s;
+   SRunner *sr;
+   int i, failed_count;
+
+   for (i = 1; i < argc; i++)
+     if ((strcmp(argv[i], "-h") == 0) ||
+        (strcmp(argv[i], "--help") == 0))
+       {
+         fprintf(stderr, "Usage:\n\t%s [test_case1 .. [test_caseN]]\n",
+                 argv[0]);
+         _list_tests();
+         return 0;
+       }
+     else if ((strcmp(argv[i], "-l") == 0) ||
+             (strcmp(argv[i], "--list") == 0))
+       {
+         _list_tests();
+         return 0;
+       }
+
+   s = efreet_suite_build(argc - 1, (const char **)argv + 1);
+   sr = srunner_create(s);
+
+   srunner_run_all(sr, CK_NORMAL);
+   failed_count = srunner_ntests_failed(sr);
+   srunner_free(sr);
+
+   return (failed_count == 0) ? 0 : 255;
+}
diff --git a/src/tests/efreet_suite.h b/src/tests/efreet_suite.h
new file mode 100644 (file)
index 0000000..bfb47f9
--- /dev/null
@@ -0,0 +1,10 @@
+#ifndef _EFREET_SUITE_H
+#define _EFREET_SUITE_H
+
+#include <check.h>
+
+void efreet_test_efreet(TCase *tc);
+void efreet_test_efreet_cache(TCase *tc);
+
+
+#endif /* _EFREET_SUITE_H */
diff --git a/src/tests/efreet_test_efreet.c b/src/tests/efreet_test_efreet.c
new file mode 100644 (file)
index 0000000..d35ec9e
--- /dev/null
@@ -0,0 +1,25 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Efreet.h>
+
+#include "efreet_suite.h"
+
+
+START_TEST(efreet_test_efreet_init)
+{
+   int ret;
+
+   ret = efreet_init();
+   fail_if(ret != 1);
+
+   ret = efreet_shutdown();
+   fail_if(ret != 0);
+}
+END_TEST
+
+void efreet_test_efreet(TCase *tc)
+{
+   tcase_add_test(tc, efreet_test_efreet_init);
+}
diff --git a/src/tests/efreet_test_efreet_cache.c b/src/tests/efreet_test_efreet_cache.c
new file mode 100644 (file)
index 0000000..2f8972d
--- /dev/null
@@ -0,0 +1,25 @@
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+#include <Efreet.h>
+
+#include "efreet_suite.h"
+
+
+START_TEST(efreet_test_efreet_cache_init)
+{
+   int ret;
+
+   ret = efreet_init();
+   fail_if(ret != 1);
+
+   ret = efreet_shutdown();
+   fail_if(ret != 0);
+}
+END_TEST
+
+void efreet_test_efreet_cache(TCase *tc)
+{
+   tcase_add_test(tc, efreet_test_efreet_cache_init);
+}
diff --git a/src/tests/main.c b/src/tests/main.c
new file mode 100644 (file)
index 0000000..f0093b0
--- /dev/null
@@ -0,0 +1,180 @@
+#include "Efreet.h"
+#include "Efreet_Mime.h"
+#include <Ecore.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+int ef_cb_efreet_data_home(void);
+int ef_cb_efreet_config_home(void);
+int ef_cb_efreet_cache_home(void);
+int ef_cb_efreet_data_dirs(void);
+int ef_cb_efreet_config_dirs(void);
+int ef_cb_efreet_icon_theme(void);
+int ef_cb_efreet_icon_theme_list(void);
+int ef_cb_efreet_icon_match(void);
+int ef_cb_ini_parse(void);
+int ef_cb_ini_long_line(void);
+int ef_cb_ini_garbage(void);
+#if DEFAULT_VISIBILITY
+int ef_cb_locale(void);
+#endif
+int ef_cb_desktop_parse(void);
+int ef_cb_desktop_save(void);
+int ef_cb_desktop_command_get(void);
+int ef_cb_desktop_type_parse(void);
+#if 0
+int ef_cb_desktop_file_id(void);
+#endif
+int ef_cb_menu_get(void);
+int ef_cb_menu_with_slashes(void);
+int ef_cb_menu_save(void);
+#if 0
+int ef_cb_menu_edit(void);
+#endif
+int ef_cb_utils(void);
+int ef_mime_cb_get(void);
+
+typedef struct Efreet_Test Efreet_Test;
+struct Efreet_Test
+{
+    char *name;
+    int (*cb)(void);
+};
+
+static Efreet_Test tests[] = {
+    {"Data Home", ef_cb_efreet_data_home},
+    {"Config Home", ef_cb_efreet_config_home},
+    {"Cache Home", ef_cb_efreet_cache_home},
+    {"Data Directories", ef_cb_efreet_data_dirs},
+    {"Config Directories", ef_cb_efreet_config_dirs},
+    {"Icon Theme Basic", ef_cb_efreet_icon_theme},
+    {"Icon Theme List", ef_cb_efreet_icon_theme_list},
+    {"Icon Matching", ef_cb_efreet_icon_match},
+    {"INI Parsing", ef_cb_ini_parse},
+    {"INI Long Line Parsing", ef_cb_ini_long_line},
+    {"INI Garbage Parsing", ef_cb_ini_garbage},
+#if DEFAULT_VISIBILITY
+    {"Locale Parsing", ef_cb_locale},
+#endif
+    {"Desktop Parsing", ef_cb_desktop_parse},
+    {"Desktop Type Parsing", ef_cb_desktop_type_parse},
+    {"Desktop Save", ef_cb_desktop_save},
+    {"Desktop Command", ef_cb_desktop_command_get},
+#if 0
+    {"Desktop File ID", ef_cb_desktop_file_id},
+#endif
+    {"Menu Parsing", ef_cb_menu_get},
+    {"Menu Incorrect Names", ef_cb_menu_with_slashes},
+    {"Menu Save", ef_cb_menu_save},
+#if 0
+    {"Menu Edit", ef_cb_menu_edit},
+#endif
+    {"Utils", ef_cb_utils},
+    {"Mime", ef_mime_cb_get},
+    {NULL, NULL}
+};
+
+extern char **environ;
+static Eina_List *environment = NULL;
+
+void
+environment_store(void)
+{
+    char *env;
+    char **e;
+
+    EINA_LIST_FREE(environment, env)
+        free(env);
+
+    for (e = environ; *e; e++)
+        environment = eina_list_append(environment, strdup(*e));
+}
+
+void
+environment_restore(void)
+{
+    Eina_List *l;
+    char *e;
+    if (!environment) return;
+
+    clearenv();
+    EINA_LIST_FOREACH(environment, l, e)
+        putenv(e);
+}
+
+int
+main(int argc, char ** argv)
+{
+    int i, passed = 0, num_tests = 0;
+    Eina_List *run = NULL;
+    double total;
+    char *env;
+
+    eina_init();
+    ecore_init();
+
+    total = ecore_time_get();
+    if (argc > 1)
+    {
+        for (i = 1; i < argc; i++)
+        {
+            if ((!strcmp(argv[i], "-h")) ||
+                (!strcmp(argv[i], "--help")))
+            {
+                for (i = 0; tests[i].name; i++)
+                {
+                    printf("%s\n", tests[i].name);
+                }
+                return 1;
+            }
+            run = eina_list_append(run, argv[i]);
+        }
+    }
+
+    environment_store();
+    for (i = 0; tests[i].name; i++)
+    {
+        int ret;
+        double start;
+
+        /* we've been given specific tests and it isn't in the list */
+        if (run && !eina_list_search_unsorted(run, EINA_COMPARE_CB(strcasecmp),
+                                                        tests[i].name))
+            continue;
+
+        if (!efreet_init())
+        {
+            printf("Error initializing Efreet\n");
+            continue;
+        }
+
+        num_tests ++;
+
+        printf("%s:\t\t", tests[i].name);
+        fflush(stdout);
+        start = ecore_time_get();
+        ret = tests[i].cb();
+        printf("%s in %.3f seconds\n", (ret ? "PASSED" : "FAILED"),
+                                            ecore_time_get() - start);
+        passed += ret;
+
+        efreet_shutdown();
+        environment_restore();
+    }
+
+    printf("\n-----------------\n");
+    clearenv();
+    EINA_LIST_FREE(environment, env)
+        free(env);
+    printf("Passed %d of %d tests.\n", passed, num_tests);
+
+    while (run)
+        run = eina_list_remove_list(run, run);
+
+    printf("Total run: %.3f seconds\n", ecore_time_get() - total);
+
+    ecore_shutdown();
+    eina_shutdown();
+    return 0;
+}