00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00037 #include <gtest/gtest.h>
00038 #include <cstdlib>
00039
00040 #include <dirent.h>
00041 #include <sys/types.h>
00042 #include <sys/param.h>
00043 #include <sys/stat.h>
00044 #include <unistd.h>
00045 #include <stdio.h>
00046 #include <string.h>
00047
00048 #include <iostream>
00049
00050 int runExternalProcess(const std::string &executable, const std::string &args)
00051 {
00052 return system((executable + " " + args).c_str());
00053 }
00054
00055 int walker( char *result, int& test_result)
00056 {
00057 DIR *d;
00058 struct dirent *dir;
00059 d = opendir( "robots" );
00060 if( d == NULL )
00061 {
00062 return 1;
00063 }
00064 while( ( dir = readdir( d ) ) )
00065 {
00066 if( strcmp( dir->d_name, "." ) == 0 ||
00067 strcmp( dir->d_name, ".." ) == 0 )
00068 {
00069 continue;
00070 }
00071 if( dir->d_type != DT_DIR )
00072 {
00073 std::string dir_name = dir->d_name;
00074 if (dir_name.find(std::string(".urdf.xacro")) == dir_name.size()-11)
00075 {
00076 char pwd[MAXPATHLEN];
00077 getcwd( pwd, MAXPATHLEN );
00078 printf("\n\ntesting: %s\n",(std::string(pwd)+"/robots/"+dir_name).c_str());
00079 runExternalProcess("python `rospack find xacro`/xacro.py", std::string(pwd)+"/robots/"+dir_name+" > `rospack find pr2_description`/test/tmp.urdf" );
00080 test_result = test_result || runExternalProcess("`rospack find urdf`/bin/check_urdf", "`rospack find pr2_description`/test/tmp.urdf");
00081
00082 }
00083 }
00084 }
00085 closedir( d );
00086 return *result == 0;
00087 }
00088
00089 TEST(URDF, CorrectFormat)
00090 {
00091 int test_result = 0;
00092
00093 char buf[MAXPATHLEN] = { 0 };
00094 if( walker( buf, test_result ) == 0 )
00095 {
00096 printf( "Found: %s\n", buf );
00097 }
00098 else
00099 {
00100 puts( "Not found" );
00101 }
00102
00103 EXPECT_TRUE(test_result == 0);
00104 }
00105
00106 int main(int argc, char **argv)
00107 {
00108 testing::InitGoogleTest(&argc, argv);
00109 return RUN_ALL_TESTS();
00110 }