1b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/*
2b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Copyright 2008 the original author or authors.
3b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair *
4b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Licensed under the Apache License, Version 2.0 (the "License");
5b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * you may not use this file except in compliance with the License.
6b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * You may obtain a copy of the License at
7b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair *
8b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair *      http://www.apache.org/licenses/LICENSE-2.0
9b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair *
10b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Unless required by applicable law or agreed to in writing, software
11b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * distributed under the License is distributed on an "AS IS" BASIS,
12b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * See the License for the specific language governing permissions and
14b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * limitations under the License.
15b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */
16b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairpackage org.mockftpserver.fake.filesystem
17b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
18b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairimport org.mockftpserver.fake.filesystem.AbstractFakeFileSystemTest
19b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
20b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair/**
21b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * Tests for UnixFakeFileSystem.
22b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair *
23b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @version $Revision$ - $Date$
24b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair *
25b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair * @author Chris Mair
26b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair */
27b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismairclass UnixFakeFileSystemTest extends AbstractFakeFileSystemTest {
28b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
29b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    private static final String SEP = "/"
30b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
31b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    UnixFakeFileSystemTest() {
32b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        // These need to be set in the constructor because these values are used in setUp()
33b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        NEW_DIR = SEP + NEW_DIRNAME
34b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        NEW_FILE = "/NewFile.txt"
35b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        EXISTING_DIR = "/"
36b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        EXISTING_FILE = "/ExistingFile.txt"
37b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        NO_SUCH_DIR = "/xx/yy"
38b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        NO_SUCH_FILE = "/xx/yy/zz.txt"
39b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
40b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
41b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
42b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    void testListNames_FromRoot() {
43b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        final DIR = '/'
44b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        final FILENAME = 'abc.txt'
45b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        final FILE = p(DIR, FILENAME)
46b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
47b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert !fileSystem.exists(FILE)
48b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        fileSystem.add(new FileEntry(FILE))
49b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        def names = fileSystem.listNames(DIR)
50b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert names.find { it == FILENAME }
51b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
52b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
53b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    void testPath() {
54b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path(null, null) == ""
55b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path(null, "abc") == "abc"
56b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("abc", null) == "abc"
57b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("", "") == ""
58b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("", "abc") == "abc"
59b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("abc", "") == "abc"
60b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("abc", "DEF") == "abc/DEF"
61b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("abc/", "def") == "abc/def"
62b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("/abc/", "def") == "/abc/def"
63b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("/ABC", "/def") == "/ABC/def"
64b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.path("abc", "/def") == "abc/def"
65b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
66b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
67b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    void testNormalize() {
68b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/") == "/"
69b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/aBc") == "/aBc"
70b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/abc/DEF") == "/abc/DEF"
71b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/Abc/def/..") == "/Abc"
72b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/abc/def/../ghi") == "/abc/ghi"
73b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/abc/def/.") == "/abc/def"
74b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.normalize("/abc/def/./gHI") == "/abc/def/gHI"
75b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
76b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
77b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    void testGetName() {
78b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getName("/") == ""
79b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getName("/aBC") == "aBC"
80b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getName("/abc/def") == "def"
81b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getName("/abc/def/../GHI") == "GHI"
82b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
83b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
84b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    public void testGetParent() {
85b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getParent("/") == null
86b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getParent("/abc") == "/"
87b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.getParent("/abc/def") == "/abc"
88b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
89b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
90b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    void testIsValidName() {
91b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        ["/abc",
92b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "/ABC/def",
93b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "/abc/d!ef",
94b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "/abc/DEF/h(ij)!@#\$%^&*()-_+=~`,.<>?;:[]{}\\|abc",
95b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        ].each {
96b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair            assert fileSystem.isValidName(it), "[$it]"
97b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        }
98b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
99b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        ["",
100b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "abc",
101b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "abc/def",
102b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "a:/abc:",
103b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "//a*bc",
104b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair                "C:/?abc",
105b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        ].each {
106b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair            assert !fileSystem.isValidName(it), "[$it]"
107b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        }
108b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
109b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
110b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    void testIsAbsolute() {
111b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.isAbsolute("/")
112b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fileSystem.isAbsolute("/abc")
113b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
114b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert !fileSystem.isAbsolute("abc")
115b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert !fileSystem.isAbsolute("c:\\usr")
116b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
117b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        shouldFailWithMessageContaining("path") { fileSystem.isAbsolute(null) }
118b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
119b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
120b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    //-----------------------------------------------------------------------------------
121b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    // Helper Methods
122b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    //-----------------------------------------------------------------------------------
123b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
124b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    /**
125b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair     * Return a new instance of the FileSystem implementation class under test
126b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair     * @return a new FileSystem instance
127b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair     */
128b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    protected FileSystem createFileSystem() {
129b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        UnixFakeFileSystem fs = new UnixFakeFileSystem()
130b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        fs.add(new DirectoryEntry(EXISTING_DIR))
131b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        fs.add(new FileEntry(EXISTING_FILE, EXISTING_FILE_CONTENTS))
132b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        assert fs.createParentDirectoriesAutomatically
133b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        fs.createParentDirectoriesAutomatically = false
134b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        return fs
135b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
136b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
137b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    protected Class getExpectedDirectoryListingFormatterClass() {
138b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair        return UnixDirectoryListingFormatter
139b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair    }
140b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair
141b2f4a2dfc590c250e42b21eb40d9539ac135b495chrismair}
142