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 printf("executing: %s\n",(executable + " " + args).c_str());
00053 return system((executable + " " + args).c_str());
00054 }
00055
00056 int walker( char *result, int& test_result)
00057 {
00058 DIR *d;
00059 struct dirent *dir;
00060 d = opendir( "robots" );
00061 if( d == NULL )
00062 {
00063 return 1;
00064 }
00065 while( ( dir = readdir( d ) ) )
00066 {
00067 if( strcmp( dir->d_name, "." ) == 0 ||
00068 strcmp( dir->d_name, ".." ) == 0 )
00069 {
00070 continue;
00071 }
00072 if( dir->d_type != DT_DIR )
00073 {
00074 std::string dir_name = dir->d_name;
00075 if (dir_name.find(std::string(".xacro.xml")) == dir_name.size()-10)
00076 {
00077 char pwd[MAXPATHLEN];
00078 getcwd( pwd, MAXPATHLEN );
00079 runExternalProcess("python `rospack find xacro`/xacro.py", std::string(pwd)+"/robots/"+dir_name+" > `rospack find pr2_defs`/test/tmp.expanded.xml" );
00080 test_result = test_result || runExternalProcess("`rospack find wg_robot_description_parser`/parse", "`rospack find pr2_defs`/test/tmp.expanded.xml");
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 }