Skip to content
Permalink
Browse files

ioinit: Update to build/test C++ ioinit

Multiple changes necessary to enable this.  The main goal is to build
and run the C++ ioinit unit tests (which require c++11)

    * Updated mraa required CMake version to 2.8.11 (this is needed for
      the target_xxx_xxx CMake syntax.
    * Added function for adding the c++11 flag give a CMake target.
    * Updated unit tests for range of CMake versions (tested on 2.8.11,
      3.8.2, 3.9.6, and 3.12.0).
    * Added C++ unit test file (more needed here).)

Signed-off-by: Noel Eck <noel.eck@intel.com>
  • Loading branch information...
pylbert committed Jul 26, 2018
1 parent 9056556 commit d24457f9a15f5ad4470d55bc69fbece22ce97bfc
Showing with 81 additions and 9 deletions.
  1. +12 −1 CMakeLists.txt
  2. +22 −8 tests/unit/CMakeLists.txt
  3. +47 −0 tests/unit/api/mraa_initio_hpp_unit.cxx
@@ -1,4 +1,4 @@
cmake_minimum_required (VERSION 2.8)
cmake_minimum_required (VERSION 2.8.11)
project (mraa C CXX)

FIND_PACKAGE (Threads REQUIRED)
@@ -74,6 +74,17 @@ foreach (flag ${MRAA_BOTH_WARNING_FLAGS} ${MRAA_CXX_WARNING_FLAGS})
endif ()
endforeach ()

# This function adds the c++11 flag to a c++ target (if supported)
function(use_cxx_11 targetname)
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11)
if (COMPILER_SUPPORTS_CXX11)
set_target_properties(${targetname} PROPERTIES COMPILE_FLAGS "-std=c++11")

This comment has been minimized.

@arfoll

arfoll Jul 30, 2018

Collaborator

This is a bit nasty, cmake 3.1 provides:
set (CMAKE_CXX_STANDARD 11)
and cmake 3.8 provides:
target_compile_features(target PUBLIC cxx_std_11)

3.8 might be a little too new to use that feature, but i see no real downside in compiling all C++ stuff with C++11? Updating the minimum to cmake 3.1 isn't really too bad, the reason i kept it to 2.8 all these years was to keep compat with old YP 1.6.x builds from 'you know who' :D.

This comment has been minimized.

@pylbert

pylbert Jul 30, 2018

Author Collaborator

Yep, the reasoning here was to stay in line with the old functionality. If that's no longer a requirement, I would prefer to update this.

This comment has been minimized.

@arfoll

arfoll Jul 31, 2018

Collaborator

i'm pretty sure it was a ubuntu 12.04/YP 1.6, worth a check but I'd dump all the old stuff, it was old back then :D

This comment has been minimized.

@Propanu

Propanu Jul 31, 2018

Member

+1, I'd be fine with a cmake 3.1 requirement as pretty much all our current target OS's have a newer version.

else()
message(FATAL_ERROR "Target '${targetname}' requires c++11 which is not supported by this compiler")
endif()
endfunction()

# Set CMAKE_INSTALL_LIBDIR if not defined
include(GNUInstallDirs)

@@ -1,3 +1,8 @@
# Use the IN_LIST operator if available (for gtest)
if(POLICY CMP0057)
cmake_policy(SET CMP0057 NEW)
endif()

# For now, Google Test is NOT required */
find_package(GTest)

@@ -9,37 +14,46 @@ endif()

# Unit tests - C common header methods
add_executable(test_unit_common_h api/api_common_h_unit.cxx)
target_link_libraries(test_unit_common_h GTest::GTest GTest::Main mraa)
target_link_libraries(test_unit_common_h ${GTEST_BOTH_LIBRARIES} mraa)
target_include_directories(test_unit_common_h
PRIVATE "${CMAKE_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/api" "${CMAKE_SOURCE_DIR}/api/mraa")
gtest_add_tests(test_unit_common_h "" AUTO)
gtest_add_tests(test_unit_common_h "" api/api_common_h_unit.cxx)
list(APPEND GTEST_UNIT_TEST_TARGETS test_unit_common_h)

# Unit tests - C++ common header methods
add_executable(test_unit_common_hpp api/api_common_hpp_unit.cxx)
target_link_libraries(test_unit_common_hpp GTest::GTest GTest::Main mraa)
target_link_libraries(test_unit_common_hpp ${GTEST_BOTH_LIBRARIES} mraa)
target_include_directories(test_unit_common_hpp PRIVATE "${CMAKE_SOURCE_DIR}/api")
gtest_add_tests(test_unit_common_hpp "" AUTO)
gtest_add_tests(test_unit_common_hpp "" api/api_common_hpp_unit.cxx)
list(APPEND GTEST_UNIT_TEST_TARGETS test_unit_common_hpp)

if (FTDI4222 AND USBPLAT)
# Unit tests - Test platform extenders (as much as possible)
add_executable(test_unit_ftdi4222 platform_extender/platform_extender.cxx)
target_link_libraries(test_unit_ftdi4222 GTest::GTest GTest::Main mraa-platform-ft4222 dl)
target_link_libraries(test_unit_ftdi4222 ${GTEST_BOTH_LIBRARIES} mraa-platform-ft4222 dl)
target_include_directories(test_unit_ftdi4222 PRIVATE "${PROJECT_SOURCE_DIR}/api"
"${PROJECT_SOURCE_DIR}/api/mraa"
"${PROJECT_SOURCE_DIR}/include")
gtest_add_tests(test_unit_ftdi4222 "" AUTO)
gtest_add_tests(test_unit_ftdi4222 "" platform_extender/platform_extender.cxx)
list(APPEND GTEST_UNIT_TEST_TARGETS test_unit_ftdi4222)
endif ()

# Unit tests - test C initio header methods on MOCK platform only
if (DETECTED_ARCH STREQUAL "MOCK")
add_executable(test_unit_ioinit_h api/mraa_initio_h_unit.cxx)
target_link_libraries(test_unit_ioinit_h GTest::GTest GTest::Main mraa)
target_link_libraries(test_unit_ioinit_h ${GTEST_BOTH_LIBRARIES} mraa)
target_include_directories(test_unit_ioinit_h PRIVATE "${CMAKE_SOURCE_DIR}/api")
gtest_add_tests(test_unit_ioinit_h "" AUTO)
gtest_add_tests(test_unit_ioinit_h "" api/mraa_initio_h_unit.cxx)
list(APPEND GTEST_UNIT_TEST_TARGETS test_unit_ioinit_h)

add_executable(test_unit_ioinit_hpp api/mraa_initio_hpp_unit.cxx)
target_link_libraries(test_unit_ioinit_hpp ${GTEST_BOTH_LIBRARIES} mraa)
target_include_directories(test_unit_ioinit_hpp PRIVATE "${CMAKE_SOURCE_DIR}/api")
gtest_add_tests(test_unit_ioinit_hpp "" api/mraa_initio_hpp_unit.cxx)
list(APPEND GTEST_UNIT_TEST_TARGETS test_unit_ioinit_hpp)

# The initio C++ header requires c++11
use_cxx_11(test_unit_ioinit_hpp)
endif()

# Add a target for all unit tests
@@ -0,0 +1,47 @@
/*
* Author: Mihai Stefanescu <mihai.stefanescu@rinftech.com>
* Copyright (c) 2018 Intel Corporation.
*
* Permission is hereby granted, free of charge, to any person obtaining
* a copy of this software and associated documentation files (the
* "Software"), to deal in the Software without restriction, including
* without limitation the rights to use, copy, modify, merge, publish,
* distribute, sublicense, and/or sell copies of the Software, and to
* permit persons to whom the Software is furnished to do so, subject to
* the following conditions:
*
* The above copyright notice and this permission notice shall be
* included in all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/

#include "mraa/initio.hpp"
#include "gtest/gtest.h"
#include <iostream>
#include <exception>


/* MRAA IO INIT hpp test fixture */
class mraa_initio_hpp_unit : public ::testing::Test
{
};

/* Test for an invalid AIO init. */
TEST_F(mraa_initio_hpp_unit, test_aio_init_invalid)
{
ASSERT_THROW(mraa::MraaIo io("a:bogus:10"), std::runtime_error);
}

/* Test for a valid AIO init. */
TEST_F(mraa_initio_hpp_unit, test_aio_init_valid)
{
mraa::MraaIo io("a:0:10");
ASSERT_EQ(1, io.aios.size());
}

0 comments on commit d24457f

Please sign in to comment.
You can’t perform that action at this time.