160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair/* 260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Copyright 2008 the original author or authors. 360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * 460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * you may not use this file except in compliance with the License. 660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * You may obtain a copy of the License at 760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * 860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * http://www.apache.org/licenses/LICENSE-2.0 960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * 1060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Unless required by applicable law or agreed to in writing, software 1160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * See the License for the specific language governing permissions and 1460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * limitations under the License. 1560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */ 1660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairpackage org.mockftpserver.fake.filesystem 1760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 1860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairimport org.mockftpserver.fake.filesystem.AbstractFakeFileSystemTest 1960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 2060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair/** 2160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Tests for WindowsFakeFileSystem. 2260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * 2360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @version $Revision$ - $Date$ 2460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * 2560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @author Chris Mair 2660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */ 2760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismairclass WindowsFakeFileSystemTest extends AbstractFakeFileSystemTest { 2860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 2960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair private static final String SEP = "\\" 3060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 3160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair WindowsFakeFileSystemTest() { 3260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // These need to be set in the constructor because these values are used in setUp() 3360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair NEW_DIR = "d:/" + NEW_DIRNAME 3460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair NEW_FILE = "d:/NewFile.txt" 3560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair EXISTING_DIR = "d:/" 3660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair EXISTING_FILE = "d:/ExistingFile.txt" 3760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair NO_SUCH_DIR = 'x:/xx/yy' 3860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair NO_SUCH_FILE = "x:/xx/yy/zz.txt" 3960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 4060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 4160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // ------------------------------------------------------------------------- 4260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // Tests 4360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // ------------------------------------------------------------------------- 4460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 4560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testOtherRoots() { 4660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair final String X = "x:/" 4760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair final String Y = "y:\\" 4860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assertFalse(X, fileSystem.exists(X)) 4960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assertFalse(Y, fileSystem.exists(Y)) 5060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 5160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair fileSystem.add(new DirectoryEntry(X)) 5260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair fileSystem.add(new DirectoryEntry(Y)) 5360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 5460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assertTrue(X, fileSystem.exists(X)) 5560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assertTrue(Y, fileSystem.exists(Y)) 5660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 5760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 5860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testPath() { 5960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path(null, null) == "" 6060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path(null, "abc") == "abc" 6160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("abc", null) == "abc" 6260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("", "") == "" 6360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("", "abc") == "abc" 6460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("abc", "") == "abc" 6560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("abc", "def") == "abc" + SEP + "def" 6660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("abc\\", "def") == "abc\\def" 6760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("c:/abc/", "def") == "c:/abc/def" 6860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("d:\\abc", "\\def") == "d:\\abc\\def" 6960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.path("abc", "/def") == "abc/def" 7060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 7160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 7260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testNormalize() { 7360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("a:\\") == "a:\\" 7460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("a:/") == "a:\\" 7560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("b:/abc") == path("b:", "abc") 7660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("c:\\abc\\def") == path("c:", "abc", "def") 7760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("d:/abc/def") == path("d:", "abc", "def") 7860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("e:\\abc/def/..") == path("e:", "abc") 7960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("f:/abc/def/../ghi") == path("f:", "abc", "ghi") 8060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("g:\\abc\\def\\.") == path("g:", "abc", "def") 8160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("h:/abc\\def\\./ghi") == path("h:", "abc", "def", "ghi") 8260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("c:\\abc").toLowerCase() == path("c:", "abc") 8360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("c:/abc").toLowerCase() == path("c:", "abc") 8460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.normalize("z:/abc").toLowerCase() == path("z:", "abc") 8560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 8660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 8760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testGetName() { 8860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getName("l:\\") == "" 8960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getName("m:\\abc") == "abc" 9060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getName("n:/abc\\def") == "def" 9160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getName("o:/abc/def") == "def" 9260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 9360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 9460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair public void testGetParent() { 9560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getParent("p:/") == null 9660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getParent("q:\\abc") == "q:\\" 9760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getParent("r:/abc\\def") == path("r:", "abc") 9860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.getParent("s:\\abc/def") == path("s:", "abc") 9960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 10060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 10160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testIsValidName() { 10260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // \/:*?"<>| 10360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair ["a:\\abc", 10460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "c:/abc", 10560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "d:/abc\\def", 10660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "e:/abc\\d!ef", 10760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "f:\\abc\\def\\h(ij)", 10860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "g:\\abc", 10960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "z:/abc/def", 11060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "\\\\shared" 11160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair ].each { 11260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.isValidName(it), "[$it]" 11360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 11460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 11560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair ["", 11660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "abc", 11760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "abc/def", 11860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "a:/abc:", 11960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "B:\\a*bc", 12060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "C:/?abc", 12160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "D:\\abc/<def", 12260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "E:/abc/def>", 12360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "aa:\\abc", 12460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "X:X:/abc", 12560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair ":\\abc\\def", 12660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair "X:\\\\abc" 12760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair ].each { 12860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert !fileSystem.isValidName(it), "[$it]" 12960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 13060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 13160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 13260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testIsAbsolute() { 13360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.isAbsolute("c:\\") 13460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.isAbsolute("x:\\Documents") 13560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.isAbsolute("a:/") 13660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileSystem.isAbsolute("\\\\shared\\docs") 13760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 13860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert !fileSystem.isAbsolute("abc") 13960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert !fileSystem.isAbsolute("/usr") 14060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert !fileSystem.isAbsolute("c:usr") 14160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 14260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair shouldFailWithMessageContaining("path") { fileSystem.isAbsolute(null) } 14360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 14460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 14560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void testCaseInsensitive() { 14660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair def fileEntry = fileSystem.getEntry(EXISTING_FILE) 14760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileEntry 14860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair assert fileEntry == fileSystem.getEntry(EXISTING_FILE.toLowerCase()) 14960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 15060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 15160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair //------------------------------------------------------------------------- 15260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // Test setup 15360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair //------------------------------------------------------------------------- 15460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 15560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair void setUp() { 15660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair super.setUp() 15760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 15860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 15960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair protected Class getExpectedDirectoryListingFormatterClass() { 16060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair return WindowsDirectoryListingFormatter 16160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 16260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 16360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair //----------------------------------------------------------------------------------- 16460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair // Helper Methods 16560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair //----------------------------------------------------------------------------------- 16660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 16760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair /** 16860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Return a new instance of the FileSystem implementation class under test 16960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * 17060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @return a new FileSystem instance 17160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */ 17260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair protected FileSystem createFileSystem() { 17360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair WindowsFakeFileSystem fs = new WindowsFakeFileSystem() 17460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair fs.add(new DirectoryEntry(EXISTING_DIR)) 17560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair fs.add(new FileEntry(EXISTING_FILE, EXISTING_FILE_CONTENTS)) 17660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair fs.createParentDirectoriesAutomatically = false 17760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair return fs 17860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 17960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair 18060b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair /** 18160b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * Return the specified paths concatenated with the system-dependent separator in between 18260b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @param p1 - the first path 18360b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @param p2 - the second path 18460b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair * @return p1 + SEPARATOR + p2 18560b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair */ 18660b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair private String path(String[] paths) { 18760b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair return paths.join(SEP) 18860b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair } 18960b81e2faf8511148f0d1e8f296e0b40ce9c7971chrismair} 190