100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/* 200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Copyright 2008 the original author or authors. 300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * you may not use this file except in compliance with the License. 600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * You may obtain a copy of the License at 700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * http://www.apache.org/licenses/LICENSE-2.0 900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 1000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Unless required by applicable law or agreed to in writing, software 1100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * See the License for the specific language governing permissions and 1400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * limitations under the License. 1500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 1600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpackage org.mockftpserver.fake.filesystem 1700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 1800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport java.lang.reflect.Constructor 1900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairimport org.mockftpserver.test.AbstractGroovyTestCase 2000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 2100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair/** 2200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * Abstract test superclass for subclasses of AbstractFileSystemEntry 2300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 2400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @version $Revision$ - $Date$ 2500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * 2600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @author Chris Mair 2700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 2800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismairpublic abstract class AbstractFileSystemEntryTestCase extends AbstractGroovyTestCase { 2900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected static final PATH = "c:/test/dir" 3100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected static final NEW_PATH = "d:/other/dir" 3200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected static final USER = 'user77' 3300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected static final GROUP = 'group88' 3400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected static final PERMISSIONS = new Permissions('rwxrwx---') 3500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected static final LAST_MODIFIED = new Date() 3600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 3700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testConstructor_NoArgs() { 3800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair AbstractFileSystemEntry entry = (AbstractFileSystemEntry) getImplementationClass().newInstance() 3900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertNull("path", entry.getPath()) 4000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair entry.setPath(PATH) 4100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.getPath() == PATH 4200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert isDirectory() == entry.isDirectory() 4300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 4400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 4500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testConstructor_Path() { 4600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair Constructor constructor = getImplementationClass().getConstructor([String.class] as Class[]) 4700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair AbstractFileSystemEntry entry = (AbstractFileSystemEntry) constructor.newInstance([PATH] as Object[]) 4800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair LOG.info(entry.toString()) 4900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assertEquals("path", PATH, entry.getPath()) 5000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair entry.setPath("") 5100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.getPath() == "" 5200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert isDirectory() == entry.isDirectory() 5300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 5400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 5500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testLockPath() { 5600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def entry = createFileSystemEntry(PATH) 5700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair entry.lockPath() 5800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair shouldFail { entry.path = 'abc' } 5900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.path == PATH 6000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testGetName() { 6300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert createFileSystemEntry('abc').name == 'abc' 6400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert createFileSystemEntry('/abc').name == 'abc' 6500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert createFileSystemEntry('/dir/abc').name == 'abc' 6600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert createFileSystemEntry('\\abc').name == 'abc' 6700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 6800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 6900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair void testSetPermissionsFromString() { 7000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def entry = createFileSystemEntry('abc') 7100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair final PERM = 'rw-r---wx' 7200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair entry.setPermissionsFromString(PERM) 7300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair assert entry.permissions == new Permissions(PERM) 7400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 7500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 7600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected AbstractFileSystemEntry createFileSystemEntry(String path) { 7700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair def entry = (AbstractFileSystemEntry) getImplementationClass().newInstance() 7800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair entry.setPath(path) 7900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair return entry 8000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair } 8100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 8300dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @return the subclass of AbstractFileSystemEntry to be tested 8400dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 8500dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected abstract Class getImplementationClass() 8600dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 8700dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair /** 8800dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair * @return true if the class being tested represents a directory entry 8900dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair */ 9000dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair protected abstract boolean isDirectory() 9100dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair 9200dc7bdcf1df9e86789d963984dfc6912a8854c6chrismair} 93