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