###########################
# Google Test
###########################

include_directories(${GTEST_INCLUDE_DIR})

add_library (gtest STATIC
             ${GTEST_SOURCE_DIR}/gtest-all.cc
             ${GTEST_SOURCE_DIR}/gtest_main.cc)
target_link_libraries(gtest ${GTEST_LIBS})

###########################
# Vala Mocks
###########################

set(VALA_MOCKS_HEADER_PATH "${CMAKE_CURRENT_BINARY_DIR}/vala-mocks.h")
set(VALA_MOCKS_SYMBOLS_PATH "${CMAKE_CURRENT_BINARY_DIR}/vala-mocks.def")

vala_init(vala-mocks
	DEPENDS
		indicator-sound-service-lib
	PACKAGES
		config
		gio-2.0
		gio-unix-2.0
		libxml-2.0
		libpulse
		libpulse-mainloop-glib
		libnotify
		accounts-service
		indicator-sound-service
	OPTIONS
		--ccode
		--thread
		--vapidir=${CMAKE_BINARY_DIR}/src/
		--vapidir=${CMAKE_SOURCE_DIR}/vapi/
		--vapidir=.
)

vala_add(vala-mocks
	media-player-mock.vala
)

vala_finish(vala-mocks
	SOURCES
		vala_mocks_VALA_SOURCES
	OUTPUTS
		vala_mocks_VALA_C
	GENERATE_HEADER
		${VALA_MOCKS_HEADER_PATH}
	GENERATE_SYMBOLS
		${VALA_MOCKS_SYMBOLS_PATH}
)

set_source_files_properties(
	${vala_mocks_VALA_SOURCES}
	PROPERTIES
	HEADER_FILE_ONLY TRUE
)

set(
	VALA_MOCKS_SOURCES
	${vala_mocks_VALA_SOURCES}
	${vala_mocks_VALA_C}
	${VALA_MOCKS_SYMBOLS_PATH}
)

add_definitions(
	-Wno-unused-but-set-variable
)

add_library(
	vala-mocks-lib STATIC
	${VALA_MOCKS_SOURCES}
)

target_link_libraries(
	vala-mocks-lib
	indicator-sound-service-lib
)

include_directories(${CMAKE_CURRENT_BINARY_DIR})

###########################
# Pulse Mock
###########################

add_library(
	pulse-mock
	SHARED
	pa-mock.cpp
)

target_link_libraries (pulse-mock ${PULSEAUDIO_LIBRARIES})

###########################
# Name Watch Test
###########################

include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable (name-watch-test name-watch-test.cc ${CMAKE_SOURCE_DIR}/src/bus-watch-namespace.c)
target_link_libraries (name-watch-test gtest ${SOUNDSERVICE_LIBRARIES})
add_test(name-watch-test name-watch-test)

###########################
# Accounts Service User
###########################

include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable (accounts-service-user-test accounts-service-user.cc)
target_link_libraries (
	accounts-service-user-test
	indicator-sound-service-lib
	vala-mocks-lib
	gtest
	${SOUNDSERVICE_LIBRARIES}
	${TEST_LIBRARIES}
)

# Split tests to work around libaccountservice sucking
add_test(accounts-service-user-test-basic
	accounts-service-user-test  --gtest_filter=AccountsServiceUserTest.BasicObject
)

add_test(accounts-service-user-test-player
	accounts-service-user-test  --gtest_filter=AccountsServiceUserTest.SetMediaPlayer
)

###########################
# Volume Control
###########################

include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable (volume-control-test volume-control-test.cc)
target_link_libraries (
	volume-control-test
	indicator-sound-service-lib
	pulse-mock
	gtest
	${TEST_LIBRARIES}
)

add_test(volume-control-test volume-control-test)

###########################
# Sound Menu
###########################

include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable (sound-menu-test sound-menu.cc)
target_link_libraries (
	sound-menu-test
	indicator-sound-service-lib
	vala-mocks-lib
	gtest
	${SOUNDSERVICE_LIBRARIES}
	${TEST_LIBRARIES}
)

add_test(sound-menu-test sound-menu-test)

###########################
# Accounts Service User
###########################

include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable (media-player-user-test media-player-user.cc)
target_link_libraries (
	media-player-user-test
	indicator-sound-service-lib
	vala-mocks-lib
	gtest
	${SOUNDSERVICE_LIBRARIES}
	${TEST_LIBRARIES}
)

# Split tests to work around libaccountservice sucking
add_test(media-player-user-test-basic
	media-player-user-test  --gtest_filter=MediaPlayerUserTest.BasicObject
)
add_test(media-player-user-test-dataset
	media-player-user-test  --gtest_filter=MediaPlayerUserTest.DataSet
)
add_test(media-player-user-test-timeout
	media-player-user-test  --gtest_filter=MediaPlayerUserTest.TimeoutTest
)

###########################
# Greeter List
###########################

include_directories(${CMAKE_SOURCE_DIR}/src)
add_executable (greeter-list-test greeter-list.cc)
target_link_libraries (
	greeter-list-test
	indicator-sound-service-lib
	vala-mocks-lib
	gtest
	${SOUNDSERVICE_LIBRARIES}
	${TEST_LIBRARIES}
)

# Split tests to work around libaccountservice sucking
add_test(greeter-list-test-basic
	greeter-list-test  --gtest_filter=GreeterListTest.BasicObject
)
add_test(greeter-list-test-iterator
	greeter-list-test  --gtest_filter=GreeterListTest.BasicIterator
)

###########################
# Indicator Test
###########################

add_definitions(
	-DINDICATOR_SOUND_SERVICE_BINARY="${CMAKE_BINARY_DIR}/src/indicator-sound-service"
	-DPA_MOCK_LIB="${CMAKE_CURRENT_BINARY_DIR}/libpulse-mock.so"
)
add_executable (indicator-test indicator-test.cc)
target_link_libraries (
	indicator-test
	gtest
	${SOUNDSERVICE_LIBRARIES}
	${TEST_LIBRARIES}
)

# Split tests to work around libaccountservice sucking
add_test(indcator-test
	indicator-test
)