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