1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.vfs2.operations;
18
19 import static org.junit.jupiter.api.Assertions.assertEquals;
20 import static org.junit.jupiter.api.Assertions.assertNotNull;
21 import static org.junit.jupiter.api.Assertions.assertSame;
22 import static org.junit.jupiter.api.Assertions.assertThrows;
23
24 import java.io.File;
25 import java.util.Collection;
26
27 import org.apache.commons.logging.Log;
28 import org.apache.commons.vfs2.FileObject;
29 import org.apache.commons.vfs2.FileSystemException;
30 import org.apache.commons.vfs2.impl.DefaultFileSystemManager;
31 import org.apache.commons.vfs2.operations.vcs.VcsLog;
32 import org.apache.commons.vfs2.provider.FileProvider;
33 import org.apache.commons.vfs2.provider.VfsComponent;
34 import org.apache.commons.vfs2.provider.VfsComponentContext;
35 import org.apache.commons.vfs2.provider.local.DefaultLocalFileProvider;
36 import org.junit.jupiter.api.AfterEach;
37 import org.junit.jupiter.api.BeforeEach;
38 import org.junit.jupiter.api.Test;
39
40
41
42
43 public class BasicOperationsTest {
44
45
46
47
48 static class MyFileOperationProviderBase implements FileOperationProvider {
49 int ops;
50
51 @Override
52 public void collectOperations(final Collection<Class<? extends FileOperation>> operationsList,
53 final FileObject file) throws FileSystemException {
54 assertNotNull(operationsList, "collect operationsList");
55 assertNotNull(file, "collect file");
56 ops |= 16;
57 }
58
59 @Override
60 public FileOperation getOperation(final FileObject file, final Class<? extends FileOperation> operationClass)
61 throws FileSystemException {
62 assertNotNull(file, "file object");
63 assertNotNull(operationClass, "operationClass");
64 ops |= 32;
65 return null;
66 }
67 }
68
69
70 static class MyFileOperationProviderComp extends MyFileOperationProviderBase implements VfsComponent {
71 @Override
72 public void close() {
73 ops |= 8;
74 }
75
76 @Override
77 public void init() throws FileSystemException {
78 ops |= 4;
79 }
80
81 @Override
82 public void setContext(final VfsComponentContext context) {
83 assertNotNull(context, "setContext");
84 ops |= 2;
85 }
86
87 @Override
88 public void setLogger(final Log logger) {
89 assertNotNull(logger, "setLogger");
90 ops |= 1;
91 }
92 }
93
94
95 static class MyFileOperationProviderNoncomp extends MyFileOperationProviderBase {
96
97 }
98
99
100 private DefaultFileSystemManager manager;
101
102
103
104
105
106
107 @BeforeEach
108 public void setUp() throws FileSystemException {
109 manager = new DefaultFileSystemManager();
110 @SuppressWarnings("resource")
111 final FileProvider fp = new DefaultLocalFileProvider();
112 manager.addProvider("file", fp);
113 manager.init();
114 }
115
116
117
118
119 @AfterEach
120 public void tearDown() {
121 if (manager != null) {
122 manager.close();
123 manager = null;
124 }
125 }
126
127
128
129
130
131
132 @Test
133 public void testLifecycleComp() throws FileSystemException {
134 try (final MyFileOperationProviderComp myop = new MyFileOperationProviderComp()) {
135 assertEquals(0, myop.ops);
136 manager.addOperationProvider("file", myop);
137 assertEquals(7, myop.ops);
138 manager.close();
139 assertEquals(15, myop.ops, "close() not called");
140 }
141
142 }
143
144
145
146
147
148
149 @Test
150 public void testLifecycleNoncomp() throws FileSystemException {
151 final MyFileOperationProviderBase myop = new MyFileOperationProviderNoncomp();
152 manager.addOperationProvider("file", myop);
153 final FileOperationProvider[] ops = manager.getOperationProviders("file");
154 assertSame(1, ops.length, "exactly one provider registered");
155 assertSame(myop, ops[0]);
156 assertEquals(0, myop.ops);
157 }
158
159
160
161
162
163
164 @Test
165 public void testNotFoundAny() throws FileSystemException {
166 final MyFileOperationProviderBase myop = new MyFileOperationProviderNoncomp();
167 manager.addOperationProvider("file", myop);
168 try (final FileObject fo = manager.toFileObject(new File("."))) {
169
170 final FileOperations ops = fo.getFileOperations();
171 assertNotNull(ops);
172
173 final Class<? extends FileOperation>[] oparray = ops.getOperations();
174 assertSame(0, oparray.length, "no ops should be found");
175 assertSame(16, myop.ops);
176 }
177 }
178
179
180
181
182
183
184 @Test
185 public void testNotFoundOperation() throws FileSystemException {
186 final MyFileOperationProviderBase myop = new MyFileOperationProviderNoncomp();
187 manager.addOperationProvider("file", myop);
188 try (final FileObject fo = manager.toFileObject(new File("."))) {
189
190 final FileOperations ops = fo.getFileOperations();
191 assertNotNull(ops);
192
193 final FileSystemException thrown = assertThrows(FileSystemException.class, () -> ops.getOperation(VcsLog.class));
194 assertEquals("vfs.operation/operation-not-supported.error", thrown.getCode());
195 assertSame(32, myop.ops);
196 }
197 }
198
199 }