#
# Data
#
configure_file (${CMAKE_CURRENT_SOURCE_DIR}/data/update-manager.desktop
                ${CMAKE_BINARY_DIR}/tests/data/update-manager.desktop)
set (TESTVALADIR "${CMAKE_SOURCE_DIR}/tests/vala")
#
# Unit tests
#
find_package (PkgConfig)
set (TEST_DEPS "${UNITY_PLUGIN_DEPS};indicator")
pkg_check_modules (TEST_UNIT_DEPS REQUIRED ${TEST_DEPS} indicator)

set (CFLAGS
     ${TEST_UNIT_DEPS_CFLAGS}
     ${TEST_UNIT_DEPS_CFLAGS_OTHER}
     ${MAINTAINER_CFLAGS}
     "-DTESTDATADIR=${TESTDATADIR}"
     "-DGETTEXT_PACKAGE=\"unity\""
     "-DINDICATORDIR=\"${CMAKE_BINARY_DIR}/tests\""
     "-DINDICATORICONDIR=\"${CMAKE_BINARY_DIR}/tests\""
     )
add_definitions (${CFLAGS})

set (LIBS ${TEST_UNIT_DEPS_LIBRARIES})
link_libraries (${LIBS})

set (LIB_PATHS ${TEST_UNIT_DEPS_LIBRARY_DIRS})
link_directories (${LIB_PATHS})

include_directories (. .. ../services ${CMAKE_BINARY_DIR})

find_program(GLIB_GENMARSHAL glib-genmarshal)
add_custom_command(OUTPUT ${CMAKE_SOURCE_DIR}/services/panel-marshal.c
  COMMAND ${GLIB_GENMARSHAL} ARGS ${CMAKE_SOURCE_DIR}/services/panel-marshal.list --body --prefix=panel_marshal > ${CMAKE_SOURCE_DIR}/services/panel-marshal.c
  COMMAND ${GLIB_GENMARSHAL} ARGS ${CMAKE_SOURCE_DIR}/services/panel-marshal.list --header --prefix=panel_marshal > ${CMAKE_SOURCE_DIR}/services/panel-marshal.h
  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
  DEPENDS ../services/panel-marshal.list
  COMMENT "Generating marshallers")

# We can't have convenience libs so we need to rebuild with what we need
# Please keep actual test files alphabetically at top and then files
# from ../../src or ../../services in alphabetically after that
add_executable (test-unit
                unit/TestFavoriteStoreGSettings.cpp
                unit/TestPanelService.cpp
                unit/TestPlaceFactoryFile.cpp
                unit/TestQuicklistMenuitems.cpp
                unit/TestMain.cpp
                unit/TestUBus.cpp
                ../src/ubus-server.cpp
                ../src/ubus-server.h
                ../services/panel-service.c
                ../services/panel-service.h
                ${CMAKE_SOURCE_DIR}/services/panel-marshal.c
                ../src/FavoriteStore.cpp
                ../src/FavoriteStore.h
                ../src/FavoriteStoreGSettings.cpp
                ../src/FavoriteStoreGSettings.h
                ../src/Introspectable.cpp
                ../src/PlaceEntryRemote.cpp
                ../src/PlaceEntryRemote.h
                ../src/PlaceEntry.h
                ../src/PlaceFactoryFile.cpp
                ../src/PlaceFactoryFile.h
                ../src/PlaceFactory.cpp
                ../src/PlaceFactory.h
                ../src/PlaceRemote.cpp
                ../src/PlaceRemote.h
                ../src/Place.h
                ../src/QuicklistMenuItem.cpp
                ../src/QuicklistMenuItem.h
                ../src/QuicklistMenuItemCheckmark.cpp
                ../src/QuicklistMenuItemCheckmark.h
                ../src/QuicklistMenuItemLabel.cpp
                ../src/QuicklistMenuItemLabel.h
                ../src/QuicklistMenuItemRadio.cpp
                ../src/QuicklistMenuItemRadio.h
                ../src/QuicklistMenuItemSeparator.cpp
                ../src/QuicklistMenuItemSeparator.h
                ../src/QuicklistView.cpp
                ../src/QuicklistView.h
                ../src/
                )

add_executable (test-panel
                TestPanel.cpp
                ../src/PanelStyle.cpp
                ../src/PanelStyle.h
                ../src/PanelView.cpp
                ../src/PanelView.h
                ../src/PanelIndicatorObjectView.cpp
                ../src/PanelIndicatorObjectView.h
                ../src/PanelIndicatorObjectEntryView.cpp
                ../src/PanelIndicatorObjectEntryView.h
            		../src/PanelTitlebarGrabAreaView.h
            		../src/PanelTitlebarGrabAreaView.cpp
                ../src/PanelTray.cpp
                ../src/PanelTray.h
                ../src/IndicatorObjectFactory.h
                ../src/IndicatorObjectProxy.h
                ../src/IndicatorObjectEntryProxy.h
                ../src/IndicatorObjectFactoryRemote.cpp
                ../src/IndicatorObjectFactoryRemote.h
                ../src/IndicatorObjectProxyRemote.cpp
                ../src/IndicatorObjectProxyRemote.h
                ../src/IndicatorObjectEntryProxyRemote.cpp
                ../src/IndicatorObjectEntryProxyRemote.h
                ../src/Introspectable.cpp
                ../src/Introspectable.h
                ../src/PanelHomeButton.cpp
                ../src/PanelHomeButton.h
                ../src/PanelMenuView.cpp
                ../src/PanelMenuView.h
                ../src/TimeMe.cpp
                ../src/TimeMe.h
                ../src/StaticCairoText.cpp
                ../src/StaticCairoText.h
                ../src/WindowButtons.cpp
                ../src/WindowButtons.h
                ../src/WindowManager.cpp
                ../src/WindowManager.h
                ../src/UScreen.cpp
                ../src/UScreen.h
                ../src/ubus-server.cpp
                ../src/ubus-server.h
                )

set (PLACES_COMMON_SOURCE ../src/ubus-server.cpp
                          ../src/ubus-server.h
                          ../src/IconLoader.cpp
                          ../src/IconLoader.h
                          ../src/IconTexture.cpp
                          ../src/IconTexture.h
                          ../src/Introspectable.cpp
                          ../src/Introspectable.h
                          ../src/PlacesSettings.cpp
                          ../src/PlacesSettings.h
                          ../src/PlacesStyle.cpp
                          ../src/PlacesStyle.h
                          ../src/PlacesTile.cpp
                          ../src/PlacesTile.h
                          ../src/PlacesHorizontalTile.cpp
                          ../src/PlacesHorizontalTile.h
                          ../src/PlacesSimpleTile.cpp
                          ../src/PlacesSimpleTile.h
                          ../src/TextureCache.h
                          ../src/TextureCache.cpp
                          ../src/TimeMe.cpp
                          ../src/TimeMe.h
                          ../src/StaticCairoText.cpp
                          ../src/StaticCairoText.h
                          ../src/UBusMessages.h
                          )
add_executable (test-places
                TestPlaces.cpp
                ${PLACES_COMMON_SOURCE}
                ../src/PlacesEmptyView.cpp
                ../src/PlacesEmptyView.h
                ../src/PlacesHomeView.cpp
                ../src/PlacesHomeView.h
                ../src/PlacesSearchBar.cpp
                ../src/PlacesSearchBar.h
                ../src/PlacesSearchBarSpinner.cpp
                ../src/PlacesSearchBarSpinner.h
                ../src/PlacesResultsController.cpp
                ../src/PlacesResultsController.h
                ../src/PlacesResultsView.h
                ../src/PlacesResultsView.cpp
                ../src/PlacesGroupController.cpp
                ../src/PlacesResultsController.h
                ../src/PlacesGroup.cpp
                ../src/PlacesGroup.h
                ../src/PlacesView.cpp
                ../src/PlacesView.h
                ../src/PlacesVScrollBar.cpp
                ../src/PlacesVScrollBar.h
                ../src/PlaceEntryHome.cpp
                ../src/PlaceEntryRemote.h
                ../src/PlaceEntryRemote.cpp
                ../src/PlaceEntryRemote.h
                ../src/PlaceEntry.h
                ../src/PlaceFactoryFile.cpp
                ../src/PlaceFactoryFile.h
                ../src/PlaceFactory.cpp
                ../src/PlaceFactory.h
                ../src/PlaceRemote.cpp
                ../src/PlaceRemote.h
                ../src/Place.h
                )

add_executable (test-places-tiles
                TestPlacesTiles.cpp
                ${PLACES_COMMON_SOURCE}
                )


add_executable (test-places-group
                TestPlacesGroup.cpp
                ${PLACES_COMMON_SOURCE}
                ../src/PlacesGroup.cpp
                ../src/PlacesGroup.h
                )

add_executable (test-places-results
                TestPlacesResults.cpp
                ${PLACES_COMMON_SOURCE}
                ../src/PlacesResultsController.cpp
                ../src/PlacesResultsController.h
                ../src/PlacesResultsView.h
                ../src/PlacesResultsView.cpp
                ../src/PlacesGroupController.cpp
                ../src/PlacesGroupController.h
                ../src/PlacesGroup.cpp
                ../src/PlacesGroup.h
                ../src/PlacesVScrollBar.cpp
                ../src/PlacesVScrollBar.h
                )

add_executable (test-quicklist
                ui/TestQuicklist.cpp
                ui/EventFaker.cpp
                ui/EventFaker.h
                ../src/Introspectable.cpp
                ../src/Introspectable.h
                ../src/QuicklistMenuItem.cpp
                ../src/QuicklistMenuItem.h
                ../src/QuicklistMenuItemCheckmark.cpp
                ../src/QuicklistMenuItemCheckmark.h
                ../src/QuicklistMenuItemLabel.cpp
                ../src/QuicklistMenuItemLabel.h
                ../src/QuicklistMenuItemRadio.cpp
                ../src/QuicklistMenuItemRadio.h
                ../src/QuicklistMenuItemSeparator.cpp
                ../src/QuicklistMenuItemSeparator.h
                ../src/QuicklistView.cpp
                ../src/QuicklistView.h
                ../src/ubus-server.cpp
                ../src/ubus-server.h
                )

add_executable (test-quicklist-visuals
                ui/TestQuicklistVisuals.cpp
                ui/EventFaker.cpp
                ui/EventFaker.h
                ../src/Introspectable.cpp
                ../src/Introspectable.h
                ../src/QuicklistMenuItem.cpp
                ../src/QuicklistMenuItem.h
                ../src/QuicklistMenuItemCheckmark.cpp
                ../src/QuicklistMenuItemCheckmark.h
                ../src/QuicklistMenuItemLabel.cpp
                ../src/QuicklistMenuItemLabel.h
                ../src/QuicklistMenuItemRadio.cpp
                ../src/QuicklistMenuItemRadio.h
                ../src/QuicklistMenuItemSeparator.cpp
                ../src/QuicklistMenuItemSeparator.h
                ../src/QuicklistView.cpp
                ../src/QuicklistView.h
                ../src/ubus-server.cpp
                ../src/ubus-server.h
                )

add_executable (test-places-backend
                TestPlacesBackend.cpp
                ../src/PlaceEntryRemote.cpp
                ../src/PlaceEntryRemote.h
                ../src/PlaceEntry.h
                ../src/PlaceFactoryFile.cpp
                ../src/PlaceFactoryFile.h
                ../src/PlaceFactory.h
                ../src/PlaceFactory.cpp
                ../src/PlaceRemote.cpp
                ../src/PlaceRemote.h
                ../src/Place.h
                )
#
# check target
#
set (TEST_RESULT_DIR ${CMAKE_BINARY_DIR}/tests)
set (TEST_RESULT_XML ${TEST_RESULT_DIR}/test-results.xml)
set (TEST_RESULT_HTML ${TEST_RESULT_DIR}/test-results.html)
set (TEST_COMMAND gtester --verbose -k --g-fatal-warnings -o=${TEST_RESULT_XML} ./test-unit)
add_custom_target (check COMMAND  ${TEST_COMMAND} DEPENDS test-unit)
add_custom_target (check-report COMMAND ${TEST_UNIT_COMMAND} && gtester-report ${TEST_RESULT_XML} > ${TEST_RESULT_HTML})

