-
Notifications
You must be signed in to change notification settings - Fork 10
Expand file tree
/
Copy pathAppMapFileLookupTest.java
More file actions
113 lines (94 loc) · 4.7 KB
/
Copy pathAppMapFileLookupTest.java
File metadata and controls
113 lines (94 loc) · 4.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
package appland.files;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.util.Disposer;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.GlobalSearchScopes;
import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixture4TestCase;
import org.junit.Test;
import java.util.Arrays;
import java.util.Collections;
public class AppMapFileLookupTest extends LightPlatformCodeInsightFixture4TestCase {
@Test
public void extensionLookup() {
var base = myFixture.configureByText("a.txt", "").getVirtualFile();
// file not in project
var notFound = FileLookup.findRelativeFile(getProject(), base, "external/file.txt");
assertNull(notFound);
// Register extension
Disposable disposable = Disposer.newDisposable();
try {
AppMapFileLookup.EP_NAME.getPoint().registerExtension((project, data) -> {
if ("external/file.txt".equals(data.relativePath())) {
return base; // return base file as mock result
}
return null;
}, disposable);
var found = FileLookup.findRelativeFile(getProject(), base, "external/file.txt");
assertEquals(base, found);
} finally {
Disposer.dispose(disposable);
}
}
@Test
public void genericLookup() {
var target = myFixture.addFileToProject("libs/dep/src/org/example/Lib.java", "").getVirtualFile();
var lookup = new AppMapGenericFileLookup();
var data = new AppMapFileLookup.Data("org/example/Lib.java", null);
var found = lookup.findFile(getProject(), data);
assertEquals(target, found);
}
@Test
public void locateFilenameByRelativePath() {
PsiFile base = myFixture.configureByText("a.txt", "");
var bestResult = myFixture.addFileToProject("dir/subdir1/subdir2/searched-file.txt", "");
var located = FileLookup.findRelativeFile(getProject(), base.getVirtualFile(), "dir/subdir1/subdir2/searched-file.txt");
assertEquals(bestResult.getVirtualFile(), located);
}
@Test
public void locateFilenameByIndex() {
PsiFile base = myFixture.configureByText("a.txt", "");
myFixture.addFileToProject("searched-file.txt", "");
myFixture.addFileToProject("dir/searched-file.txt", "");
myFixture.addFileToProject("dir/subdir1/searched-file.txt", "");
var bestResult = myFixture.addFileToProject("dir/subdir1/subdir2/searched-file.txt", "");
var located = FileLookup.findRelativeFile(getProject(), base.getVirtualFile(), "subdir2/searched-file.txt");
assertEquals(bestResult.getVirtualFile(), located);
}
@Test
public void scopedLocateFilenameByIndex() {
PsiFile base = myFixture.configureByText("a.txt", "");
myFixture.addFileToProject("file.txt", "");
myFixture.addFileToProject("dirA/subdir/file.txt", "");
var subdirB = myFixture.addFileToProject("dirB/file.txt", "").getVirtualFile().getParent();
var bestResult = myFixture.addFileToProject("dirB/subdir/file.txt", "");
myFixture.addFileToProject("dirB/subdir/subdir/file.txt", "");
var located = FileLookup.findRelativeFile(getProject(),
GlobalSearchScopes.directoryScope(getProject(), subdirB, true),
base.getVirtualFile(),
"subdir/file.txt");
assertEquals(bestResult.getVirtualFile(), located);
}
@Test
public void filename() {
assertEquals("file.txt", FileLookup.filename("file.txt"));
assertEquals("file.txt", FileLookup.filename("dir/file.txt"));
assertEquals("file.txt", FileLookup.filename("dir/subdir/file.txt"));
assertEquals("file.txt", FileLookup.filename("/dir/subdir/file.txt"));
}
@Test
public void parents() {
assertTrue(FileLookup.parentsReversed("file.txt").isEmpty());
assertEquals(Collections.singletonList("dir"), FileLookup.parentsReversed("dir/file.txt"));
assertEquals(Arrays.asList("subdir", "dir"), FileLookup.parentsReversed("dir/subdir/file.txt"));
assertEquals(Arrays.asList("subdir2", "subdir", "dir"), FileLookup.parentsReversed("dir/subdir/subdir2/file.txt"));
}
@Test
public void windowsAbsolutePath() {
assertTrue(FileLookup.isAbsolutePath("C:\\Apps\\Ruby\\file.rb", true));
assertTrue(FileLookup.isAbsolutePath("C:/Apps//Ruby//file.rb", true));
assertFalse(FileLookup.isAbsolutePath("\\Apps\\Ruby\\file.rb", true));
assertFalse(FileLookup.isAbsolutePath("\\Apps\\Ruby\\file.rb", true));
assertFalse(FileLookup.isAbsolutePath("Apps/Ruby/file.rb", true));
assertFalse(FileLookup.isAbsolutePath("x/Ruby/file.rb", true));
}
}