LCOV - code coverage report
Current view: top level - test - test_ee_interface.cpp (source / functions) Hit Total Coverage
Test: main_coverage.info Lines: 69 71 97.2 %
Date: 2022-06-06 13:34:00 Functions: 16 16 100.0 %

          Line data    Source code
       1             : #include <gtest/gtest.h>
       2             : #include "testUtils.h"
       3             : 
       4             : #include <rclcpp/rclcpp.hpp>
       5             : 
       6             : #include <sensor_msgs/msg/joint_state.hpp>
       7             : 
       8             : #include <end_effector/Parser.h>
       9             : #include <end_effector/EEInterface.h>
      10             : #include <end_effector/Utils.h>
      11             : 
      12             : namespace {
      13             : 
      14             : class testEEInterface: public ::testing::Test {
      15             : 
      16             : 
      17             : protected:
      18             : 
      19          20 :     testEEInterface() {
      20          20 :     }
      21             : 
      22          20 :     virtual ~testEEInterface() {
      23          20 :     }
      24             :     
      25          20 :     virtual void SetUp() override {
      26             :         
      27          20 :     }
      28             : 
      29          20 :     virtual void SetUp(int argc, char **argv) {
      30             :     
      31          20 :         node = ROSEE::TestUtils::prepareROSForTests ( argc, argv, "testEEInterface");
      32             :         
      33          20 :         ASSERT_NE(node, nullptr);
      34             : 
      35          20 :         ROSEE::Parser p ( node );
      36          60 :         p.init ( ament_index_cpp::get_package_share_directory("end_effector") + "/configs/urdf/test_ee.urdf",
      37          40 :                  ament_index_cpp::get_package_share_directory("end_effector") + "/configs/srdf/test_ee.srdf",
      38             :                  "ROSEE/actions/test_ee"
      39             :         );
      40          20 :         p.printEndEffectorFingerJointsMap();
      41             : 
      42          20 :         ee = std::make_shared<ROSEE::EEInterface>(p);
      43             :     }
      44             : 
      45          20 :     virtual void TearDown() {
      46          20 :     }
      47             : 
      48             :     ROSEE::EEInterface::Ptr ee;
      49             :     rclcpp::Node::SharedPtr node;
      50             : };
      51             : 
      52             : 
      53           8 : TEST_F ( testEEInterface, checkFingers ) {
      54             : 
      55           4 :     SetUp(argc_g, argv_g);
      56             :     
      57           8 :     std::vector<std::string> fingers;
      58           4 :     fingers = ee->getFingers();
      59             : 
      60           4 :     EXPECT_FALSE (fingers.empty());
      61             : 
      62           4 :     RCLCPP_INFO_STREAM (node->get_logger(), "Fingers in EEInterface: " );
      63          16 :     for ( auto& f : fingers ) {
      64          12 :         RCLCPP_INFO_STREAM (node->get_logger(), f );
      65             :     }
      66             : 
      67           4 :     EXPECT_TRUE ( ee->isFinger ( "finger_1" ) );
      68             : 
      69           4 :     EXPECT_FALSE ( ee->isFinger ( "finger_4" ) );
      70             : 
      71             : 
      72             : 
      73           4 : }
      74             : 
      75           8 : TEST_F ( testEEInterface, checkActuatedJointsNum ) {
      76             : 
      77           4 :     SetUp(argc_g, argv_g);
      78             :     
      79           4 :     int joint_num = ee->getActuatedJointsNum();
      80           4 :     EXPECT_EQ ( 6, joint_num );
      81             : 
      82           4 :     EXPECT_FALSE ( joint_num < 0 );
      83             : 
      84           4 : }
      85             : 
      86           8 : TEST_F ( testEEInterface, checkEEFingerJoints ) {
      87             : 
      88           4 :     SetUp(argc_g, argv_g);
      89             :     
      90           4 :     int joint_num_finger1 = ee->getActuatedJointsNumInFinger("finger_1");
      91             : 
      92           4 :     int joint_num = ee->getActuatedJointsNum();
      93             : 
      94           4 :     EXPECT_TRUE ( joint_num >= joint_num_finger1 );
      95             : 
      96           4 :     int joint_num_counter = 0;
      97           8 :     std::vector<std::string> fingers = ee->getFingers();
      98             : 
      99             : 
     100             : 
     101          16 :     for ( auto& f : fingers ) {
     102          12 :         joint_num_counter += ee->getActuatedJointsNumInFinger(f);
     103             :     }
     104             : 
     105           4 :     EXPECT_TRUE ( joint_num == joint_num_counter );
     106             : 
     107           4 : }
     108             : 
     109           8 : TEST_F ( testEEInterface, checkJointLimits) {
     110             : 
     111           4 :     SetUp(argc_g, argv_g);
     112             :     
     113           4 :     Eigen::VectorXd upperLimits = ee->getUpperPositionLimits();
     114           4 :     Eigen::VectorXd lowerLimits = ee->getLowerPositionLimits();
     115             :     
     116           4 :     ASSERT_EQ (upperLimits.size(), lowerLimits.size()); //stop if it fails here
     117             :     
     118           4 :     EXPECT_TRUE (upperLimits.size() > 0);
     119             :     
     120          28 :     for (int i=0; i<upperLimits.size(); i++) {
     121             :     
     122          24 :         EXPECT_GE (upperLimits(i), lowerLimits(i)); //greater or equal than
     123          24 :         RCLCPP_INFO_STREAM (node->get_logger(), "Joint " << std::to_string(i) << " limits:  " <<
     124             :                           upperLimits(i) <<  ", " << lowerLimits(i) );
     125             : 
     126             :     }
     127             :     
     128             : }
     129             : 
     130           8 : TEST_F ( testEEInterface, checkIdJoints ) {
     131             : 
     132           4 :     SetUp(argc_g, argv_g);
     133             :     
     134           8 :     std::vector<std::string> actJoints = ee->getActuatedJoints();
     135             :    // ASSERT_FALSE (actJoints.empty());  //a hand can have no actuated joints?
     136             :     
     137             :     // check if ids are unique
     138           4 :     int id = -1;
     139           4 :     int idPrevious = -1;
     140          28 :     for ( auto& j : actJoints ) {
     141          24 :         EXPECT_TRUE ( ee->getInternalIdForJoint (j, id) ); //return false if joint does not exist
     142          24 :         EXPECT_NE ( id, idPrevious );
     143          24 :         idPrevious = id;
     144             :     }
     145             :     
     146           4 : }
     147             : 
     148             : } //namespace
     149             : 
     150           4 : int main ( int argc, char **argv ) {
     151             :     
     152           4 :     if (argc < 2 ){
     153             :         
     154           0 :         std::cout << "[TEST ERROR] Insert hand name as argument" << std::endl;
     155           0 :         return -1;
     156             :     }
     157             :     
     158           4 :     rclcpp::init ( argc, argv );
     159             :     
     160           4 :     ::testing::InitGoogleTest ( &argc, argv );
     161           4 :     ::testing::AddGlobalTestEnvironment(new MyTestEnvironment(argc, argv));
     162             : 
     163           4 :     return RUN_ALL_TESTS();
     164             : }

Generated by: LCOV version 1.14