fix private attribute access in tester

This commit is contained in:
Benjamin Reis 2017-10-09 15:10:51 +02:00
parent c98ce07b43
commit 69d52b3e7e
3 changed files with 16 additions and 9 deletions

View file

@ -176,7 +176,6 @@ set(SOURCE_FILES_C
eventapi_tester.c
flexisip_tester.c
liblinphone_tester.c
liblinphone_tester.h
log_collection_tester.c
message_tester.c
offeranswer_tester.c
@ -205,6 +204,12 @@ set(SOURCE_FILES_CXX
property-container-tester.cpp
)
set(HEADER_FILES
liblinphone_tester.h
tools/private-access.h
tools/tester.h
)
set(SOURCE_FILES_OBJC )
if(APPLE)
if (IOS)
@ -241,7 +246,7 @@ endif()
# on mobile platforms, we compile the tester as a library so that we can link with it directly from native applications
if(ANDROID OR IOS)
add_library(linphonetester SHARED ${SOURCE_FILES_C} ${SOURCE_FILES_CXX})
add_library(linphonetester SHARED ${HEADER_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CXX})
target_include_directories(linphonetester PUBLIC ${BCTOOLBOX_TESTER_INCLUDE_DIRS})
target_link_libraries(linphonetester ${LINPHONE_LIBS_FOR_TOOLS} ${OTHER_LIBS_FOR_TESTER})
if(IOS)
@ -262,7 +267,7 @@ if(ANDROID OR IOS)
PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ
)
elseif(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
add_library(linphone_tester_static STATIC ${SOURCE_FILES_C} ${SOURCE_FILES_CXX})
add_library(linphone_tester_static STATIC ${HEADER_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CXX})
target_include_directories(linphone_tester_static PUBLIC ${BCTOOLBOX_TESTER_INCLUDE_DIRS})
target_link_libraries(linphone_tester_static ${LINPHONE_LIBS_FOR_TOOLS} ${OTHER_LIBS_FOR_TESTER})
@ -296,9 +301,9 @@ endif()
if (NOT ANDROID AND NOT CMAKE_SYSTEM_NAME STREQUAL "WindowsStore")
if(IOS)
set_source_files_properties(${IOS_RESOURCES_FILES} PROPERTIES MACOSX_PACKAGE_LOCATION Resources)
add_executable(liblinphone_tester MACOSX_BUNDLE ${IOS_RESOURCES_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CXX} ${SOURCE_FILES_OBJC})
add_executable(liblinphone_tester MACOSX_BUNDLE ${IOS_RESOURCES_FILES} ${HEADER_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CXX} ${SOURCE_FILES_OBJC})
else()
add_executable(liblinphone_tester ${SOURCE_FILES_C} ${SOURCE_FILES_CXX} ${SOURCE_FILES_OBJC})
add_executable(liblinphone_tester ${HEADER_FILES} ${SOURCE_FILES_C} ${SOURCE_FILES_CXX} ${SOURCE_FILES_OBJC})
endif()
set_target_properties(liblinphone_tester PROPERTIES LINK_FLAGS "${LINPHONE_LDFLAGS}")
set_target_properties(liblinphone_tester PROPERTIES LINKER_LANGUAGE CXX)

View file

@ -30,6 +30,8 @@
#include <type_traits>
#include "linphone/utils/utils.h"
#define L_INTERNAL_STRUCT_L_ATTR_GET(CLASS, ATTR_NAME) AttrGet ## _ ## CLASS ## _ ## ATTR_NAME
#define L_INTERNAL_STRUCT_ATTR_SPY(ATTR_NAME) AttrSpy ## _ ## ATTR_NAME
@ -54,8 +56,8 @@
// Warning: Allow to modify const data.
// Returns a ref to `ATTR_NAME`.
#define L_ATTR_GET(OBJECT, ATTR_NAME) \
(const_cast<std::remove_const<decltype(OBJECT)>::type &>(OBJECT)).*get( \
static_cast<L_INTERNAL_STRUCT_ATTR_SPY(ATTR_NAME)<std::decay<decltype(OBJECT)>::type> *>(nullptr) \
(const_cast<std::remove_pointer<std::decay<decltype(OBJECT)>::type>::type *>(LinphonePrivate::Utils::getPtr(OBJECT)))->*get( \
static_cast<L_INTERNAL_STRUCT_ATTR_SPY(ATTR_NAME)<std::remove_pointer<std::decay<decltype(OBJECT)>::type>::type> *>(nullptr) \
)
#endif // ifndef _PRIVATE_ACCESS_H_

View file

@ -22,7 +22,7 @@
#include <utility>
#include "utils/utils.h"
#include "linphone/utils/utils.h"
// =============================================================================
@ -35,7 +35,7 @@ LINPHONE_BEGIN_NAMESPACE
class Tester {
public:
Tester () = delete;
template<typename Object>
static constexpr decltype(std::declval<Object>().getPrivate()) getPrivate (Object *cppObject) {
return cppObject->getPrivate();