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