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 #include <gtest/gtest.h>
00031 #include <rviz/config.h>
00032
00033 #include <ros/package.h>
00034
00035 TEST( Config, comparison )
00036 {
00037 std::string lhs = "b/c/d";
00038 std::string rhs = "b/c_d";
00039 rviz::Config::DirectoryCompare dc;
00040 EXPECT_FALSE( dc( lhs, rhs ));
00041 }
00042
00043 TEST( Config, set_then_get )
00044 {
00045 rviz::Config c;
00046 c.set( "a", "1" );
00047 int a;
00048 EXPECT_TRUE( c.get( "a", &a, 2 ));
00049 EXPECT_EQ( a, 1 );
00050 float aa;
00051 EXPECT_TRUE( c.get( "a", &aa, 2.0 ));
00052 EXPECT_EQ( aa, 1.0 );
00053 std::string aaa;
00054 EXPECT_TRUE( c.get( "a", &aaa, "two" ));
00055 EXPECT_EQ( aaa, "1" );
00056 }
00057
00058 TEST( Config, default_values )
00059 {
00060 rviz::Config c;
00061 int a;
00062 EXPECT_FALSE( c.get( "a", &a, 2 ));
00063 EXPECT_EQ( a, 2 );
00064 EXPECT_FALSE( c.get( "a", &a ));
00065 EXPECT_EQ( a, 0 );
00066 float aa;
00067 EXPECT_FALSE( c.get( "a", &aa, 2.0 ));
00068 EXPECT_EQ( aa, 2.0 );
00069 EXPECT_FALSE( c.get( "a", &aa ));
00070 EXPECT_EQ( aa, 0.0 );
00071 std::string aaa;
00072 EXPECT_FALSE( c.get( "a", &aaa, "two" ));
00073 EXPECT_EQ( aaa, "two" );
00074 EXPECT_FALSE( c.get( "a", &aaa ));
00075 EXPECT_EQ( aaa, "" );
00076 }
00077
00078 TEST( Config, write_empty_string_value )
00079 {
00080 rviz::Config c;
00081 c.set( "key", "" );
00082
00083 std::stringstream ss;
00084 c.write( ss );
00085
00086 EXPECT_EQ( "key=\n", ss.str() );
00087 }
00088
00089 TEST( Config, read_empty_string_value )
00090 {
00091 std::istringstream ss( "key=\n" );
00092
00093 rviz::Config c;
00094 c.read( ss );
00095
00096 std::string s;
00097 EXPECT_TRUE( c.get( "key", &s, "default" ));
00098 EXPECT_EQ( "", s );
00099 }
00100
00101 TEST( Config, set_get_empty_value )
00102 {
00103 rviz::Config c;
00104 c.set( "key", "" );
00105
00106 std::string s;
00107 EXPECT_TRUE( c.get( "key", &s, "default" ));
00108 EXPECT_EQ( "", s );
00109 }
00110
00111 TEST( Config, write )
00112 {
00113 rviz::Config c;
00114 c.set( "/b/c_d", 1 );
00115 c.set( "b/alpha", 2 );
00116 c.set( "z", 6 );
00117 c.set( "/a/z", 3 );
00118 c.set( "d", 7 );
00119 c.set( "/b/c/d", 4);
00120 c.set( "/a", 5 );
00121 c.set( "/art/for/arts/sake", 8 );
00122 std::stringstream ss;
00123 c.write( ss );
00124 EXPECT_EQ(
00125 "a=5\n\
00126 d=7\n\
00127 z=6\n\
00128 [a]\n\
00129 z=3\n\
00130 [art]\n\
00131 [art/for]\n\
00132 [art/for/arts]\n\
00133 sake=8\n\
00134 [b]\n\
00135 alpha=2\n\
00136 c_d=1\n\
00137 [b/c]\n\
00138 d=4\n\
00139 ", ss.str() );
00140 }
00141
00142 TEST( Config, read )
00143 {
00144 std::string input =
00145 "a=1\n\
00146 foo_bar=biff=1; bazz=17\n\
00147 [chub]\n\
00148 sand=wich\n\
00149 [chub/town]\n\
00150 belly=big\n\
00151 tummy=large\n\
00152 ";
00153 std::istringstream iss;
00154 iss.str( input );
00155 rviz::Config c;
00156 c.read( iss );
00157
00158 std::string s;
00159 EXPECT_TRUE( c.get( "/chub/town/belly", &s ));
00160 EXPECT_EQ( "big", s );
00161
00162 EXPECT_TRUE( c.get( "/chub/sand", &s ));
00163 EXPECT_EQ( "wich", s );
00164
00165 EXPECT_TRUE( c.get( "/foo_bar", &s ));
00166 EXPECT_EQ( "biff=1; bazz=17", s );
00167
00168 int i;
00169 EXPECT_TRUE( c.get( "/a", &i ));
00170 EXPECT_EQ( 1, i );
00171 }
00172
00173 TEST( Config, escape_space )
00174 {
00175 rviz::Config c;
00176 c.set( "a b", "c d" );
00177 std::string s;
00178 EXPECT_TRUE( c.get( "a b", &s ));
00179 EXPECT_EQ( "c d", s );
00180
00181 std::stringstream ss;
00182 c.write( ss );
00183 EXPECT_EQ( "a\\ b=c d\n", ss.str() );
00184 }
00185
00186 TEST( Config, escape_colon )
00187 {
00188 rviz::Config c;
00189 c.set( "a:b", "c:d" );
00190 std::string s;
00191 EXPECT_TRUE( c.get( "a:b", &s ));
00192 EXPECT_EQ( "c:d", s );
00193
00194 std::stringstream ss;
00195 c.write( ss );
00196 EXPECT_EQ( "a\\:b=c:d\n", ss.str() );
00197 }
00198
00199 TEST( Config, first_slash_is_optional )
00200 {
00201 rviz::Config c;
00202 c.set( "a", 1 );
00203 int i;
00204 EXPECT_TRUE( c.get( "/a", &i ));
00205 EXPECT_EQ( 1, i );
00206
00207 c.set( "/b", 2 );
00208 EXPECT_TRUE( c.get( "b", &i ));
00209 EXPECT_EQ( 2, i );
00210 }
00211
00212 TEST( Config, end_to_end )
00213 {
00214 rviz::Config c;
00215 c.set( "/a: b/foo/bar", 1.25f );
00216 c.set( "/a: b/foo/biff", 17 );
00217 c.set( "a", "a/b=c d" );
00218
00219 std::stringstream ss;
00220 c.write( ss );
00221
00222 c.clear();
00223
00224 c.read( ss );
00225 float f;
00226 EXPECT_TRUE( c.get( "/a: b/foo/bar", &f ));
00227 EXPECT_EQ( 1.25, f );
00228 int i;
00229 EXPECT_TRUE( c.get( "/a: b/foo/biff", &i ));
00230 EXPECT_EQ( 17, i );
00231 std::string s;
00232 EXPECT_TRUE( c.get( "a", &s ));
00233 EXPECT_EQ( "a/b=c d", s );
00234 }
00235
00236 TEST( Config, file_io )
00237 {
00238 std::string package_path = ros::package::getPath(ROS_PACKAGE_NAME);
00239
00240 rviz::Config c;
00241 EXPECT_TRUE( c.readFromFile( package_path + "/src/test/test_in.vcg" ));
00242 EXPECT_TRUE( c.writeToFile( package_path + "/build/test_out.vcg" ));
00243
00244
00245
00246
00247 }
00248
00249 int main(int argc, char **argv){
00250 testing::InitGoogleTest(&argc, argv);
00251 return RUN_ALL_TESTS();
00252 }
00253