1ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair/* 2ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Copyright 2008 the original author or authors. 3ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 4ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 5ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * you may not use this file except in compliance with the License. 6ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * You may obtain a copy of the License at 7ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 8ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * http://www.apache.org/licenses/LICENSE-2.0 9ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 10ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Unless required by applicable law or agreed to in writing, software 11ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * distributed under the License is distributed on an "AS IS" BASIS, 12ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * See the License for the specific language governing permissions and 14ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * limitations under the License. 15ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 16ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairpackage org.mockftpserver.fake.filesystem 17ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 18ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport java.lang.reflect.Constructor 19ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairimport org.mockftpserver.test.AbstractGroovyTest 20ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 21ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair/** 22ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * Abstract test superclass for subclasses of AbstractFileSystemEntry 23ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 24ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @version $Revision$ - $Date$ 25ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * 26ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @author Chris Mair 27ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 28ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismairpublic abstract class AbstractFileSystemEntryTest extends AbstractGroovyTest { 29ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 30ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected static final PATH = "c:/test/dir" 31ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected static final NEW_PATH = "d:/other/dir" 32ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected static final USER = 'user77' 33ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected static final GROUP = 'group88' 34ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected static final PERMISSIONS = new Permissions('rwxrwx---') 35ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected static final LAST_MODIFIED = new Date() 36ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 37ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair void testConstructor_NoArgs() { 38ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair AbstractFileSystemEntry entry = (AbstractFileSystemEntry) getImplementationClass().newInstance() 39ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assertNull("path", entry.getPath()) 40ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair entry.setPath(PATH) 41ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert entry.getPath() == PATH 42ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert isDirectory() == entry.isDirectory() 43ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 44ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 45ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair void testConstructor_Path() { 46ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair Constructor constructor = getImplementationClass().getConstructor([String.class] as Class[]) 47ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair AbstractFileSystemEntry entry = (AbstractFileSystemEntry) constructor.newInstance([PATH] as Object[]) 48ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair LOG.info(entry) 49ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assertEquals("path", PATH, entry.getPath()) 50ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair entry.setPath("") 51ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert entry.getPath() == "" 52ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert isDirectory() == entry.isDirectory() 53ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 54ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 55ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair void testLockPath() { 56ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair def entry = createFileSystemEntry(PATH) 57ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair entry.lockPath() 58ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair shouldFail { entry.path = 'abc' } 59ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert entry.path == PATH 60ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 61ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 62ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair void testGetName() { 63ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert createFileSystemEntry('abc').name == 'abc' 64ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert createFileSystemEntry('/abc').name == 'abc' 65ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert createFileSystemEntry('/dir/abc').name == 'abc' 66ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert createFileSystemEntry('\\abc').name == 'abc' 67ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 68ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 69ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair void testSetPermissionsFromString() { 70ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair def entry = createFileSystemEntry('abc') 71ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair final PERM = 'rw-r---wx' 72ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair entry.setPermissionsFromString(PERM) 73ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair assert entry.permissions == new Permissions(PERM) 74ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 75ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 76ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected AbstractFileSystemEntry createFileSystemEntry(String path) { 77ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair def entry = (AbstractFileSystemEntry) getImplementationClass().newInstance() 78ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair entry.setPath(path) 79ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair return entry 80ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair } 81ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 82ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 83ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @return the subclass of AbstractFileSystemEntry to be tested 84ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 85ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected abstract Class getImplementationClass() 86ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 87ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair /** 88ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair * @return true if the class being tested represents a directory entry 89ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair */ 90ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair protected abstract boolean isDirectory() 91ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair 92ad39334d4c363c6ada5863d0bb3184f5f4699d69chrismair} 93