1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 24 // MARKER(update_precomp.py): autogen include statement, do not remove 25 #include "precompiled_sal.hxx" 26 27 // LLA: 28 // this file is converted to use with testshl2 29 // original was placed in sal/test/textenc.cxx 30 31 #include <stdio.h> 32 33 #include <osl/file.h> 34 #include <osl/process.h> 35 #include <rtl/ustring.hxx> 36 #ifdef SAL_UNX 37 #include <unistd.h> 38 #include <limits.h> 39 #include <string.h> 40 #include <sys/stat.h> 41 #define TEST_VOLUME "" 42 #else 43 // WINDOWS 44 #define TEST_VOLUME "c:/" 45 #endif 46 47 #include "gtest/gtest.h" 48 49 namespace osl_test_file 50 { 51 52 // ----------------------------------------------------------------------------- 53 54 class oldtestfile : public ::testing::Test 55 { 56 public: 57 }; 58 59 char *aSource1[] = 60 { 61 "a" , "file:///" TEST_VOLUME "bla/a", 62 "a/" , "file:///" TEST_VOLUME "bla/a", 63 "../a" , "file:///" TEST_VOLUME "a" , 64 "a/.." , "file:///" TEST_VOLUME "bla", 65 "a/../b" , "file:///" TEST_VOLUME "bla/b", 66 ".." , "file:///" TEST_VOLUME "", 67 "a/b/c/d/" , "file:///" TEST_VOLUME "bla/a/b/c/d", 68 "a/./c" , "file:///" TEST_VOLUME "bla/a/c", 69 "file:///bla/blub", "file:///" TEST_VOLUME "bla/blub", 70 0 , 0 71 }; 72 73 char *aSource2[ ] = 74 { 75 "a" , "file:///" TEST_VOLUME "bla/blubs/schnubbel/a", 76 "a/", "file:///" TEST_VOLUME "bla/blubs/schnubbel/a", 77 "../a", "file:///" TEST_VOLUME "bla/blubs/a", 78 "../../a", "file:///" TEST_VOLUME "bla/a", 79 "../../../a", "file:///" TEST_VOLUME "a", 80 "../../../a/b/c/d", "file:///" TEST_VOLUME "a/b/c/d", 81 0,0 82 }; 83 84 char *aSource3[ ] = 85 { 86 ".." , "/a", 87 "../a" , "/a/a", 88 "e/f" , "/c/e/f", 89 "../..", "", 90 0,0 91 }; 92 93 using namespace rtl; 94 95 TEST_F(oldtestfile, test_file_001) 96 { 97 #ifdef WIN32 98 return; 99 #endif 100 101 OUString base1( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla" ) ); 102 int i; 103 for( i = 0 ; aSource1[i] ; i +=2 ) 104 { 105 OUString target; 106 OUString rel = OUString::createFromAscii( aSource1[i] ); 107 oslFileError e = osl_getAbsoluteFileURL( base1.pData, rel.pData , &target.pData ); 108 ASSERT_TRUE( osl_File_E_None == e ) << "failure #1"; 109 if( osl_File_E_None == e ) 110 { 111 ASSERT_TRUE( target.equalsAscii( aSource1[i+1] ) ) << "failure #1.1"; 112 } 113 OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); 114 OString obase = OUStringToOString( base1 , RTL_TEXTENCODING_ASCII_US ); 115 fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource1[i], o.pData->buffer ); 116 } 117 118 OUString err1( RTL_CONSTASCII_USTRINGPARAM( "../.." ) ); 119 OUString target; 120 ASSERT_TRUE( osl_File_E_None != osl_getAbsoluteFileURL( base1.pData , err1.pData , &target.pData ) ) << "failure #11"; 121 122 } 123 124 TEST_F(oldtestfile, test_file_002) 125 { 126 #ifdef WIN32 127 return; 128 #endif 129 130 OUString base2( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla/blubs/schnubbel" ) ); 131 int i; 132 for( i = 0 ; aSource2[i] ; i +=2 ) 133 { 134 OUString target; 135 OUString rel = OUString::createFromAscii( aSource2[i] ); 136 oslFileError e = osl_getAbsoluteFileURL( base2.pData, rel.pData , &target.pData ); 137 ASSERT_TRUE(osl_File_E_None == e) << "failure #2"; 138 if( osl_File_E_None == e ) 139 { 140 ASSERT_TRUE(target.equalsAscii( aSource2[i+1] )) << "failure #2.1"; 141 } 142 OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); 143 OString obase = OUStringToOString( base2 , RTL_TEXTENCODING_ASCII_US ); 144 // fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource2[i], o.pData->buffer ); 145 } 146 } 147 148 TEST_F(oldtestfile, test_file_003) 149 { 150 #ifdef WIN32 151 return; 152 #endif 153 154 // links ! 155 #ifdef UNX 156 int i; 157 char buf[PATH_MAX]; 158 if( getcwd( buf, PATH_MAX ) ) 159 { 160 char buf2[PATH_MAX]; 161 strcpy( buf2 , buf ); 162 strcat( buf2, "/a" ); 163 164 if( 0 == mkdir( buf2 , S_IRWXG | S_IRWXO | S_IRWXU ) ) 165 { 166 strcat( buf2, "/b" ); 167 if( 0 == mkdir( buf2, S_IRWXU | S_IRWXO | S_IRWXU ) ) 168 { 169 if( 0 == symlink( buf2 , "c" ) ) 170 { 171 OUString dir; 172 osl_getProcessWorkingDir( &(dir.pData) ); 173 174 OUString base3 = dir; 175 base3 += OUString( RTL_CONSTASCII_USTRINGPARAM( "/c" ) ); 176 for( i = 0 ; aSource3[i] ; i +=2 ) 177 { 178 OUString target; 179 OUString rel = OUString::createFromAscii( aSource3[i] ); 180 oslFileError e = osl_getAbsoluteFileURL( base3.pData, rel.pData , &target.pData ); 181 ASSERT_TRUE(osl_File_E_None == e) << "failure #3"; 182 if( osl_File_E_None == e ) 183 { 184 ASSERT_TRUE(target.getLength() >= dir.getLength()) << "failure #4"; 185 if( target.getLength() >= dir.getLength() ) 186 { 187 int j; 188 for( j = dir.getLength() ; 189 j < target.getLength() && 190 aSource3[i+1][j-dir.getLength()] == target[j] ; j++ ); 191 ASSERT_TRUE(j == target.getLength()) << "failure #5"; 192 } 193 } 194 OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); 195 OString obase = OUStringToOString( base3 , RTL_TEXTENCODING_ASCII_US ); 196 fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource3[i], o.pData->buffer ); 197 } 198 unlink( "c" ); 199 } 200 else 201 { 202 ASSERT_TRUE(0) << "failure #6"; 203 } 204 rmdir( "a/b" ); 205 } 206 else 207 { 208 ASSERT_TRUE(0) << "failure #7"; 209 } 210 rmdir( "a" ); 211 } 212 else 213 { 214 ASSERT_TRUE(0) << "failure #8"; 215 } 216 } 217 else 218 { 219 ASSERT_TRUE(0) << "failure #9"; 220 } 221 #endif 222 } 223 224 TEST_F(oldtestfile, test_file_004) 225 { 226 #ifdef WIN32 227 return; 228 #endif 229 230 OUString base4( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla/" ) ); 231 int i; 232 for( i = 0 ; aSource1[i] ; i +=2 ) 233 { 234 OUString target; 235 OUString rel = OUString::createFromAscii( aSource1[i] ); 236 oslFileError e = osl_getAbsoluteFileURL( base4.pData, rel.pData , &target.pData ); 237 ASSERT_TRUE(osl_File_E_None == e) << "failure #10"; 238 if( osl_File_E_None == e ) 239 { 240 ASSERT_TRUE(target.equalsAscii( aSource1[i+1] )) << "failure #10.1"; 241 } 242 OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US ); 243 OString obase = OUStringToOString( base4 , RTL_TEXTENCODING_ASCII_US ); 244 fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource1[i], o.pData->buffer ); 245 } 246 247 248 // fprintf( stderr, "test_file done\n" ); 249 } 250 251 } // namespace osl_test_file 252 253 // ----------------------------------------------------------------------------- 254 255 int main(int argc, char **argv) 256 { 257 ::testing::InitGoogleTest(&argc, argv); 258 return RUN_ALL_TESTS(); 259 } 260