Lines 12-28
Link Here
|
12 |
*/ |
12 |
*/ |
13 |
|
13 |
|
14 |
package org.netbeans.api.project; |
14 |
package org.netbeans.api.project; |
15 |
|
|
|
16 |
import java.io.OutputStream; |
15 |
import java.io.OutputStream; |
|
|
16 |
import java.lang.ref.WeakReference; |
17 |
import java.net.URI; |
17 |
import java.net.URI; |
18 |
import java.util.zip.CRC32; |
18 |
import java.util.zip.CRC32; |
19 |
import java.util.zip.ZipEntry; |
19 |
import java.util.zip.ZipEntry; |
20 |
import java.util.zip.ZipOutputStream; |
20 |
import java.util.zip.ZipOutputStream; |
21 |
import org.netbeans.junit.NbTestCase; |
21 |
import org.netbeans.junit.NbTestCase; |
|
|
22 |
import org.netbeans.modules.projectapi.TimedWeakReference; |
22 |
import org.openide.filesystems.FileLock; |
23 |
import org.openide.filesystems.FileLock; |
23 |
import org.openide.filesystems.FileObject; |
24 |
import org.openide.filesystems.FileObject; |
24 |
import org.openide.filesystems.FileUtil; |
25 |
import org.openide.filesystems.FileUtil; |
25 |
import org.openide.util.Lookup; |
|
|
26 |
|
26 |
|
27 |
/** |
27 |
/** |
28 |
* Test functionality of FileOwnerQuery. |
28 |
* Test functionality of FileOwnerQuery. |
Lines 34-39
Link Here
|
34 |
super(name); |
34 |
super(name); |
35 |
} |
35 |
} |
36 |
|
36 |
|
|
|
37 |
static { |
38 |
TimedWeakReference.TIMEOUT = 0; |
39 |
} |
40 |
|
37 |
private FileObject scratch; |
41 |
private FileObject scratch; |
38 |
private FileObject projdir; |
42 |
private FileObject projdir; |
39 |
private FileObject randomfile; |
43 |
private FileObject randomfile; |
Lines 156-161
Link Here
|
156 |
assertEquals("but subprojects are not part of it", ProjectManager.getDefault().findProject(ext3subproj), p3); |
160 |
assertEquals("but subprojects are not part of it", ProjectManager.getDefault().findProject(ext3subproj), p3); |
157 |
FileOwnerQuery.markExternalOwner(ext3, null, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
161 |
FileOwnerQuery.markExternalOwner(ext3, null, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
158 |
assertEquals("unmarking an owner works", null, FileOwnerQuery.getOwner(ext3)); |
162 |
assertEquals("unmarking an owner works", null, FileOwnerQuery.getOwner(ext3)); |
|
|
163 |
} |
164 |
|
165 |
public void testExternalOwnerFile() throws Exception { |
166 |
FileObject ext1 = scratch.getFileObject("external1"); |
167 |
FileObject extfile1 = ext1.getFileObject("subdir/file"); |
168 |
assertEquals("no owner yet", null, FileOwnerQuery.getOwner(extfile1)); |
169 |
FileOwnerQuery.markExternalOwner(extfile1, p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
170 |
assertEquals("now have an owner", p, FileOwnerQuery.getOwner(extfile1)); |
171 |
assertEquals("not for the projdir", null, FileOwnerQuery.getOwner(ext1)); |
172 |
assertEquals("and not for something else", null, FileOwnerQuery.getOwner(scratch)); |
173 |
FileObject ext2 = scratch.getFileObject("external2"); |
174 |
FileObject extfile2 = ext2.getFileObject("subdir/file"); |
175 |
assertEquals("no owner yet", null, FileOwnerQuery.getOwner(extfile2)); |
176 |
Project p2 = ProjectManager.getDefault().findProject(subprojdir); |
177 |
FileOwnerQuery.markExternalOwner(extfile2, p2, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
178 |
assertEquals("now have an owner", p2, FileOwnerQuery.getOwner(extfile2)); |
179 |
assertEquals("not for the projdir", null, FileOwnerQuery.getOwner(ext2)); |
180 |
assertEquals("and not for something else", null, FileOwnerQuery.getOwner(scratch)); |
181 |
assertEquals("still correct for first proj", p, FileOwnerQuery.getOwner(extfile1)); |
182 |
|
183 |
//XXX: unmarking files. |
184 |
} |
185 |
|
186 |
public void testExternalOwnerURI() throws Exception { |
187 |
FileObject ext1 = scratch.getFileObject("external1"); |
188 |
FileObject extfile1 = ext1.getFileObject("subdir/file"); |
189 |
assertEquals("no owner yet through FileObjects", null, FileOwnerQuery.getOwner(extfile1)); |
190 |
assertEquals("no owner yet through URI", null, FileOwnerQuery.getOwner(extfile1)); |
191 |
FileOwnerQuery.markExternalOwner(fileObject2URI(ext1), p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
192 |
assertEquals("now have an owner through FileObjects", p, FileOwnerQuery.getOwner(extfile1)); |
193 |
assertEquals("now have an owner through URI", p, FileOwnerQuery.getOwner(fileObject2URI(extfile1))); |
194 |
assertEquals("even for the projdir throught FileObjects", p, FileOwnerQuery.getOwner(ext1)); |
195 |
assertEquals("even for the projdir throught URI", p, FileOwnerQuery.getOwner(fileObject2URI(ext1))); |
196 |
assertEquals("but not for something else throught FileObjects", null, FileOwnerQuery.getOwner(scratch)); |
197 |
assertEquals("but not for something else throught URI", null, FileOwnerQuery.getOwner(fileObject2URI(scratch))); |
198 |
FileObject ext2 = scratch.getFileObject("external2"); |
199 |
FileObject extfile2 = ext2.getFileObject("subdir/file"); |
200 |
assertEquals("no owner yet through FileObjects", null, FileOwnerQuery.getOwner(extfile2)); |
201 |
assertEquals("no owner yet through URI", null, FileOwnerQuery.getOwner(fileObject2URI(extfile2))); |
202 |
Project p2 = ProjectManager.getDefault().findProject(subprojdir); |
203 |
FileOwnerQuery.markExternalOwner(fileObject2URI(ext2), p2, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
204 |
assertEquals("now have an owner through FileObjects", p2, FileOwnerQuery.getOwner(extfile2)); |
205 |
assertEquals("now have an owner through URI", p2, FileOwnerQuery.getOwner(fileObject2URI(extfile2))); |
206 |
assertEquals("even for the projdir through FileObjects", p2, FileOwnerQuery.getOwner(ext2)); |
207 |
assertEquals("even for the projdir through URI", p2, FileOwnerQuery.getOwner(ext2)); |
208 |
assertEquals("but not for something else through FileObjects", null, FileOwnerQuery.getOwner(scratch)); |
209 |
assertEquals("but not for something else through URI", null, FileOwnerQuery.getOwner(fileObject2URI(scratch))); |
210 |
assertEquals("still correct for first proj through FileObjects", p, FileOwnerQuery.getOwner(extfile1)); |
211 |
assertEquals("still correct for first proj through URI", p, FileOwnerQuery.getOwner(fileObject2URI(extfile1))); |
212 |
FileObject ext3 = scratch.getFileObject("external3"); |
213 |
assertEquals("no owner yet through FileObjects", null, FileOwnerQuery.getOwner(ext3)); |
214 |
assertEquals("no owner yet through URI", null, FileOwnerQuery.getOwner(fileObject2URI(ext3))); |
215 |
FileOwnerQuery.markExternalOwner(fileObject2URI(ext3), p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
216 |
assertEquals("now have an owner through FileObjects", p, FileOwnerQuery.getOwner(ext3)); |
217 |
assertEquals("now have an owner through URI", p, FileOwnerQuery.getOwner(fileObject2URI(ext3))); |
218 |
FileObject ext3subproj = ext3.getFileObject("subproject"); |
219 |
Project p3 = FileOwnerQuery.getOwner(ext3subproj); |
220 |
assertNotSame("different project", p, p3); |
221 |
assertEquals("but subprojects are not part of it", ProjectManager.getDefault().findProject(ext3subproj), p3); |
222 |
FileOwnerQuery.markExternalOwner(fileObject2URI(ext3), null, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
223 |
assertEquals("unmarking an owner works through FileObjects", null, FileOwnerQuery.getOwner(ext3)); |
224 |
assertEquals("unmarking an owner works through URI", null, FileOwnerQuery.getOwner(fileObject2URI(ext3))); |
225 |
} |
226 |
|
227 |
public void testExternalOwnerFileURI() throws Exception { |
228 |
FileObject ext1 = scratch.getFileObject("external1"); |
229 |
FileObject extfile1 = ext1.getFileObject("subdir/file"); |
230 |
assertEquals("no owner yet through FileObjects", null, FileOwnerQuery.getOwner(extfile1)); |
231 |
assertEquals("no owner yet through URI", null, FileOwnerQuery.getOwner(fileObject2URI(extfile1))); |
232 |
FileOwnerQuery.markExternalOwner(fileObject2URI(extfile1), p, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
233 |
assertEquals("now have an owner through FileObjects", p, FileOwnerQuery.getOwner(extfile1)); |
234 |
assertEquals("now have an owner through URI", p, FileOwnerQuery.getOwner(fileObject2URI(extfile1))); |
235 |
assertEquals("not for the projdir through FileObjects", null, FileOwnerQuery.getOwner(ext1)); |
236 |
assertEquals("not for the projdir through URI", null, FileOwnerQuery.getOwner(fileObject2URI(ext1))); |
237 |
assertEquals("and not for something else through FileObjects", null, FileOwnerQuery.getOwner(scratch)); |
238 |
assertEquals("and not for something else through URI", null, FileOwnerQuery.getOwner(fileObject2URI(scratch))); |
239 |
FileObject ext2 = scratch.getFileObject("external2"); |
240 |
FileObject extfile2 = ext2.getFileObject("subdir/file"); |
241 |
assertEquals("no owner yet through FileObjects", null, FileOwnerQuery.getOwner(extfile2)); |
242 |
assertEquals("no owner yet through URI", null, FileOwnerQuery.getOwner(fileObject2URI(extfile2))); |
243 |
Project p2 = ProjectManager.getDefault().findProject(subprojdir); |
244 |
FileOwnerQuery.markExternalOwner(fileObject2URI(extfile2), p2, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
245 |
assertEquals("now have an owner through FileObjects", p2, FileOwnerQuery.getOwner(extfile2)); |
246 |
assertEquals("now have an owner through URI", p2, FileOwnerQuery.getOwner(fileObject2URI(extfile2))); |
247 |
assertEquals("not for the projdir through FileObjects", null, FileOwnerQuery.getOwner(ext2)); |
248 |
assertEquals("not for the projdir through URI", null, FileOwnerQuery.getOwner(fileObject2URI(ext2))); |
249 |
assertEquals("and not for something else through FileObjects", null, FileOwnerQuery.getOwner(scratch)); |
250 |
assertEquals("and not for something else through URI", null, FileOwnerQuery.getOwner(fileObject2URI(scratch))); |
251 |
assertEquals("still correct for first proj through FileObjects", p, FileOwnerQuery.getOwner(extfile1)); |
252 |
assertEquals("still correct for first proj through URI", p, FileOwnerQuery.getOwner(fileObject2URI(extfile1))); |
253 |
|
254 |
//XXX: unmarking files. |
255 |
} |
256 |
|
257 |
public void testIsProjectDirCollectable() throws Exception { |
258 |
Project p2 = ProjectManager.getDefault().findProject(subprojdir); |
259 |
FileObject root = p2.getProjectDirectory(); |
260 |
FileObject ext2 = scratch.getFileObject("external2"); |
261 |
FileObject extfile2 = ext2.getFileObject("subdir/file"); |
262 |
|
263 |
FileOwnerQuery.markExternalOwner(fileObject2URI(extfile2), p2, FileOwnerQuery.EXTERNAL_ALGORITHM_TRANSIENT); |
264 |
|
265 |
WeakReference p2WR = new WeakReference(p2); |
266 |
WeakReference rootWR = new WeakReference(root); |
267 |
|
268 |
p2 = null; |
269 |
root = null; |
270 |
ext2 = null; |
271 |
extfile2 = null; |
272 |
subprojdir = null; |
273 |
subprojfile = null; |
274 |
|
275 |
assertGC("project 2 collected", p2WR); |
276 |
assertGC("project 2's project dir collected", rootWR); |
277 |
} |
278 |
|
279 |
private static URI fileObject2URI(FileObject f) throws Exception { |
280 |
return URI.create(f.getURL().toString()); |
159 |
} |
281 |
} |
160 |
|
282 |
|
161 |
// XXX test URI usage of external owner |
283 |
// XXX test URI usage of external owner |