MACRO( ADD_MOBILE_TEST _testName ) 

	if(COMMAND cmake_policy)
		cmake_policy(SET CMP0003 NEW)
		## The macro ADD_CHECK_TEST creates false warning.
		cmake_policy(SET CMP0002 OLD)
	endif(COMMAND cmake_policy)

	ADD_EXECUTABLE( ${_testName} mobiles/${_testName}/test.c )
	TARGET_LINK_LIBRARIES( ${_testName} ${ARGN} )
	ADD_TEST( ${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testName} ${CMAKE_CURRENT_SOURCE_DIR}/mobiles/${_testName} )
ENDMACRO( ADD_MOBILE_TEST )

## start test
MACRO( SML_START_TEST _testLabel _testName _testSource )

	if(COMMAND cmake_policy)
		cmake_policy(SET CMP0003 NEW)
		## The macro ADD_CHECK_TEST creates false warning.
		cmake_policy(SET CMP0002 OLD)
	endif(COMMAND cmake_policy)

	BUILD_CHECK_TEST( ${_testName} ${CMAKE_CURRENT_BINARY_DIR}/${_testSource} ${ARGN} )

	SET( SML_TESTCASE_CODE "SML_TESTCASE_START(\"${_testLabel}\")\n" )
	SET( SML_TESTCASE_NAME ${_testName} )
	SET( SML_TESTCASE_SOURCE ${_testSource} )

ENDMACRO( SML_START_TEST )

## add testcase to test
MACRO( SML_ADD_TESTCASE _testcase )
	SET( SML_TESTCASE_CODE "${SML_TESTCASE_CODE}SML_TESTCASE_ADD(${_testcase})\n" )
	ADD_TEST( ${_testcase} ${CMAKE_CURRENT_BINARY_DIR}/${SML_TESTCASE_NAME} ${_testcase} )
ENDMACRO( SML_ADD_TESTCASE )

## flush test to source file and build it
MACRO( SML_END_TEST )
	SET( SML_TESTCASE_CODE "${SML_TESTCASE_CODE}SML_TESTCASE_END\n\n" )
	CONFIGURE_FILE( ${SML_TESTCASE_SOURCE} ${CMAKE_CURRENT_BINARY_DIR}/${SML_TESTCASE_SOURCE} @ONLY )
ENDMACRO( SML_END_TEST )

IF( ENABLE_UNIT_TEST )
	LINK_DIRECTORIES( ${GLIB2_LIBRARY_DIRS} ${LIBXML2_LIBRARY_DIRS} ${OPENOBEX_LIBRARY_DIRS} ${LIBWBXML2_LIBRARY_DIRS} ${LIBSOUP2_LIBRARY_DIRS} ${BLUEZ_LIBRARY_DIRS} ${CHECK_LIBRARY_DIRS} )
	if(COMMAND cmake_policy)
		cmake_policy(SET CMP0003 NEW)
	endif(COMMAND cmake_policy)
	# create support library
	ADD_LIBRARY( support STATIC support.c )
	TARGET_LINK_LIBRARIES( support syncml ${CHECK_LIBRARIES} )
	# include Testing Macro
	INCLUDE( Testing )
	# include necessary headers
	INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR} ${CMAKE_BINARY_DIR} ${GLIB2_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIRS} ${LIBWBXML2_INCLUDE_DIRS} ${LIBSOUP2_INCLUDE_DIRS} )
	# add tests
	SET( TEST_TARGET_LIBRARIES support )
	
	## error tests
	SML_START_TEST( "error" error check_error.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( error_create )
	SML_ADD_TESTCASE( error_create_null )
	SML_ADD_TESTCASE( error_free_null )
	SML_ADD_TESTCASE( error_free_null2 )
	SML_ADD_TESTCASE( error_free )
	SML_ADD_TESTCASE( error_set_null )
	SML_ADD_TESTCASE( error_duplicate_null )
	SML_ADD_TESTCASE( error_class )
	SML_END_TEST()

	SML_START_TEST( "location" data_sync_api_location check_data_sync_api_location.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( location_new )
	SML_ADD_TESTCASE( location_uri )
	SML_ADD_TESTCASE( location_name )
	SML_ADD_TESTCASE( location_parent_uri )
	SML_ADD_TESTCASE( location_compare_equal_relative_uri )
	SML_ADD_TESTCASE( location_compare_different_relative_uri )
	SML_ADD_TESTCASE( location_compare_equal_absolute_uri )
	SML_ADD_TESTCASE( location_compare_different_absolute_uri )
	SML_ADD_TESTCASE( location_compare_equal_relative_parent_uri )
	SML_ADD_TESTCASE( location_compare_different_relative_parent_uri )
	SML_ADD_TESTCASE( location_compare_equal_absolute_parent_uri )
	SML_ADD_TESTCASE( location_compare_different_absolute_parent_uri )
	SML_ADD_TESTCASE( location_compare_equal_full_uri_relative )
	SML_ADD_TESTCASE( location_compare_equal_full_uri_normal )
	SML_ADD_TESTCASE( location_compare_equal_full_uri_complex )
	SML_ADD_TESTCASE( location_compare_different_full_uri_wrong_parent )
	SML_ADD_TESTCASE( location_compare_different_full_uri_wrong_uri )
	SML_ADD_TESTCASE( location_compare_equal_full_uri_root )
	SML_ADD_TESTCASE( location_references )
	SML_END_TEST()

	SML_START_TEST( "change_item" data_sync_api_change_item check_data_sync_api_change_item.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( change_item_new )
	SML_ADD_TESTCASE( change_item_set_location )
	SML_ADD_TESTCASE( change_item_set_location_null )
	SML_ADD_TESTCASE( change_item_set_location_missing_uri )
	SML_ADD_TESTCASE( change_item_get_location )
	SML_ADD_TESTCASE( change_item_set_data )
	SML_ADD_TESTCASE( change_item_set_data_with_limit )
	SML_ADD_TESTCASE( change_item_set_data_with_length )
	SML_ADD_TESTCASE( change_item_set_data_with_overflow )
	SML_ADD_TESTCASE( change_item_set_data_not_null )
	SML_ADD_TESTCASE( change_item_get_data )
	SML_ADD_TESTCASE( change_item_get_data_with_limit )
	SML_ADD_TESTCASE( change_item_get_data_with_length )
	SML_ADD_TESTCASE( change_item_get_data_with_overflow )
	SML_ADD_TESTCASE( change_item_set_binary_data )
	SML_ADD_TESTCASE( change_item_get_binary_data )
	SML_ADD_TESTCASE( change_item_set_planned_size )
	SML_ADD_TESTCASE( change_item_get_planned_size )
	SML_ADD_TESTCASE( change_item_set_content_type )
	SML_ADD_TESTCASE( change_item_set_content_type_not_null )
	SML_ADD_TESTCASE( change_item_get_content_type )
	SML_ADD_TESTCASE( change_item_get_fragment_missing_data )
	SML_ADD_TESTCASE( change_item_get_fragment )
	SML_ADD_TESTCASE( change_item_get_too_large_fragment )
	SML_ADD_TESTCASE( change_item_get_illegal_fragment )
	SML_ADD_TESTCASE( change_item_attach_empty_fragment )
	SML_ADD_TESTCASE( change_item_attach_fragment )
	SML_ADD_TESTCASE( change_item_attach_too_long_fragment )
	SML_ADD_TESTCASE( change_item_attach_unnecessary_fragment )
	SML_ADD_TESTCASE( change_item_data_fix_cr )
	SML_ADD_TESTCASE( change_item_data_fix_crlf )
	SML_ADD_TESTCASE( change_item_data_fix_cr_and_crlf )
	SML_ADD_TESTCASE( change_item_references )
	SML_END_TEST()

	SML_START_TEST( "map_item" data_sync_api_map_item check_data_sync_api_map_item.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( map_item_new )
	SML_ADD_TESTCASE( map_item_set_local )
	SML_ADD_TESTCASE( map_item_set_local_not_null )
	SML_ADD_TESTCASE( map_item_set_local_no_name )
	SML_ADD_TESTCASE( map_item_set_local_no_parent )
	SML_ADD_TESTCASE( map_item_set_local_missing_uri )
	SML_ADD_TESTCASE( map_item_get_local )
	SML_ADD_TESTCASE( map_item_set_remote )
	SML_ADD_TESTCASE( map_item_set_remote_not_null )
	SML_ADD_TESTCASE( map_item_set_remote_no_name )
	SML_ADD_TESTCASE( map_item_set_remote_no_parent )
	SML_ADD_TESTCASE( map_item_set_remote_missing_uri )
	SML_ADD_TESTCASE( map_item_get_remote )
	SML_ADD_TESTCASE( map_item_compliance )
	SML_ADD_TESTCASE( map_item_compliance_missing_local )
	SML_ADD_TESTCASE( map_item_compliance_missing_remote )
	SML_ADD_TESTCASE( map_item_compliance_wrong_local )
	SML_ADD_TESTCASE( map_item_compliance_wrong_remote )
	SML_ADD_TESTCASE( map_item_references )
	SML_END_TEST()

	SML_START_TEST( "XML fix broken Item Data" xml-fix-broken-item-data check_xml_fix_broken_item_data.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_no_item )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_no_item_data )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_no_broken_item_data )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_one_broken_item_data )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_multi_broken_item_data )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_mixed_broken_item_data )
	SML_ADD_TESTCASE( xml_fix_broken_item_data_utf16_conversion )
	SML_END_TEST()

	SML_START_TEST( "XML Parser" xmlparser check_xml_parser.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( xml_parser_empty )
	SML_ADD_TESTCASE( xml_parser_syncml_empty )
	SML_ADD_TESTCASE( xml_parser_syncml_wrong_case )
	SML_ADD_TESTCASE( xml_parser_syncml_additional )
	SML_ADD_TESTCASE( xml_parser_no_syncbody )
	SML_ADD_TESTCASE( xml_parser_no_synchdr )
	SML_ADD_TESTCASE( xml_parser_synchdr_empty )
	SML_ADD_TESTCASE( xml_parser_synchdr_verproto )
	SML_ADD_TESTCASE( xml_parser_synchdr_verdtd )
	SML_ADD_TESTCASE( xml_parser_synchdr_msgid )
	SML_ADD_TESTCASE( xml_parser_synchdr_sessionid )
	SML_ADD_TESTCASE( xml_parser_synchdr_additional )
	SML_ADD_TESTCASE( xml_parser_synchdr_target )
	SML_ADD_TESTCASE( xml_parser_synchdr_source )
	SML_ADD_TESTCASE( xml_parser_synchdr_source2 )
	SML_ADD_TESTCASE( xml_parser_status_empty )
	SML_ADD_TESTCASE( xml_parser_status_cmdid )
	SML_ADD_TESTCASE( xml_parser_status_msgref )
	SML_ADD_TESTCASE( xml_parser_status_cmdref )
	SML_ADD_TESTCASE( xml_parser_status )
	SML_ADD_TESTCASE( xml_parser_status2 )
	SML_ADD_TESTCASE( xml_parser_status3 )
	SML_ADD_TESTCASE( xml_parser_status_google )
	SML_ADD_TESTCASE( xml_parser_final )
	SML_ADD_TESTCASE( xml_parser_final2 )
	SML_ADD_TESTCASE( xml_parser_cmd )
	SML_ADD_TESTCASE( xml_parser_cmd_final )
	SML_ADD_TESTCASE( xml_parser_sync_subcommand )
	SML_ADD_TESTCASE( xml_parser_doctype )
	SML_ADD_TESTCASE( xml_parser_emi )
	SML_ADD_TESTCASE( xml_parser_large_obj )
	SML_ADD_TESTCASE( xml_parser_large_obj2 )
	SML_ADD_TESTCASE( xml_parser_large_obj_error )
	SML_ADD_TESTCASE( xml_parser_large_obj_mangled )
	SML_ADD_TESTCASE( xml_parser_devinf )
	SML_ADD_TESTCASE( xml_parser_devinf_ctcap )
	SML_ADD_TESTCASE( xml_parser_devinf12 )
	SML_ADD_TESTCASE( xml_parser_devinf_ext )
	SML_ADD_TESTCASE( xml_parser_empty_data_element )
	SML_ADD_TESTCASE( xml_parser_msgref_zero )
	SML_ADD_TESTCASE( xml_parser_ctcap_property_size )
	SML_ADD_TESTCASE( xml_parser_ctcap11_size )
	SML_ADD_TESTCASE( xml_parser_item_with_meta_in_status )
	SML_ADD_TESTCASE( xml_parser_item_with_meta_and_long_empty_data_in_status )
	SML_ADD_TESTCASE( xml_parser_item_with_meta_and_short_empty_data_in_status )
	SML_END_TEST()

	SML_START_TEST( "XML Assembler" xmlassembler check_xml_assembler.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( xml_assembler_message_empty )
	SML_ADD_TESTCASE( xml_assembler_message_only_header )
	SML_ADD_TESTCASE( xml_assembler_message_status )
	SML_ADD_TESTCASE( xml_assembler_message_cmd )
	SML_ADD_TESTCASE( xml_assembler_message_subcmd )
	SML_ADD_TESTCASE( xml_assembler_message_several_subcmd )
	SML_ADD_TESTCASE( xml_assembler_message_flush_open )
	SML_ADD_TESTCASE( xml_assembler_out_of_order )
	SML_ADD_TESTCASE( xml_assembler_limit1 )
	SML_ADD_TESTCASE( xml_assembler_limit2 )
	SML_ADD_TESTCASE( xml_assembler_limit3 )
	SML_ADD_TESTCASE( xml_assembler_limit4 )
	SML_ADD_TESTCASE( xml_assembler_limit5 )
	SML_ADD_TESTCASE( xml_assembler_devinf )
	SML_ADD_TESTCASE( xml_assembler_devinf12 )
	SML_ADD_TESTCASE( xml_assembler_order )
	SML_ADD_TESTCASE( xml_assembler_reuse )
	SML_ADD_TESTCASE( xml_assembler_leak )
	SML_ADD_TESTCASE( xml_assembler_stress )
	SML_ADD_TESTCASE( xml_assembler_stress_limit )
	SML_ADD_TESTCASE( xml_assembler_stress_large_limit )
	SML_ADD_TESTCASE( xml_assembler_large_obj )
	SML_END_TEST()

	SML_START_TEST( "Session" session check_session.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( session_new )
	SML_ADD_TESTCASE( session_send )
	SML_ADD_TESTCASE( session_flush )
	SML_ADD_TESTCASE( session_flush_final )
	SML_ADD_TESTCASE( session_recv )
	SML_ADD_TESTCASE( session_transmit )
	SML_ADD_TESTCASE( session_reply )
	SML_ADD_TESTCASE( session_talk )
	SML_ADD_TESTCASE( session_talk_alot )
	SML_ADD_TESTCASE( session_talk_alot_limit )
	SML_ADD_TESTCASE( session_limit_remote )
	SML_ADD_TESTCASE( session_split_child )
	SML_ADD_TESTCASE( session_recv_large_obj )
	SML_ADD_TESTCASE( session_recv_large_obj2 )
	SML_ADD_TESTCASE( session_recv_wrong_order )
	SML_ADD_TESTCASE( session_large_obj_10 )
	SML_ADD_TESTCASE( session_large_obj_open )
	SML_ADD_TESTCASE( session_large_obj_no_size )
	SML_ADD_TESTCASE( session_large_obj_several_size )
	SML_ADD_TESTCASE( session_recv_large_wrong_size )
	SML_ADD_TESTCASE( session_recv_large_wrong_size2 )
	SML_ADD_TESTCASE( session_send_large_obj )
	SML_ADD_TESTCASE( session_send_large_obj2 )
	SML_ADD_TESTCASE( session_send_multi_large_obj )
	SML_ADD_TESTCASE( session_send_multi_large_obj_alter )
	IF ( ENABLE_HTTP )
		SML_ADD_TESTCASE( session_san )
	ENDIF ( ENABLE_HTTP )
	SML_END_TEST()

	SML_START_TEST( "MD5" md5 check_md5.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( md5_1 )
	SML_ADD_TESTCASE( md5_2 )
	SML_ADD_TESTCASE( md5_3 )
	SML_ADD_TESTCASE( md5_4 )
	SML_ADD_TESTCASE( md5_5 )
	SML_ADD_TESTCASE( md5_6 )
	SML_ADD_TESTCASE( md5_7 )
	SML_END_TEST()

	SML_START_TEST( "DataStore" datastore check_ds.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( datastore_server_new )
	SML_ADD_TESTCASE( datastore_client_new )
	SML_ADD_TESTCASE( datastore_send_alert )
	SML_ADD_TESTCASE( datastore_send_alert2 )
	SML_ADD_TESTCASE( datastore_send_empty_sync )
	SML_ADD_TESTCASE( datastore_reply_empty_sync )
	SML_ADD_TESTCASE( datastore_add )
	SML_ADD_TESTCASE( datastore_add2 )
	SML_ADD_TESTCASE( datastore_delete )
	SML_ADD_TESTCASE( datastore_map_full )
	SML_ADD_TESTCASE( datastore_add_large )
	SML_ADD_TESTCASE( datastore_limit )
	SML_END_TEST()

	SML_START_TEST( "SAN" san check_san.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( san_new )
	SML_ADD_TESTCASE( san_empty )
	SML_ADD_TESTCASE( san_empty2 )
	SML_ADD_TESTCASE( san_alert )
	SML_ADD_TESTCASE( san_alert2 )
	SML_ADD_TESTCASE( san_alert_auth )
	SML_ADD_TESTCASE( san_parse )
	SML_ADD_TESTCASE( san_parse2 )
	IF ( ENABLE_HTTP )
		SML_ADD_TESTCASE( san_11_assemble_parse )
	ENDIF ( ENABLE_HTTP )
	SML_ADD_TESTCASE( san_parse_error )
	SML_ADD_TESTCASE( san_parse_error2 )
	SML_ADD_TESTCASE( san_parse_error3 )
	SML_ADD_TESTCASE( san_parse_error4 )
	SML_ADD_TESTCASE( san_parse_error5 )
	SML_ADD_TESTCASE( san_parse_error6 )
	SML_ADD_TESTCASE( san_parse_error7 )
	SML_END_TEST()

	SML_START_TEST( "DevInfContentType" dev_inf_content_type check_dev_inf_content_type.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( dev_inf_content_type_create )
	SML_ADD_TESTCASE( dev_inf_content_type_empty_get )
	SML_ADD_TESTCASE( dev_inf_content_type_filled_get )
	SML_ADD_TESTCASE( dev_inf_content_type_references )
	SML_END_TEST()

	SML_START_TEST( "DevInfPropParam" dev_inf_prop_param check_dev_inf_prop_param.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( dev_inf_prop_param_create )
	SML_ADD_TESTCASE( dev_inf_prop_param_empty_set )
	SML_ADD_TESTCASE( dev_inf_prop_param_empty_get )
	SML_ADD_TESTCASE( dev_inf_prop_param_filled_set )
	SML_ADD_TESTCASE( dev_inf_prop_param_filled_get )
	SML_ADD_TESTCASE( dev_inf_prop_param_references )
	SML_END_TEST()

	SML_START_TEST( "DevInfProperty" dev_inf_property check_dev_inf_property.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( dev_inf_property_create )
	SML_ADD_TESTCASE( dev_inf_property_empty_set )
	SML_ADD_TESTCASE( dev_inf_property_empty_get )
	SML_ADD_TESTCASE( dev_inf_property_size_integrity )
	SML_ADD_TESTCASE( dev_inf_property_filled_set )
	SML_ADD_TESTCASE( dev_inf_property_filled_get )
	SML_ADD_TESTCASE( dev_inf_property_references )
	SML_END_TEST()

	SML_START_TEST( "DevInfCTCap" dev_inf_ctcap check_dev_inf_ctcap.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( dev_inf_ctcap_create )
	SML_ADD_TESTCASE( dev_inf_ctcap_empty_set )
	SML_ADD_TESTCASE( dev_inf_ctcap_empty_get )
	SML_ADD_TESTCASE( dev_inf_ctcap_filled_set )
	SML_ADD_TESTCASE( dev_inf_ctcap_filled_get )
	SML_ADD_TESTCASE( dev_inf_ctcap_references )
	SML_END_TEST()

	SML_START_TEST( "DevInfDataStore" dev_inf_data_store check_dev_inf_data_store.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( dev_inf_data_store_create )
	SML_ADD_TESTCASE( dev_inf_data_store_empty_set )
	SML_ADD_TESTCASE( dev_inf_data_store_empty_get )
	SML_ADD_TESTCASE( dev_inf_data_store_filled_set )
	SML_ADD_TESTCASE( dev_inf_data_store_filled_get )
	SML_ADD_TESTCASE( dev_inf_data_store_compliance )
	SML_ADD_TESTCASE( dev_inf_data_store_references )
	SML_END_TEST()

	SML_START_TEST( "DevInf" dev_inf check_dev_inf.c ${TEST_TARGET_LIBRARIES} )
	SML_ADD_TESTCASE( dev_inf_create )
	SML_ADD_TESTCASE( dev_inf_references )
	SML_ADD_TESTCASE( dev_inf_enforce_ver_dtd )
	SML_ADD_TESTCASE( dev_inf_enforce_dev_id )
	SML_ADD_TESTCASE( dev_inf_enforce_dev_typ )
	SML_ADD_TESTCASE( dev_inf_option_man )
	SML_ADD_TESTCASE( dev_inf_option_mod )
	SML_ADD_TESTCASE( dev_inf_option_oem )
	SML_ADD_TESTCASE( dev_inf_option_fwv )
	SML_ADD_TESTCASE( dev_inf_option_swv )
	SML_ADD_TESTCASE( dev_inf_option_hwv )
	SML_ADD_TESTCASE( dev_inf_option_support_utc )
	SML_ADD_TESTCASE( dev_inf_option_support_large_objs )
	SML_ADD_TESTCASE( dev_inf_option_support_number_of_changes )
	SML_ADD_TESTCASE( dev_inf_enforce_data_stores )
	SML_ADD_TESTCASE( dev_inf_enforce_ctcaps )
	SML_ADD_TESTCASE( dev_inf_compliance_error )
	SML_ADD_TESTCASE( dev_inf_compliance_1_0 )
	SML_ADD_TESTCASE( dev_inf_compliance_1_1 )
	SML_ADD_TESTCASE( dev_inf_compliance_1_2 )
	SML_ADD_TESTCASE( dev_inf_overdefined_1_0 )
	SML_ADD_TESTCASE( dev_inf_filtered_1_0 )
	SML_ADD_TESTCASE( dev_inf_server_1_0 )
	SML_ADD_TESTCASE( dev_inf_server_1_1 )
	SML_ADD_TESTCASE( dev_inf_server_1_2 )
	SML_END_TEST()

	SML_START_TEST( "DevInfHelper" devinf check_devinf.c ${TEST_TARGET_LIBRARIES} )
	IF( ENABLE_HTTP )
		SML_ADD_TESTCASE( devinf_crash )
		SML_ADD_TESTCASE( devinf_result )
	ENDIF( ENABLE_HTTP )
	SML_END_TEST()

	SML_START_TEST( "Sync" sync check_sync.c ${TEST_TARGET_LIBRARIES} )
	IF ( ENABLE_HTTP )
		SML_ADD_TESTCASE( sync_multi_start )
		SML_ADD_TESTCASE( sync_multi_stress )
		SML_ADD_TESTCASE( sync_multi_stress2 )
		SML_ADD_TESTCASE( sync_multi_conf_from_devinf )
	ENDIF ( ENABLE_HTTP )
	IF ( ENABLE_OBEX AND ENABLE_OPENOBEX_TCP )
		SML_ADD_TESTCASE( sync_send_san )
		SML_ADD_TESTCASE( sync_send_san12 )
	ENDIF ( ENABLE_OBEX AND ENABLE_OPENOBEX_TCP )
	SML_END_TEST()

	# dependent tests

	IF( ENABLE_OBEX AND ENABLE_OPENOBEX_TCP )
		SML_START_TEST( "OBEX" obex check_obex.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( obex_get_result_macro )
		SML_ADD_TESTCASE( obex_client_new )
		SML_ADD_TESTCASE( obex_client_init )
		SML_ADD_TESTCASE( obex_server_new )
		SML_ADD_TESTCASE( obex_server_init )
		SML_ADD_TESTCASE( obex_connect )
		SML_ADD_TESTCASE( obex_send )
		SML_ADD_TESTCASE( obex_reply )
		SML_ADD_TESTCASE( obex_talk )
		SML_ADD_TESTCASE( obex_multi_connect )
		SML_ADD_TESTCASE( obex_multi_stress )
		SML_ADD_TESTCASE( obex_connect_error )
		SML_ADD_TESTCASE( obex_reject )
		SML_ADD_TESTCASE( obex_multi_partial_error )
		SML_END_TEST()
	ENDIF( ENABLE_OBEX AND ENABLE_OPENOBEX_TCP )

	IF ( ENABLE_HTTP )
		SML_START_TEST( "libsoup" libsoup check_libsoup.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( libsoup_async )
		SML_ADD_TESTCASE( libsoup_http_client )
		SML_ADD_TESTCASE( libsoup_http_server )
		SML_END_TEST()

		SML_START_TEST( "HTTP" http check_http.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( http_client_new )
		SML_ADD_TESTCASE( http_client_init )
		# TODO: Review testcase. Obsolate?
		# SML_ADD_TESTCASE( http_client_wrong_port )
		SML_ADD_TESTCASE( http_client_init_no_url )
		SML_ADD_TESTCASE( http_server_new )
		SML_ADD_TESTCASE( http_server_init )
		SML_ADD_TESTCASE( http_server_wrong_port )
		SML_ADD_TESTCASE( http_connect )
		SML_ADD_TESTCASE( http_send )
		SML_ADD_TESTCASE( http_receive )
		SML_ADD_TESTCASE( http_reply )
		SML_ADD_TESTCASE( http_talk )
		SML_ADD_TESTCASE( http_connect_error )
		SML_ADD_TESTCASE( http_reject )
		SML_ADD_TESTCASE( http_multi_connect )
		SML_ADD_TESTCASE( http_multi_partial_error )
		SML_ADD_TESTCASE( http_multi_stress )
		SML_END_TEST()

		SML_START_TEST( "Manager" manager check_manager.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( manager_new )
		SML_ADD_TESTCASE( manager_run )
		SML_ADD_TESTCASE( manager_receive )
		SML_ADD_TESTCASE( manager_receive_session )
		SML_ADD_TESTCASE( manager_end_session )
		SML_ADD_TESTCASE( manager_register )
		SML_ADD_TESTCASE( manager_start_session )
		SML_END_TEST()
	ENDIF ( ENABLE_HTTP )

	IF ( ENABLE_WBXML )
		SML_START_TEST( "WBXML Parser" wbxmlparser check_wbxml_parser.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( wbxml_parser_syncml_empty )
		SML_ADD_TESTCASE( wbxml_parser_no_syncbody )
		SML_ADD_TESTCASE( wbxml_parser_no_synchdr )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_empty )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_verproto )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_verdtd )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_msgid )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_sessionid )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_additional )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_target )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_source )
		SML_ADD_TESTCASE( wbxml_parser_synchdr_source2 )
		SML_ADD_TESTCASE( wbxml_parser_status_empty )
		SML_ADD_TESTCASE( wbxml_parser_status_cmdid )
		SML_ADD_TESTCASE( wbxml_parser_status_msgref )
		SML_ADD_TESTCASE( wbxml_parser_status_cmdref )
		SML_ADD_TESTCASE( wbxml_parser_status )
		SML_ADD_TESTCASE( wbxml_parser_status2 )
		SML_ADD_TESTCASE( wbxml_parser_final )
		SML_ADD_TESTCASE( wbxml_parser_final2 )
		SML_ADD_TESTCASE( wbxml_parser_cmd )
		SML_ADD_TESTCASE( wbxml_parser_cmd_final )
		SML_END_TEST()

		SML_START_TEST( "WBXML Assembler" wbxmlassembler check_wbxml_assembler.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( wbxml_assembler_message_empty )
		SML_ADD_TESTCASE( wbxml_assembler_message_only_header )
		SML_ADD_TESTCASE( wbxml_assembler_message_status )
		SML_ADD_TESTCASE( wbxml_assembler_message_cmd )
		SML_ADD_TESTCASE( wbxml_assembler_message_subcmd )
		SML_ADD_TESTCASE( wbxml_assembler_message_several_subcmd )
		SML_ADD_TESTCASE( wbxml_assembler_message_flush_open )
		SML_ADD_TESTCASE( wbxml_assembler_out_of_order )
		SML_ADD_TESTCASE( wbxml_assembler_limit1 )
		SML_ADD_TESTCASE( wbxml_assembler_limit2 )
		SML_ADD_TESTCASE( wbxml_assembler_limit3 )
		SML_ADD_TESTCASE( wbxml_assembler_limit4 )
		SML_ADD_TESTCASE( wbxml_assembler_limit5 )
		SML_ADD_TESTCASE( wbxml_assembler_complex1 )
		SML_END_TEST()
	ENDIF( ENABLE_WBXML )

	IF ( ENABLE_OBEX AND ENABLE_OPENOBEX_TCP AND ENABLE_WBXML AND ENABLE_GLIB2_GREGEX )
		# mobile tests
		ADD_MOBILE_TEST( nokia_e65_vcard ${TEST_TARGET_LIBRARIES} )
		ADD_MOBILE_TEST( nokia_e65_vcard_vcal ${TEST_TARGET_LIBRARIES} )
		ADD_MOBILE_TEST( nokia_6230_vcard ${TEST_TARGET_LIBRARIES} )
		ADD_MOBILE_TEST( nokia_6230_vcal ${TEST_TARGET_LIBRARIES} )
		ADD_MOBILE_TEST( nokia_9500_vcard ${TEST_TARGET_LIBRARIES} )
		ADD_MOBILE_TEST( nokia_9500_vcal ${TEST_TARGET_LIBRARIES} )
		ADD_MOBILE_TEST( nokia_9500_vcard_vcal ${TEST_TARGET_LIBRARIES} )
	ENDIF ( ENABLE_OBEX AND ENABLE_OPENOBEX_TCP AND ENABLE_WBXML AND ENABLE_GLIB2_GREGEX )

	IF ( ENABLE_OPENOBEX_TCP OR ENABLE_HTTP )
		SML_START_TEST( "OMA DS API" ds_api check_data_sync_api.c ${TEST_TARGET_LIBRARIES} )
		SML_ADD_TESTCASE( ds_api_single_client_single_text_vcard_21 )
		SML_ADD_TESTCASE( ds_api_single_client_single_image_jpeg )
		SML_ADD_TESTCASE( ds_api_single_client_single_unknown_ct )
		SML_ADD_TESTCASE( ds_api_single_client_multi_text_vcard_21 )
		SML_ADD_TESTCASE( ds_api_multi_client_single_text_vcard_21 )
		SML_ADD_TESTCASE( ds_api_multi_client_multi_text_vcard_21 )
		SML_ADD_TESTCASE( ds_api_max_msg_changes_empty )
		SML_ADD_TESTCASE( ds_api_max_msg_changes_single )
		SML_ADD_TESTCASE( ds_api_max_msg_changes_multi )
		SML_ADD_TESTCASE( ds_api_max_msg_changes_multi_plus_one )
		SML_END_TEST()
	ENDIF ( ENABLE_OPENOBEX_TCP OR ENABLE_HTTP )

ENDIF( ENABLE_UNIT_TEST )

CONFIGURE_FILE( "coverage.sh.cmake" "${CMAKE_BINARY_DIR}/coverage.sh")
