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
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([
src/Makefile
src/lib/Makefile
src/bin/Makefile
+src/tests/Makefile
+src/tests/data/Makefile
+src/tests/data/sub/Makefile
+src/tests/compare/Makefile
])
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)"
-SUBDIRS = lib bin
+SUBDIRS = lib bin tests
MAINTAINERCLEANFILES = Makefile.in
--- /dev/null
+.deps
+.libs
+Makefile
+Makefile.in
+efreet_spec_test
+efreet_test
+efreet_cache_test
--- /dev/null
+
+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
--- /dev/null
+.deps
+.libs
+Makefile
+Makefile.in
+compare_results
+ecore_alloc
+efreet_alloc
+efreet_menu_alloc
--- /dev/null
+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@
+
--- /dev/null
+#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
--- /dev/null
+#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;
+}
+
--- /dev/null
+#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;
+}
+
--- /dev/null
+Makefile
+Makefile.in
--- /dev/null
+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)
--- /dev/null
+[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
--- /dev/null
+<!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>
+
--- /dev/null
+Makefile
+Makefile.in
--- /dev/null
+
+MAINTAINERCLEANFILES = Makefile.in
+
+testdir = $(pkgdatadir)/test/sub
+test_DATA = \
+test.desktop
+
+EXTRA_DIST = $(test_DATA)
--- /dev/null
+[Desktop Entry]
+Type=Application
+Name=Sub
+Exec=subtest
+Categories=Test
--- /dev/null
+[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
--- /dev/null
+# 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
+
--- /dev/null
+<!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>
+
--- /dev/null
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+abcdef
+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
--- /dev/null
+<!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>
+
--- /dev/null
+<!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>
--- /dev/null
+[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
--- /dev/null
+#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;
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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);
+ }
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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
--- /dev/null
+#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;
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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);
+ }
+ }
+}
--- /dev/null
+#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;
+}
--- /dev/null
+#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 */
--- /dev/null
+#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);
+}
--- /dev/null
+#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);
+}
--- /dev/null
+#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;
+}