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 <testshl/simpleheader.hxx>
48 
49 namespace osl_test_file
50 {
51 
52 // -----------------------------------------------------------------------------
53 
54 class oldtestfile : public CppUnit::TestFixture
55 {
56 public:
57     void test_file_001();
58     void test_file_002();
59     void test_file_003();
60     void test_file_004();
61 
62     CPPUNIT_TEST_SUITE( oldtestfile );
63     CPPUNIT_TEST( test_file_001 );
64     CPPUNIT_TEST( test_file_002 );
65     CPPUNIT_TEST( test_file_003 );
66     CPPUNIT_TEST( test_file_004 );
67     CPPUNIT_TEST_SUITE_END( );
68 };
69 
70 char *aSource1[] =
71 {
72 	"a"    , "file:///" TEST_VOLUME "bla/a",
73 	"a/"   , "file:///" TEST_VOLUME "bla/a",
74 	"../a" , "file:///" TEST_VOLUME "a" ,
75 	"a/.." , "file:///" TEST_VOLUME "bla",
76 	"a/../b" , "file:///" TEST_VOLUME "bla/b",
77 	".."   , "file:///" TEST_VOLUME "",
78 	"a/b/c/d/"   , "file:///" TEST_VOLUME "bla/a/b/c/d",
79 	"a/./c"   , "file:///" TEST_VOLUME "bla/a/c",
80 	"file:///bla/blub", "file:///" TEST_VOLUME "bla/blub",
81 	0 , 0
82 };
83 
84 char *aSource2[ ] =
85 {
86 	"a" , "file:///" TEST_VOLUME "bla/blubs/schnubbel/a",
87 	"a/", "file:///" TEST_VOLUME "bla/blubs/schnubbel/a",
88 	"../a", "file:///" TEST_VOLUME "bla/blubs/a",
89 	"../../a", "file:///" TEST_VOLUME "bla/a",
90 	"../../../a", "file:///" TEST_VOLUME "a",
91 	"../../../a/b/c/d", "file:///" TEST_VOLUME "a/b/c/d",
92 	0,0
93 };
94 
95 char *aSource3[ ] =
96 {
97 	".." , "/a",
98 	"../a" , "/a/a",
99 	"e/f" , "/c/e/f",
100 	"../..", "",
101 	0,0
102 };
103 
104 using namespace rtl;
105 
test_file_001()106 void oldtestfile::test_file_001()
107 {
108 #ifdef WIN32
109 	return;
110 #endif
111 
112 	OUString base1( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla" ) );
113 	int i;
114 	for( i = 0 ; aSource1[i] ; i +=2 )
115 	{
116 		OUString target;
117 		OUString rel = OUString::createFromAscii( aSource1[i] );
118 		oslFileError e = osl_getAbsoluteFileURL( base1.pData, rel.pData , &target.pData );
119 		CPPUNIT_ASSERT_MESSAGE("failure #1",  osl_File_E_None == e );
120 		if( osl_File_E_None == e )
121 		{
122 			CPPUNIT_ASSERT_MESSAGE("failure #1.1",  target.equalsAscii( aSource1[i+1] ) );
123 		}
124 		OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US );
125 		OString obase = OUStringToOString( base1 , RTL_TEXTENCODING_ASCII_US );
126 		fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource1[i], o.pData->buffer );
127 	}
128 
129 	OUString err1( RTL_CONSTASCII_USTRINGPARAM( "../.." ) );
130 	OUString target;
131 	CPPUNIT_ASSERT_MESSAGE("failure #11",  osl_File_E_None != osl_getAbsoluteFileURL( base1.pData , err1.pData , &target.pData ) );
132 
133 }
134 
test_file_002()135 void oldtestfile::test_file_002()
136 {
137 #ifdef WIN32
138 	return;
139 #endif
140 
141 	OUString base2( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla/blubs/schnubbel" ) );
142 	int i;
143 	for(  i = 0 ; aSource2[i] ; i +=2 )
144 	{
145 		OUString target;
146 		OUString rel = OUString::createFromAscii( aSource2[i] );
147 		oslFileError e = osl_getAbsoluteFileURL( base2.pData, rel.pData , &target.pData );
148 		CPPUNIT_ASSERT_MESSAGE("failure #2",  osl_File_E_None == e );
149 		if( osl_File_E_None == e )
150 		{
151 			CPPUNIT_ASSERT_MESSAGE("failure #2.1",  target.equalsAscii( aSource2[i+1] ) );
152 		}
153 		OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US );
154 		OString obase = OUStringToOString( base2 , RTL_TEXTENCODING_ASCII_US );
155 //		fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource2[i], o.pData->buffer );
156 	}
157 }
158 
test_file_003()159 void oldtestfile::test_file_003()
160 {
161 #ifdef WIN32
162 	return;
163 #endif
164 
165 	// links !
166 #ifdef UNX
167 	int i;
168 	char buf[PATH_MAX];
169 	if( getcwd( buf, PATH_MAX ) )
170 	{
171 		char buf2[PATH_MAX];
172 		strcpy( buf2 , buf );
173 		strcat( buf2, "/a" );
174 
175 		if( 0 == mkdir( buf2 , S_IRWXG | S_IRWXO | S_IRWXU ) )
176 		{
177 			strcat( buf2, "/b" );
178 			if( 0 == mkdir( buf2, S_IRWXU | S_IRWXO | S_IRWXU ) )
179 			{
180 				if( 0 == symlink( buf2 , "c" ) )
181 				{
182 					OUString dir;
183 					osl_getProcessWorkingDir( &(dir.pData) );
184 
185 					OUString base3 = dir;
186 					base3 += OUString( RTL_CONSTASCII_USTRINGPARAM( "/c" ) );
187 					for( i = 0 ; aSource3[i] ; i +=2 )
188 					{
189 						OUString target;
190 						OUString rel = OUString::createFromAscii( aSource3[i] );
191 						oslFileError e = osl_getAbsoluteFileURL( base3.pData, rel.pData , &target.pData );
192 						CPPUNIT_ASSERT_MESSAGE("failure #3",  osl_File_E_None == e );
193 						if( osl_File_E_None == e )
194 						{
195 							CPPUNIT_ASSERT_MESSAGE("failure #4",  target.getLength() >= dir.getLength() );
196 							if( target.getLength() >= dir.getLength() )
197 							{
198                                                             int j;
199                                                             for( j = dir.getLength() ;
200 									 j < target.getLength() &&
201 										 aSource3[i+1][j-dir.getLength()] == target[j]	 ; j++ );
202 								CPPUNIT_ASSERT_MESSAGE("failure #5",  j == target.getLength() );
203 							}
204 						}
205 						OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US );
206 						OString obase = OUStringToOString( base3 , RTL_TEXTENCODING_ASCII_US );
207 						fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource3[i], o.pData->buffer );
208 					}
209 					unlink( "c" );
210 				}
211 				else
212 				{
213 					CPPUNIT_ASSERT_MESSAGE("failure #6",  0 );
214 				}
215 				rmdir( "a/b" );
216 			}
217 			else
218 			{
219 				CPPUNIT_ASSERT_MESSAGE("failure #7",  0 );
220 			}
221 			rmdir( "a" );
222 		}
223 		else
224 		{
225 			CPPUNIT_ASSERT_MESSAGE("failure #8",  0 );
226 		}
227 	}
228 	else
229 	{
230 		CPPUNIT_ASSERT_MESSAGE("failure #9",  0 );
231 	}
232 #endif
233 }
234 
test_file_004()235 void oldtestfile::test_file_004()
236 {
237 #ifdef WIN32
238 	return;
239 #endif
240 
241 	OUString base4( RTL_CONSTASCII_USTRINGPARAM( "file:///" TEST_VOLUME "bla/" ) );
242 	int i;
243 	for( i = 0 ; aSource1[i] ; i +=2 )
244 	{
245 		OUString target;
246 		OUString rel = OUString::createFromAscii( aSource1[i] );
247 		oslFileError e = osl_getAbsoluteFileURL( base4.pData, rel.pData , &target.pData );
248 		CPPUNIT_ASSERT_MESSAGE("failure #10",  osl_File_E_None == e );
249 		if( osl_File_E_None == e )
250 		{
251 			CPPUNIT_ASSERT_MESSAGE("failure #10.1",  target.equalsAscii( aSource1[i+1] ) );
252 		}
253 		OString o = OUStringToOString( target , RTL_TEXTENCODING_ASCII_US );
254 		OString obase = OUStringToOString( base4 , RTL_TEXTENCODING_ASCII_US );
255 		fprintf( stderr, "%d %s + %s = %s\n" ,e, obase.getStr(), aSource1[i], o.pData->buffer );
256 	}
257 
258 
259 //	fprintf( stderr, "test_file done\n" );
260 }
261 
262 } // namespace osl_test_file
263 
264 // -----------------------------------------------------------------------------
265 CPPUNIT_TEST_SUITE_NAMED_REGISTRATION( osl_test_file::oldtestfile, "osl_File" );
266 
267 // -----------------------------------------------------------------------------
268 NOADDITIONAL;
269 
270