/
ProjectChangeMonitor_PDETest.java
116 lines (85 loc) · 3.34 KB
/
ProjectChangeMonitor_PDETest.java
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
114
115
116
package net.sf.eclipsefp.haskell.core.halamo;
import static org.easymock.EasyMock.anyObject;
import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import net.sf.eclipsefp.haskell.core.internal.project.HaskellProject_PDETestCase;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResourceChangeListener;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
/**
* The ResourceChangeMonitor is responsible for keeping the language model
* up-to-date. Here we check if it is calling the expected methods for updating
* the model.
*
* @author Thiago Arrais - thiago.arrais@gmail.com
*/
public class ProjectChangeMonitor_PDETest extends HaskellProject_PDETestCase {
private IHaskellModel fLanguageModel;
private IResourceChangeListener fMonitor;
@Override
protected void setUpMore() throws Exception {
fLanguageModel = createMock(IHaskellModel.class);
fMonitor = new ProjectChangeMonitor(getLanguageModel());
getWorkspace().addResourceChangeListener(getMonitor());
}
public void testAddModule() throws CoreException {
getLanguageModel().putModule((IModule) anyObject());
expectLastCall().atLeastOnce();
replay(getLanguageModel());
createSourceFile("module QuickSort where\n\n", "QuickSort.hs");
verify(getLanguageModel());
}
public void testChangeModule() throws CoreException {
getLanguageModel().putModule((IModule) anyObject());
expectLastCall().times(2);
replay(getLanguageModel());
IFile file = createSourceFile("module QuickSort where\n\n", "QuickSort.hs");
byte[] bytes = "module QuickSort where\n\n".getBytes();
InputStream is = new ByteArrayInputStream( bytes );
file.setContents( is, true, false, null );
verify(getLanguageModel());
}
public void testRemoveModule() throws CoreException {
getLanguageModel().putModule((IModule) anyObject());
getLanguageModel().removeModule("QuickSort");
replay(getLanguageModel());
IFile file = createSourceFile("module QuickSort where\n\n", "QuickSort.hs");
file.delete(true, null);
verify(getLanguageModel());
}
public void testRemoveLiterateModule() throws CoreException {
getLanguageModel().putModule((IModule) anyObject());
getLanguageModel().removeModule("Factorial");
replay(getLanguageModel());
IFile file = createSourceFile("> module Factorial where\n\n", "Factorial.lhs");
file.delete(true, null);
verify(getLanguageModel());
}
public void testDoNotRemoveModuleWhenDeletingNonHaskellFile() throws CoreException {
getLanguageModel().putModule((IModule) anyObject());
replay(getLanguageModel());
createSourceFile("module ReadMe where\n\n", "Readme.hs");
IFile nonHaskellfile = createSourceFile("read this!", "Readme.tx");
nonHaskellfile.delete(true, null);
verify(getLanguageModel());
}
@Override
protected void doTearDown() throws Exception {
getWorkspace().removeResourceChangeListener(getMonitor());
}
private IWorkspace getWorkspace() {
return ResourcesPlugin.getWorkspace();
}
private IHaskellModel getLanguageModel() {
return fLanguageModel;
}
private IResourceChangeListener getMonitor() {
return fMonitor;
}
}