12ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/*
22ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Copyright 2008 the original author or authors.
32ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
42ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Licensed under the Apache License, Version 2.0 (the "License");
52ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * you may not use this file except in compliance with the License.
62ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * You may obtain a copy of the License at
72ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
82ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *      http://www.apache.org/licenses/LICENSE-2.0
92ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
102ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Unless required by applicable law or agreed to in writing, software
112ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * distributed under the License is distributed on an "AS IS" BASIS,
122ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
132ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * See the License for the specific language governing permissions and
142ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * limitations under the License.
152ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
162ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpackage org.mockftpserver.fake.filesystem
172ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
182ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport java.lang.reflect.Constructor
192ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairimport org.mockftpserver.test.AbstractGroovyTest
202ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
212ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair/**
222ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * Abstract test superclass for subclasses of AbstractFileSystemEntry
232ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
242ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @version $Revision$ - $Date$
252ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair *
262ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair * @author Chris Mair
272ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair */
282ab05e83458f35931075adca0d7b0fce4ea7cccbchrismairpublic abstract class AbstractFileSystemEntryTest extends AbstractGroovyTest {
292ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
302ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected static final PATH = "c:/test/dir"
312ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected static final NEW_PATH = "d:/other/dir"
322ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected static final USER = 'user77'
332ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected static final GROUP = 'group88'
342ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected static final PERMISSIONS = new Permissions('rwxrwx---')
352ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected static final LAST_MODIFIED = new Date()
362ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
372ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    void testConstructor_NoArgs() {
382ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        AbstractFileSystemEntry entry = (AbstractFileSystemEntry) getImplementationClass().newInstance()
392ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assertNull("path", entry.getPath())
402ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        entry.setPath(PATH)
412ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert entry.getPath() == PATH
422ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert isDirectory() == entry.isDirectory()
432ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
442ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
452ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    void testConstructor_Path() {
462ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        Constructor constructor = getImplementationClass().getConstructor([String.class] as Class[])
472ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        AbstractFileSystemEntry entry = (AbstractFileSystemEntry) constructor.newInstance([PATH] as Object[])
482ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        LOG.info(entry)
492ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assertEquals("path", PATH, entry.getPath())
502ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        entry.setPath("")
512ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert entry.getPath() == ""
522ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert isDirectory() == entry.isDirectory()
532ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
542ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
552ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    void testLockPath() {
562ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        def entry = createFileSystemEntry(PATH)
572ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        entry.lockPath()
582ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        shouldFail { entry.path = 'abc' }
592ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert entry.path == PATH
602ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
612ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
622ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    void testGetName() {
632ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert createFileSystemEntry('abc').name == 'abc'
642ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert createFileSystemEntry('/abc').name == 'abc'
652ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert createFileSystemEntry('/dir/abc').name == 'abc'
662ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert createFileSystemEntry('\\abc').name == 'abc'
672ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
682ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
692ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    void testSetPermissionsFromString() {
702ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        def entry = createFileSystemEntry('abc')
712ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        final PERM = 'rw-r---wx'
722ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        entry.setPermissionsFromString(PERM)
732ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        assert entry.permissions == new Permissions(PERM)
742ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
752ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
762ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected AbstractFileSystemEntry createFileSystemEntry(String path) {
772ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        def entry = (AbstractFileSystemEntry) getImplementationClass().newInstance()
782ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        entry.setPath(path)
792ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair        return entry
802ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    }
812ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
822ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
832ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @return the subclass of AbstractFileSystemEntry to be tested
842ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
852ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected abstract Class getImplementationClass()
862ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
872ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    /**
882ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     * @return true if the class being tested represents a directory entry
892ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair     */
902ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair    protected abstract boolean isDirectory()
912ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair
922ab05e83458f35931075adca0d7b0fce4ea7cccbchrismair}
93