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