From ftpserver-commits-return-209-apmail-incubator-ftpserver-commits-archive=incubator.apache.org@incubator.apache.org Sun Aug 12 12:12:01 2007 Return-Path: Delivered-To: apmail-incubator-ftpserver-commits-archive@www.apache.org Received: (qmail 20537 invoked from network); 12 Aug 2007 12:12:00 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 12 Aug 2007 12:12:00 -0000 Received: (qmail 61102 invoked by uid 500); 12 Aug 2007 12:11:58 -0000 Delivered-To: apmail-incubator-ftpserver-commits-archive@incubator.apache.org Received: (qmail 61086 invoked by uid 500); 12 Aug 2007 12:11:58 -0000 Mailing-List: contact ftpserver-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: ftpserver-dev@incubator.apache.org Delivered-To: mailing list ftpserver-commits@incubator.apache.org Received: (qmail 61073 invoked by uid 99); 12 Aug 2007 12:11:58 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 12 Aug 2007 05:11:58 -0700 X-ASF-Spam-Status: No, hits=-100.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.3] (HELO eris.apache.org) (140.211.11.3) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 12 Aug 2007 12:12:04 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id A5E8E1A981A; Sun, 12 Aug 2007 05:11:33 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r565040 - in /incubator/ftpserver/trunk: core/src/java/org/apache/ftpserver/filesystem/ core/src/java/org/apache/ftpserver/listing/ core/src/test/org/apache/ftpserver/filesystem/ ftplet-api/src/java/org/apache/ftpserver/ftplet/ Date: Sun, 12 Aug 2007 12:11:33 -0000 To: ftpserver-commits@incubator.apache.org From: ngn@apache.org X-Mailer: svnmailer-1.1.0 Message-Id: <20070812121133.A5E8E1A981A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: ngn Date: Sun Aug 12 05:11:32 2007 New Revision: 565040 URL: http://svn.apache.org/viewvc?view=rev&rev=565040 Log: Make sure files are returned in alphabetical order (FTPSERVER-103) Refactor tests further to make the reusable for other file system implementations Added: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java (with props) Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java?view=diff&rev=565040&r1=565039&r2=565040 ============================================================================== --- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java (original) +++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/filesystem/NativeFileObject.java Sun Aug 12 05:11:32 2007 @@ -15,7 +15,7 @@ * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. - */ + */ package org.apache.ftpserver.filesystem; @@ -26,6 +26,8 @@ import java.io.InputStream; import java.io.OutputStream; import java.io.RandomAccessFile; +import java.util.Arrays; +import java.util.Comparator; import java.util.StringTokenizer; import org.apache.ftpserver.ftplet.FileObject; @@ -33,204 +35,201 @@ import org.apache.ftpserver.usermanager.WriteRequest; /** - * This class wraps native file object. + * This class wraps native file object. */ -public -class NativeFileObject implements FileObject { +public class NativeFileObject implements FileObject { // the file name with respect to the user root. // The path separator character will be '/' and // it will always begin with '/'. private String fileName; - + private File file; - + private User user; - - + /** * Constructor. */ protected NativeFileObject(String fileName, File file, User user) { - if(fileName == null) { + if (fileName == null) { throw new IllegalArgumentException("fileName can not be null"); - } - if(file == null) { + } + if (file == null) { throw new IllegalArgumentException("file can not be null"); - } + } fileName = fileName.trim(); - if(fileName.length() == 0) { + if (fileName.length() == 0) { throw new IllegalArgumentException("fileName can not be empty"); - } else if(fileName.charAt(0) != '/') { - throw new IllegalArgumentException("fileName must be an absolut path"); + } else if (fileName.charAt(0) != '/') { + throw new IllegalArgumentException( + "fileName must be an absolut path"); } - - - + this.fileName = fileName; this.file = file; this.user = user; } - + /** * Get full name. */ public String getFullName() { - + // strip the last '/' if necessary String fullName = fileName; int filelen = fullName.length(); - if( (filelen != 1)&& (fullName.charAt(filelen - 1) == '/') ) { + if ((filelen != 1) && (fullName.charAt(filelen - 1) == '/')) { fullName = fullName.substring(0, filelen - 1); } - + return fullName; } - + /** * Get short name. */ public String getShortName() { - + // root - the short name will be '/' - if(fileName.equals("/")) { + if (fileName.equals("/")) { return "/"; } - + // strip the last '/' String shortName = fileName; int filelen = fileName.length(); - if(shortName.charAt(filelen - 1) == '/') { + if (shortName.charAt(filelen - 1) == '/') { shortName = shortName.substring(0, filelen - 1); } - + // return from the last '/' int slashIndex = shortName.lastIndexOf('/'); - if(slashIndex != -1) { + if (slashIndex != -1) { shortName = shortName.substring(slashIndex + 1); } return shortName; } - + /** * Is a hidden file? */ public boolean isHidden() { return file.isHidden(); } - + /** * Is it a directory? */ public boolean isDirectory() { return file.isDirectory(); } - + /** * Is it a file? */ public boolean isFile() { return file.isFile(); } - + /** * Does this file exists? */ public boolean doesExist() { return file.exists(); } - + /** * Get file size. */ public long getSize() { return file.length(); } - + /** * Get file owner. */ public String getOwnerName() { return "user"; } - + /** * Get group name */ public String getGroupName() { return "group"; } - + /** * Get link count */ public int getLinkCount() { return file.isDirectory() ? 3 : 1; } - + /** * Get last modified time. - */ + */ public long getLastModified() { return file.lastModified(); } - + /** * Check read permission. */ public boolean hasReadPermission() { return file.canRead(); } - + /** * Check file write permission. */ public boolean hasWritePermission() { - if(user.authorize(new WriteRequest(getFullName())) == null) { + if (user.authorize(new WriteRequest(getFullName())) == null) { return false; } - - if(file.exists()) { + + if (file.exists()) { return file.canWrite(); } return true; } - + /** * Has delete permission. */ public boolean hasDeletePermission() { - + // root cannot be deleted - if( "/".equals(fileName) ) { + if ("/".equals(fileName)) { return false; } - + return hasWritePermission(); } - + /** * Delete file. */ public boolean delete() { boolean retVal = false; - if( hasDeletePermission() ) { + if (hasDeletePermission()) { retVal = file.delete(); } return retVal; } - + /** * Move file object. */ public boolean move(FileObject dest) { boolean retVal = false; - if(dest.hasWritePermission() && hasReadPermission()) { - File destFile = ((NativeFileObject)dest).file; - - if(destFile.exists()) { + if (dest.hasWritePermission() && hasReadPermission()) { + File destFile = ((NativeFileObject) dest).file; + + if (destFile.exists()) { // renameTo behaves differently on different platforms - // this check verifies that if the destination already exists, + // this check verifies that if the destination already exists, // we fail retVal = false; } else { @@ -239,214 +238,221 @@ } return retVal; } - + /** * Create directory. */ public boolean mkdir() { boolean retVal = false; - if(hasWritePermission()) { + if (hasWritePermission()) { retVal = file.mkdirs(); } return retVal; } - + /** * Get the physical file object. */ public File getPhysicalFile() { return file; } - + /** - * List files. If not a directory or does not exist, null - * will be returned. + * List files. If not a directory or does not exist, null will be returned. */ public FileObject[] listFiles() { - - // is a directory - if(!file.isDirectory()) { - return null; - } - + + // is a directory + if (!file.isDirectory()) { + return null; + } + // directory - return all the files File[] files = file.listFiles(); - if(files == null) { + if (files == null) { return null; } - + + // make sure the files are returned in order + Arrays.sort(files, new Comparator() { + public int compare(Object o1, Object o2) { + File f1 = (File) o1; + File f2 = (File) o2; + + return f1.getName().compareTo(f2.getName()); + } + }); + // get the virtual name of the base directory String virtualFileStr = getFullName(); - if(virtualFileStr.charAt(virtualFileStr.length() - 1) != '/') { + if (virtualFileStr.charAt(virtualFileStr.length() - 1) != '/') { virtualFileStr += '/'; } - + // now return all the files under the directory FileObject[] virtualFiles = new FileObject[files.length]; - for(int i=0; i current directory - if(tok.equals(".")) { + if (tok.equals(".")) { continue; } - + // .. => parent directory (if not root) - if(tok.equals("..")) { - if(resArg.startsWith(rootDir)) { + if (tok.equals("..")) { + if (resArg.startsWith(rootDir)) { int slashIndex = resArg.lastIndexOf('/'); - if(slashIndex != -1) { + if (slashIndex != -1) { resArg = resArg.substring(0, slashIndex); } } continue; } - + // ~ => home directory (in this case the root directory) if (tok.equals("~")) { - resArg = rootDir.substring(0, rootDir.length()-1); + resArg = rootDir.substring(0, rootDir.length() - 1); continue; } - - if(caseInsensitive) { - File[] matches = new File(resArg).listFiles(new NameEqualsFileFilter(tok, true)); - - if(matches.length > 0) { - tok = matches[0].getName(); - } + + if (caseInsensitive) { + File[] matches = new File(resArg) + .listFiles(new NameEqualsFileFilter(tok, true)); + + if (matches.length > 0) { + tok = matches[0].getName(); + } } - + resArg = resArg + '/' + tok; } - + // add last slash if necessary - if( (resArg.length()) + 1 == rootDir.length() ) { + if ((resArg.length()) + 1 == rootDir.length()) { resArg += '/'; } - + // final check - if ( !resArg.regionMatches(0, rootDir, 0, rootDir.length()) ) { + if (!resArg.regionMatches(0, rootDir, 0, rootDir.length())) { resArg = rootDir; } - + return resArg; } } Modified: incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java?view=diff&rev=565040&r1=565039&r2=565040 ============================================================================== --- incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java (original) +++ incubator/ftpserver/trunk/core/src/java/org/apache/ftpserver/listing/DirectoryLister.java Sun Aug 12 05:11:32 2007 @@ -79,7 +79,7 @@ } /** - * Get the file list. + * Get the file list. Files will be listed in alphabetlical order. */ private FileObject[] listFiles(FileSystemView fileSystemView, String file) { FileObject[] files = null; Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java?view=diff&rev=565040&r1=565039&r2=565040 ============================================================================== --- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java (original) +++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileObjectTestTemplate.java Sun Aug 12 05:11:32 2007 @@ -14,6 +14,7 @@ protected static final String DIR1_PATH = "/dir1"; protected static final String DIR1_WITH_SLASH_PATH = "/dir1/"; protected static final String FILE1_PATH = "/file1"; + protected static final String FILE3_PATH = "/file3"; protected static final User USER = new BaseUser() { public AuthorizationRequest authorize(AuthorizationRequest request) { @@ -21,20 +22,12 @@ } }; - public FileObjectTestTemplate() { - super(); - } - - public FileObjectTestTemplate(String name) { - super(name); - } - - protected abstract FileObject createFile(String fileName, User user); + protected abstract FileObject createFileObject(String fileName, User user); public void testNullFileName() { try{ - createFile(null, USER); + createFileObject(null, USER); fail("Must throw IllegalArgumentException"); } catch(IllegalArgumentException e) { // OK @@ -43,7 +36,7 @@ public void testWhiteSpaceFileName() { try{ - createFile(" \t", USER); + createFileObject(" \t", USER); fail("Must throw IllegalArgumentException"); } catch(IllegalArgumentException e) { // OK @@ -52,7 +45,7 @@ public void testEmptyFileName() { try{ - createFile("", USER); + createFileObject("", USER); fail("Must throw IllegalArgumentException"); } catch(IllegalArgumentException e) { // OK @@ -61,7 +54,7 @@ public void testNonLeadingSlash() { try{ - createFile("foo", USER); + createFileObject("foo", USER); fail("Must throw IllegalArgumentException"); } catch(IllegalArgumentException e) { // OK @@ -69,25 +62,35 @@ } public void testFullName() { - FileObject fileObject = createFile(FILE2_PATH, USER); + FileObject fileObject = createFileObject(FILE2_PATH, USER); assertEquals("/dir1/file2", fileObject.getFullName()); - fileObject = createFile("/dir1/", USER); + fileObject = createFileObject("/dir1/", USER); assertEquals("/dir1", fileObject.getFullName()); - fileObject = createFile("/dir1", USER); + fileObject = createFileObject("/dir1", USER); assertEquals("/dir1", fileObject.getFullName()); } public void testShortName() { - FileObject fileObject = createFile("/dir1/file2", USER); + FileObject fileObject = createFileObject("/dir1/file2", USER); assertEquals("file2", fileObject.getShortName()); - fileObject = createFile("/dir1/", USER); + fileObject = createFileObject("/dir1/", USER); assertEquals("dir1", fileObject.getShortName()); - fileObject = createFile("/dir1", USER); + fileObject = createFileObject("/dir1", USER); assertEquals("dir1", fileObject.getShortName()); + } + + public void testListFilesInOrder() { + FileObject root = createFileObject("/", USER); + + FileObject[] files = root.listFiles(); + assertEquals(3, files.length); + assertEquals("dir1", files[0].getShortName()); + assertEquals("file1", files[1].getShortName()); + assertEquals("file3", files[2].getShortName()); } } Added: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java?view=auto&rev=565040 ============================================================================== --- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java (added) +++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java Sun Aug 12 05:11:32 2007 @@ -0,0 +1,51 @@ +package org.apache.ftpserver.filesystem; + +import org.apache.ftpserver.usermanager.BaseUser; + +import junit.framework.TestCase; + +public abstract class FileSystemViewTemplate extends TestCase { + + protected static final String DIR1_NAME = "dir1"; + + protected BaseUser user = new BaseUser(); + + + public void testChangeDirectory() throws Exception { + NativeFileSystemView view = new NativeFileSystemView(user); + assertEquals("/", view.getCurrentDirectory().getFullName()); + + assertTrue(view.changeDirectory(DIR1_NAME)); + assertEquals("/" + DIR1_NAME, view.getCurrentDirectory().getFullName()); + + assertTrue(view.changeDirectory(".")); + assertEquals("/" + DIR1_NAME, view.getCurrentDirectory().getFullName()); + + assertTrue(view.changeDirectory("..")); + assertEquals("/", view.getCurrentDirectory().getFullName()); + + assertTrue(view.changeDirectory("./" + DIR1_NAME)); + assertEquals("/" + DIR1_NAME, view.getCurrentDirectory().getFullName()); + + assertTrue(view.changeDirectory("~")); + assertEquals("/", view.getCurrentDirectory().getFullName()); + } + + public void testChangeDirectoryCaseInsensitive() throws Exception { + NativeFileSystemView view = new NativeFileSystemView(user, true); + assertEquals("/", view.getCurrentDirectory().getFullName()); + + assertTrue(view.changeDirectory("/DIR1")); + assertEquals("/dir1", view.getCurrentDirectory().getFullName()); + assertTrue(view.getCurrentDirectory().doesExist()); + + assertTrue(view.changeDirectory("/dir1")); + assertEquals("/dir1", view.getCurrentDirectory().getFullName()); + assertTrue(view.getCurrentDirectory().doesExist()); + + assertTrue(view.changeDirectory("/DiR1")); + assertEquals("/dir1", view.getCurrentDirectory().getFullName()); + assertTrue(view.getCurrentDirectory().doesExist()); + } + +} \ No newline at end of file Propchange: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/FileSystemViewTemplate.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java?view=diff&rev=565040&r1=565039&r2=565040 ============================================================================== --- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java (original) +++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileObjectTest.java Sun Aug 12 05:11:32 2007 @@ -35,13 +35,16 @@ private static final File TEST_DIR1 = new File(ROOT_DIR, "dir1"); private static final File TEST_FILE1 = new File(ROOT_DIR, "file1"); private static final File TEST_FILE2_IN_DIR1 = new File(TEST_DIR1, "file2"); + private static final File TEST_FILE3 = new File(ROOT_DIR, "file3"); private static final Map FILE_MAPPINGS = new HashMap(); static { + FILE_MAPPINGS.put("/", ROOT_DIR); FILE_MAPPINGS.put(FILE2_PATH, TEST_FILE2_IN_DIR1); FILE_MAPPINGS.put(DIR1_PATH, TEST_DIR1); FILE_MAPPINGS.put(FILE1_PATH, TEST_FILE1); + FILE_MAPPINGS.put(FILE2_PATH, TEST_FILE3); FILE_MAPPINGS.put(DIR1_WITH_SLASH_PATH, TEST_DIR1); FILE_MAPPINGS.put(" \t", TEST_FILE2_IN_DIR1); } @@ -61,10 +64,11 @@ TEST_DIR1.mkdirs(); TEST_FILE1.createNewFile(); TEST_FILE2_IN_DIR1.createNewFile(); + TEST_FILE3.createNewFile(); } - protected FileObject createFile(String fileName, User user) { + protected FileObject createFileObject(String fileName, User user) { return new NativeFileObject(fileName, (File)FILE_MAPPINGS.get(fileName), user); } Modified: incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java?view=diff&rev=565040&r1=565039&r2=565040 ============================================================================== --- incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java (original) +++ incubator/ftpserver/trunk/core/src/test/org/apache/ftpserver/filesystem/NativeFileSystemViewTest.java Sun Aug 12 05:11:32 2007 @@ -22,48 +22,22 @@ import java.io.File; import java.io.IOException; -import junit.framework.TestCase; - import org.apache.ftpserver.ftplet.FtpException; -import org.apache.ftpserver.usermanager.BaseUser; import org.apache.ftpserver.util.IoUtils; -public class NativeFileSystemViewTest extends TestCase { +public class NativeFileSystemViewTest extends FileSystemViewTemplate { private static final File TEST_TMP_DIR = new File("test-tmp"); - protected static final File ROOT_DIR = new File(TEST_TMP_DIR, "ftproot"); - - private static final File TEST_DIR1 = new File(ROOT_DIR, "dir1"); - - private static final File TEST_FILE1 = new File(ROOT_DIR, "file1"); - - private static final File TEST_FILE2_IN_DIR1 = new File(TEST_DIR1, "file2"); - - private static final String ROOT_DIR_PATH = ROOT_DIR.getAbsolutePath() - .replace('\\', '/'); + private static final File ROOT_DIR = new File(TEST_TMP_DIR, "ftproot"); - private static final String FULL_PATH = ROOT_DIR_PATH + "/" - + TEST_DIR1.getName() + "/" + TEST_FILE2_IN_DIR1.getName(); + private static final File TEST_DIR1 = new File(ROOT_DIR, DIR1_NAME); - private static final String FULL_PATH_NO_CURRDIR = ROOT_DIR_PATH + "/" - + TEST_FILE2_IN_DIR1.getName(); - - private BaseUser user; - - /* - * (non-Javadoc) - * - * @see junit.framework.TestCase#setUp() - */ protected void setUp() throws Exception { initDirs(); TEST_DIR1.mkdirs(); - TEST_FILE1.createNewFile(); - TEST_FILE2_IN_DIR1.createNewFile(); - user = new BaseUser(); user.setHomeDirectory(ROOT_DIR.getAbsolutePath()); } @@ -72,42 +46,7 @@ assertEquals("/", view.getCurrentDirectory().getFullName()); } - public void testChangeDirectory() throws Exception { - NativeFileSystemView view = new NativeFileSystemView(user); - assertEquals("/", view.getCurrentDirectory().getFullName()); - assertTrue(view.changeDirectory(TEST_DIR1.getName())); - assertEquals("/" + TEST_DIR1.getName(), view.getCurrentDirectory().getFullName()); - - assertTrue(view.changeDirectory(".")); - assertEquals("/" + TEST_DIR1.getName(), view.getCurrentDirectory().getFullName()); - - assertTrue(view.changeDirectory("..")); - assertEquals("/", view.getCurrentDirectory().getFullName()); - - assertTrue(view.changeDirectory("./" + TEST_DIR1.getName())); - assertEquals("/" + TEST_DIR1.getName(), view.getCurrentDirectory().getFullName()); - - assertTrue(view.changeDirectory("~")); - assertEquals("/", view.getCurrentDirectory().getFullName()); - } - - public void testChangeDirectoryCaseInsensitive() throws Exception { - NativeFileSystemView view = new NativeFileSystemView(user, true); - assertEquals("/", view.getCurrentDirectory().getFullName()); - - assertTrue(view.changeDirectory("/DIR1")); - assertEquals("/dir1", view.getCurrentDirectory().getFullName()); - assertTrue(view.getCurrentDirectory().doesExist()); - - assertTrue(view.changeDirectory("/dir1")); - assertEquals("/dir1", view.getCurrentDirectory().getFullName()); - assertTrue(view.getCurrentDirectory().doesExist()); - - assertTrue(view.changeDirectory("/DiR1")); - assertEquals("/dir1", view.getCurrentDirectory().getFullName()); - assertTrue(view.getCurrentDirectory().doesExist()); - } public void testConstructorWithNullUser() throws FtpException { try{ Modified: incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java URL: http://svn.apache.org/viewvc/incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java?view=diff&rev=565040&r1=565039&r2=565040 ============================================================================== --- incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java (original) +++ incubator/ftpserver/trunk/ftplet-api/src/java/org/apache/ftpserver/ftplet/FileObject.java Sun Aug 12 05:11:32 2007 @@ -117,6 +117,7 @@ /** * List file objects. If not a directory or does not exist, * null will be returned. + * Files must be returned in alphabetical order. */ FileObject[] listFiles();