1abd32a990e145862f22d15316feedced5ad246aachrismair/*
2abd32a990e145862f22d15316feedced5ad246aachrismair * Copyright 2008 the original author or authors.
3abd32a990e145862f22d15316feedced5ad246aachrismair *
4abd32a990e145862f22d15316feedced5ad246aachrismair * Licensed under the Apache License, Version 2.0 (the "License");
5abd32a990e145862f22d15316feedced5ad246aachrismair * you may not use this file except in compliance with the License.
6abd32a990e145862f22d15316feedced5ad246aachrismair * You may obtain a copy of the License at
7abd32a990e145862f22d15316feedced5ad246aachrismair *
8abd32a990e145862f22d15316feedced5ad246aachrismair *      http://www.apache.org/licenses/LICENSE-2.0
9abd32a990e145862f22d15316feedced5ad246aachrismair *
10abd32a990e145862f22d15316feedced5ad246aachrismair * Unless required by applicable law or agreed to in writing, software
11abd32a990e145862f22d15316feedced5ad246aachrismair * distributed under the License is distributed on an "AS IS" BASIS,
12abd32a990e145862f22d15316feedced5ad246aachrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13abd32a990e145862f22d15316feedced5ad246aachrismair * See the License for the specific language governing permissions and
14abd32a990e145862f22d15316feedced5ad246aachrismair * limitations under the License.
15abd32a990e145862f22d15316feedced5ad246aachrismair */
16abd32a990e145862f22d15316feedced5ad246aachrismairpackage org.mockftpserver.fake.filesystem
17abd32a990e145862f22d15316feedced5ad246aachrismair
18abd32a990e145862f22d15316feedced5ad246aachrismairimport java.lang.reflect.Constructor
195303c6ae1dde5f399fe48803e677942fc4326344chrismairimport org.mockftpserver.test.AbstractGroovyTestCase
20abd32a990e145862f22d15316feedced5ad246aachrismair
21abd32a990e145862f22d15316feedced5ad246aachrismair/**
22abd32a990e145862f22d15316feedced5ad246aachrismair * Abstract test superclass for subclasses of AbstractFileSystemEntry
2309415075d96852489d096aea7ae07dd156b58643chrismair *
247d4a3a2990f1a386eaf9d50cf05a9d45fab32de6chrismair * @version $Revision$ - $Date$
25abd32a990e145862f22d15316feedced5ad246aachrismair *
26abd32a990e145862f22d15316feedced5ad246aachrismair * @author Chris Mair
27abd32a990e145862f22d15316feedced5ad246aachrismair */
285303c6ae1dde5f399fe48803e677942fc4326344chrismairpublic abstract class AbstractFileSystemEntryTestCase extends AbstractGroovyTestCase {
29abd32a990e145862f22d15316feedced5ad246aachrismair
30abd32a990e145862f22d15316feedced5ad246aachrismair    protected static final PATH = "c:/test/dir"
3109415075d96852489d096aea7ae07dd156b58643chrismair    protected static final NEW_PATH = "d:/other/dir"
3209415075d96852489d096aea7ae07dd156b58643chrismair    protected static final USER = 'user77'
3309415075d96852489d096aea7ae07dd156b58643chrismair    protected static final GROUP = 'group88'
3409415075d96852489d096aea7ae07dd156b58643chrismair    protected static final PERMISSIONS = new Permissions('rwxrwx---')
3509415075d96852489d096aea7ae07dd156b58643chrismair    protected static final LAST_MODIFIED = new Date()
3609415075d96852489d096aea7ae07dd156b58643chrismair
37abd32a990e145862f22d15316feedced5ad246aachrismair    void testConstructor_NoArgs() {
38abd32a990e145862f22d15316feedced5ad246aachrismair        AbstractFileSystemEntry entry = (AbstractFileSystemEntry) getImplementationClass().newInstance()
39abd32a990e145862f22d15316feedced5ad246aachrismair        assertNull("path", entry.getPath())
40abd32a990e145862f22d15316feedced5ad246aachrismair        entry.setPath(PATH)
41abd32a990e145862f22d15316feedced5ad246aachrismair        assert entry.getPath() == PATH
42abd32a990e145862f22d15316feedced5ad246aachrismair        assert isDirectory() == entry.isDirectory()
43abd32a990e145862f22d15316feedced5ad246aachrismair    }
44abd32a990e145862f22d15316feedced5ad246aachrismair
45abd32a990e145862f22d15316feedced5ad246aachrismair    void testConstructor_Path() {
46abd32a990e145862f22d15316feedced5ad246aachrismair        Constructor constructor = getImplementationClass().getConstructor([String.class] as Class[])
47abd32a990e145862f22d15316feedced5ad246aachrismair        AbstractFileSystemEntry entry = (AbstractFileSystemEntry) constructor.newInstance([PATH] as Object[])
48dfa40a06dff44f29d8d5e1d3186055ad325fc7b9chrismair        LOG.info(entry.toString())
49abd32a990e145862f22d15316feedced5ad246aachrismair        assertEquals("path", PATH, entry.getPath())
50abd32a990e145862f22d15316feedced5ad246aachrismair        entry.setPath("")
51abd32a990e145862f22d15316feedced5ad246aachrismair        assert entry.getPath() == ""
52abd32a990e145862f22d15316feedced5ad246aachrismair        assert isDirectory() == entry.isDirectory()
53abd32a990e145862f22d15316feedced5ad246aachrismair    }
54abd32a990e145862f22d15316feedced5ad246aachrismair
5543649b0e3c6397d125ad56213f6917bd1336f852chrismair    void testLockPath() {
561dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        def entry = createFileSystemEntry(PATH)
5743649b0e3c6397d125ad56213f6917bd1336f852chrismair        entry.lockPath()
5843649b0e3c6397d125ad56213f6917bd1336f852chrismair        shouldFail { entry.path = 'abc' }
5943649b0e3c6397d125ad56213f6917bd1336f852chrismair        assert entry.path == PATH
6043649b0e3c6397d125ad56213f6917bd1336f852chrismair    }
6143649b0e3c6397d125ad56213f6917bd1336f852chrismair
621dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair    void testGetName() {
631dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        assert createFileSystemEntry('abc').name == 'abc'
641dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        assert createFileSystemEntry('/abc').name == 'abc'
651dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        assert createFileSystemEntry('/dir/abc').name == 'abc'
661dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        assert createFileSystemEntry('\\abc').name == 'abc'
671dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair    }
681dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair
69884bbfe1c30c315958fa950be07f9418e59443b3chrismair    void testSetPermissionsFromString() {
70884bbfe1c30c315958fa950be07f9418e59443b3chrismair        def entry = createFileSystemEntry('abc')
71884bbfe1c30c315958fa950be07f9418e59443b3chrismair        final PERM = 'rw-r---wx'
725965f99e27e983c12951d8cd1f11c5e535a24c4achrismair        entry.setPermissionsFromString(PERM)
73884bbfe1c30c315958fa950be07f9418e59443b3chrismair        assert entry.permissions == new Permissions(PERM)
74884bbfe1c30c315958fa950be07f9418e59443b3chrismair    }
75884bbfe1c30c315958fa950be07f9418e59443b3chrismair
761dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair    protected AbstractFileSystemEntry createFileSystemEntry(String path) {
771dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        def entry = (AbstractFileSystemEntry) getImplementationClass().newInstance()
781dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        entry.setPath(path)
791dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair        return entry
801dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair    }
811dfeab57f80c3a156a7ff11871c03f3f53033b9echrismair
82abd32a990e145862f22d15316feedced5ad246aachrismair    /**
83abd32a990e145862f22d15316feedced5ad246aachrismair     * @return the subclass of AbstractFileSystemEntry to be tested
84abd32a990e145862f22d15316feedced5ad246aachrismair     */
85abd32a990e145862f22d15316feedced5ad246aachrismair    protected abstract Class getImplementationClass()
8609415075d96852489d096aea7ae07dd156b58643chrismair
87abd32a990e145862f22d15316feedced5ad246aachrismair    /**
88abd32a990e145862f22d15316feedced5ad246aachrismair     * @return true if the class being tested represents a directory entry
89abd32a990e145862f22d15316feedced5ad246aachrismair     */
90abd32a990e145862f22d15316feedced5ad246aachrismair    protected abstract boolean isDirectory()
9109415075d96852489d096aea7ae07dd156b58643chrismair
92abd32a990e145862f22d15316feedced5ad246aachrismair}
93