1561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/*
2561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Licensed to the Apache Software Foundation (ASF) under one or more
3561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  contributor license agreements.  See the NOTICE file distributed with
4561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  this work for additional information regarding copyright ownership.
5561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  The ASF licenses this file to You under the Apache License, Version 2.0
6561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  (the "License"); you may not use this file except in compliance with
7561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  the License.  You may obtain a copy of the License at
8561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
9561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *     http://www.apache.org/licenses/LICENSE-2.0
10561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
11561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  Unless required by applicable law or agreed to in writing, software
12561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  distributed under the License is distributed on an "AS IS" BASIS,
13561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  See the License for the specific language governing permissions and
15561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *  limitations under the License.
16561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
17561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
18561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespackage org.apache.harmony.luni.tests.java.io;
19561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
20561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.BufferedReader;
21561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.File;
22561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.IOException;
23561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStream;
24561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport java.io.InputStreamReader;
25561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
26561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughesimport junit.framework.TestCase;
27561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
28561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes/**
29561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * Please note that this case can only be passed on Linux due to some file
30561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes * system dependent reason.
31561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes *
32561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes */
33561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughespublic class UnixFileTest extends TestCase {
34561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private boolean root = false;
35561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
36561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private File testFile;
37561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
38561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private File testDir;
39561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
40561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int TOTAL_SPACE_NUM = 0;
41561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
42561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int FREE_SPACE_NUM = 1;
43561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
44561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static final int USABLE_SPACE_NUM = 2;
45561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
46561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static class ConsoleResulter extends Thread {
47561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		Process proc;
48561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
49561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		InputStream is;
50561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
51561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String resStr;
52561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
53561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		ConsoleResulter(Process p, InputStream in) {
54561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			proc = p;
55561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			is = in;
56561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
57561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
58561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		@Override
59561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		public void run() {
60561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			StringBuffer result = new StringBuffer();
61561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			synchronized (result) {
62561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				try {
63561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					BufferedReader br = new BufferedReader(
64561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes							new InputStreamReader(is));
65561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					String line;
66561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					while ((line = br.readLine()) != null) {
67561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						result.append(line);
68561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					}
69561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					if (result.length() != 0) {
70561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						resStr = result.toString();
71561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					}
72561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
73561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					br.close();
74561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				} catch (IOException ioe) {
75561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					result = null;
76561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
77561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				synchronized (proc) {
78561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					proc.notifyAll();
79561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
80561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
81561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
82561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
83561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
84561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	private static long getLinuxSpace(int index, File file) throws Exception {
85561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long[] result = new long[3];
86561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String par = file.getAbsolutePath();
87561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		String osName = System.getProperty("os.name");
88561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// in case the test case will run under other OS.
89561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (osName.toLowerCase().indexOf("linux") != -1) {
90561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			String[] cmd = new String[2];
91561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			cmd[0] = "df";
92561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			cmd[1] = par; // get the total space of file
93561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Runtime rt = Runtime.getRuntime();
94561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
95561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			Process proc = rt.exec(cmd);
96561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// get output from the command
97561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			ConsoleResulter outputResult = new ConsoleResulter(proc, proc
98561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					.getInputStream());
99561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
100561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			synchronized (proc) {
101561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				outputResult.start();
102561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				proc.wait();
103561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
104561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			// If there is no error, obtain the result
105561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			if (outputResult.resStr != null) {
106561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// exit the subprocess safely
107561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				proc.waitFor();
108561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
109561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				// filter unnecessary information
110561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				String[] txtResult = outputResult.resStr
111561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						.split("\\D|\\p{javaLowerCase}|\\p{javaUpperCase}");
112561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				for (int i = 0, j = 0; i < txtResult.length; i++) {
113561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					if (txtResult[i].length() > 3) {
114561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes						result[j++] = Long.parseLong(txtResult[i]) * 1024L;
115561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes					}
116561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes				}
117561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			}
118561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
119561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
120561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// calculate free spaces according to df command
121561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		result[1] = result[0] - result[1];
122561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		return result[index];
123561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
124561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
125561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
126561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#canExecute()
127561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
128561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
129561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
130561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_canExecute() {
131561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertFalse(testFile.canExecute());
132561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true, false));
133561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canExecute());
134561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true, true));
135561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canExecute());
136561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
137561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(false, false));
138561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertFalse(testFile.canExecute());
139561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(false, true));
140561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertFalse(testFile.canExecute());
141561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
142561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true, false));
143561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canExecute());
144561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
145561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// tests directory
146561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
147561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(false, true));
148561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
149561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canExecute());
150561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
151561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canExecute());
152561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
153561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(true, false));
154561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
155561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
156561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
157561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
158561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#getFreeSpace()
159561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
160561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
161561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
162561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getFreeSpace() throws Exception {
163561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long fileSpace = getLinuxSpace(FREE_SPACE_NUM, testFile);
164561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long dirSpace = getLinuxSpace(FREE_SPACE_NUM, testDir);
165561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// in case we cannot fetch the value from command line
166561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (fileSpace > 0) {
167561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals(fileSpace, testFile.getFreeSpace());
168561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
169561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
170561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (dirSpace > 0) {
171561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals(dirSpace, testDir.getFreeSpace());
172561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
173561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
174561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
175561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
176561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#getTotalSpace()
177561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
178561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
179561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
180561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getTotalSpace() throws Exception {
181561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long fileSpace = getLinuxSpace(TOTAL_SPACE_NUM, testFile);
182561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long dirSpace = getLinuxSpace(TOTAL_SPACE_NUM, testDir);
183561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (fileSpace > 0) {
184561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals(fileSpace, testFile.getTotalSpace());
185561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
186561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (dirSpace > 0) {
187561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals(dirSpace, testDir.getTotalSpace());
188561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
189561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
190561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
191561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
192561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#getUsableSpace()
193561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
194561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
195561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
196561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_getUsableSpace() throws Exception {
197561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long fileSpace = getLinuxSpace(USABLE_SPACE_NUM, testFile);
198561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		long dirSpace = getLinuxSpace(USABLE_SPACE_NUM, testDir);
199561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (fileSpace > 0) {
200561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals(fileSpace, testFile.getUsableSpace());
201561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
202561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (dirSpace > 0) {
203561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertEquals(dirSpace, testDir.getUsableSpace());
204561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
205561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
206561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
207561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
208561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#setExecutable(boolean, boolean)
209561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
210561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
211561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
212561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_setExecutableZZ() {
213561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// setExecutable(true, true/false)
214561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertFalse(testFile.canExecute());
215561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true, false));
216561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canExecute());
217561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true, true));
218561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canExecute());
219561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
220561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// setExecutable(false, true/false)
221561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(false, true));
222561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
223561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testFile.canExecute());
224561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
225561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testFile.canExecute());
226561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
227561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(false, false));
228561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertFalse(testFile.canExecute());
229561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
230561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// tests directory
231561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
232561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(false, true));
233561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
234561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canExecute());
235561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
236561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canExecute());
237561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
238561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(false, false));
239561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
240561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canExecute());
241561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
242561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canExecute());
243561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
244561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
245561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(true, true));
246561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
247561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(true, false));
248561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
249561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
250561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
251561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
252561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#setExecutable(boolean)
253561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
254561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
255561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
256561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_setExecutableZ() {
257561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// So far this method only deals with the situation that the user is the
258561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// owner of the file
259561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true));
260561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canExecute());
261561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(false));
262561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertFalse(testFile.canExecute());
263561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setExecutable(true));
264561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
265561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// tests directory
266561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
267561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(false));
268561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
269561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canExecute());
270561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
271561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canExecute());
272561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
273561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setExecutable(true));
274561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canExecute());
275561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
276561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
277561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
278561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#setReadable(boolean, boolean)
279561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
280561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
281561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
282561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_setReadableZZ() throws Exception {
283561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// setReadable(false, false/true) succeeds on Linux
284561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// However, canRead() always returns true when the user is 'root'.
285561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canRead());
286561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(false, false));
287561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
288561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testFile.canRead());
289561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
290561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testFile.canRead());
291561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
292561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(false, true));
293561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
294561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testFile.canRead());
295561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
296561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testFile.canRead());
297561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
298561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
299561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// tests directory, setReadable(false, true/false)
300561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canRead());
301561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setReadable(false, true));
302561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
303561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canRead());
304561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
305561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canRead());
306561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
307561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setReadable(false, false));
308561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
309561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canRead());
310561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
311561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canRead());
312561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
313561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
314561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// setReadable(true, false/true) and set them in turn
315561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(true, false));
316561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canRead());
317561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(false, true));
318561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
319561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testFile.canRead());
320561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
321561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testFile.canRead());
322561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
323561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(true, true));
324561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canRead());
325561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(false, true));
326561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
327561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testFile.canRead());
328561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
329561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testFile.canRead());
330561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
331561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
332561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// tests directory, setReadable(true, true/false)
333561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setReadable(true, false));
334561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canRead());
335561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setReadable(true, true));
336561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canRead());
337561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
338561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
339561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	/**
340561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @tests java.io.File#setReadable(boolean)
341561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 *
342561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 * @since 1.6
343561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	 */
344561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	public void test_setReadableZ() {
345561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// So far this method only deals with the situation that the user is the
346561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// owner of the file. setReadable(false) succeeds on Linux
347561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		// However, canRead() always returns true when the user is 'root'.
348561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canRead());
349561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(false));
350561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
351561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testFile.canRead());
352561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
353561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testFile.canRead());
354561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
355561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.setReadable(true));
356561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testFile.canRead());
357561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
358561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.canRead());
359561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		assertTrue(testDir.setReadable(false));
360561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (root) {
361561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertTrue(testDir.canRead());
362561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		} else {
363561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			assertFalse(testDir.canRead());
364561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
365561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
366561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
367561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	@Override
368561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void setUp() throws Exception {
369561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.setUp();
370561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		testFile = File.createTempFile("testfile", null);
371561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		testDir = new File(System.getProperty("java.io.tmpdir") + "/temp");
372561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		if (!testDir.exists()) {
373561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes			testDir.mkdir();
374561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		}
375561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		root = System.getProperty("user.name").equals("root");
376561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
377561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
378561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	@Override
379561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	protected void tearDown() throws Exception {
380561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		testFile.delete();
381561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		testDir.delete();
382561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		testFile = null;
383561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		testDir = null;
384561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		root = false;
385561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes		super.tearDown();
386561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes	}
387561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
388561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    public void test_getCanonicalPath() throws IOException,
389561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes                                               InterruptedException {
390561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File tmpFolder1 = new File("folder1");
391561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder1.mkdirs();
392561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder1.deleteOnExit();
393561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
394561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File tmpFolder2 = new File(tmpFolder1.toString() + "/folder2");
395561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder2.mkdirs();
396561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder2.deleteOnExit();
397561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
398561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File tmpFolder3 = new File(tmpFolder2.toString() + "/folder3");
399561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder3.mkdirs();
400561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder3.deleteOnExit();
401561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
402561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File tmpFolder4 = new File(tmpFolder3.toString() + "/folder4");
403561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder4.mkdirs();
404561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        tmpFolder4.deleteOnExit();
405561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
406561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        // make a link to folder1/folder2
407561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        Process ln = Runtime.getRuntime().exec("ln -s folder1/folder2 folder2");
408561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        ln.waitFor();
409561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File linkFile = new File("folder2");
410561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        linkFile.deleteOnExit();
411561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
412561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        File file = new File("folder2");
413561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tmpFolder2.getCanonicalPath(), file.getCanonicalPath());
414561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
415561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        file = new File("folder1/folder2");
416561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tmpFolder2.getCanonicalPath(), file.getCanonicalPath());
417561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
418561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        file = new File("folder2/folder3");
419561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tmpFolder3.getCanonicalPath(), file.getCanonicalPath());
420561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
421561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        file = new File("folder2/folder3/folder4");
422561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tmpFolder4.getCanonicalPath(), file.getCanonicalPath());
423561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
424561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        file = new File("folder1/folder2/folder3");
425561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tmpFolder3.getCanonicalPath(), file.getCanonicalPath());
426561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes
427561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        file = new File("folder1/folder2/folder3/folder4");
428561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes        assertEquals(tmpFolder4.getCanonicalPath(), file.getCanonicalPath());
429561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes    }
430561ee011997c6c2f1befbfaa9d5f0a99771c1d63Elliott Hughes}
431