Lines 42-57
Link Here
|
42 |
|
42 |
|
43 |
package org.netbeans.modules.project.uiapi; |
43 |
package org.netbeans.modules.project.uiapi; |
44 |
|
44 |
|
|
|
45 |
import java.io.IOException; |
45 |
import java.nio.charset.Charset; |
46 |
import java.nio.charset.Charset; |
46 |
import java.util.Collections; |
47 |
import java.util.Collections; |
47 |
import java.util.HashMap; |
48 |
import java.util.HashMap; |
48 |
import java.util.Map; |
49 |
import java.util.Map; |
|
|
50 |
import org.netbeans.api.project.Project; |
51 |
import org.netbeans.api.project.ProjectManager; |
49 |
import org.netbeans.api.project.TestUtil; |
52 |
import org.netbeans.api.project.TestUtil; |
50 |
import org.netbeans.api.queries.FileEncodingQuery; |
53 |
import org.netbeans.api.queries.FileEncodingQuery; |
|
|
54 |
import org.netbeans.api.templates.CreateDescriptor; |
55 |
import org.netbeans.api.templates.CreateFromTemplateAttributes; |
56 |
import org.netbeans.api.templates.FileBuilder; |
51 |
import org.netbeans.junit.NbTestCase; |
57 |
import org.netbeans.junit.NbTestCase; |
|
|
58 |
import org.netbeans.spi.project.ProjectFactory; |
59 |
import org.netbeans.spi.project.ProjectState; |
52 |
import org.netbeans.spi.queries.FileEncodingQueryImplementation; |
60 |
import org.netbeans.spi.queries.FileEncodingQueryImplementation; |
53 |
import org.openide.filesystems.FileObject; |
61 |
import org.openide.filesystems.FileObject; |
|
|
62 |
import org.openide.filesystems.FileUtil; |
63 |
import org.openide.loaders.CreateFromTemplateAttributesProvider; |
64 |
import org.openide.loaders.DataFolder; |
65 |
import org.openide.loaders.DataObject; |
66 |
import org.openide.util.Lookup; |
54 |
import org.openide.util.NbCollections; |
67 |
import org.openide.util.NbCollections; |
|
|
68 |
import org.openide.util.lookup.Lookups; |
55 |
import org.openide.util.test.MockLookup; |
69 |
import org.openide.util.test.MockLookup; |
56 |
|
70 |
|
57 |
/** |
71 |
/** |
Lines 62-67
Link Here
|
62 |
|
76 |
|
63 |
private FileObject scratch; |
77 |
private FileObject scratch; |
64 |
private FileObject folder; |
78 |
private FileObject folder; |
|
|
79 |
private FileObject projdir; |
65 |
|
80 |
|
66 |
public ProjectTemplateAttributesProviderTest(String testName) { |
81 |
public ProjectTemplateAttributesProviderTest(String testName) { |
67 |
super(testName); |
82 |
super(testName); |
Lines 72-81
Link Here
|
72 |
super.setUp(); |
87 |
super.setUp(); |
73 |
scratch = TestUtil.makeScratchDir(this); |
88 |
scratch = TestUtil.makeScratchDir(this); |
74 |
folder = scratch.createFolder("folder"); |
89 |
folder = scratch.createFolder("folder"); |
75 |
MockLookup.setInstances(new FEQImpl()); |
90 |
|
|
|
91 |
projdir = scratch.createFolder("proj"); |
92 |
|
93 |
createProject(projdir); |
94 |
|
95 |
MockLookup.setInstances(new FEQImpl(), new TestProjectFactory()); |
76 |
assertEquals(FEQImpl.ENCODING, FileEncodingQuery.getEncoding(folder).name()); |
96 |
assertEquals(FEQImpl.ENCODING, FileEncodingQuery.getEncoding(folder).name()); |
77 |
} |
97 |
} |
78 |
|
98 |
|
|
|
99 |
private void createProject(FileObject projdir) throws Exception { |
100 |
TestUtil.createFileFromContent(ProjectTemplateAttributesProviderTest.class.getResource("data/test.txt"), projdir, "nbproject/test.txt"); |
101 |
TestUtil.createFileFromContent(ProjectTemplateAttributesProviderTest.class.getResource("data/test.txt"), projdir, "src/test/test.txt"); |
102 |
} |
103 |
|
104 |
/** |
105 |
* Checks that the attribute providers execute in the correct order and see other provider's data. |
106 |
* Legacy providers should execute first. New providers should execute after that. Each new-style |
107 |
* provider should see all attributes defined by previous providers (legacy or new). |
108 |
* |
109 |
* @throws Exception |
110 |
*/ |
111 |
public void testProjectAttributeProviders() throws Exception { |
112 |
Project prj = ProjectManager.getDefault().findProject(projdir); |
113 |
FileObject folder = projdir.getFileObject("nbproject"); |
114 |
FileObject template = FileUtil.toFileObject(getDataDir()).getFileObject("file.txt"); |
115 |
Map<String, Object> init = new HashMap(); |
116 |
init.put("mama", "se raduje"); |
117 |
FileObject result = FileBuilder.createFromTemplate(template, folder, "honza", init, FileBuilder.Mode.FORMAT); |
118 |
|
119 |
assertEquals( |
120 |
"Jedna, 2, Honza jde. Nese 2 pytle s brouky. Mama se raduje, ze bude pect vdolky.\n", |
121 |
result.asText()); |
122 |
} |
123 |
|
124 |
|
79 |
public void testCheckProjectAttrs() throws Exception { |
125 |
public void testCheckProjectAttrs() throws Exception { |
80 |
Map<String, ? extends Object> checked = ProjectTemplateAttributesProvider.checkProjectAttrs(null, folder); |
126 |
Map<String, ? extends Object> checked = ProjectTemplateAttributesProvider.checkProjectAttrs(null, folder); |
81 |
assertAttribute("default", checked, "license"); |
127 |
assertAttribute("default", checked, "license"); |
Lines 128-131
Link Here
|
128 |
return null; |
174 |
return null; |
129 |
} |
175 |
} |
130 |
} |
176 |
} |
|
|
177 |
|
178 |
private static final class AttrProv1 implements CreateFromTemplateAttributes { |
179 |
|
180 |
@Override |
181 |
public Map<String, ?> attributesFor(CreateDescriptor desc) { |
182 |
Map<String, Object> m = new HashMap<String, Object>(); |
183 |
m.put("jedna", 2); // used by Prov2 |
184 |
m.put("dve", "Honza jde"); |
185 |
return m; |
186 |
} |
187 |
|
188 |
} |
189 |
|
190 |
private static final class AttrProv2 implements CreateFromTemplateAttributes { |
191 |
@Override |
192 |
public Map<String, ?> attributesFor(CreateDescriptor desc) { |
193 |
String s = desc.getValue("pytel"); |
194 |
s += " brouky"; |
195 |
Map m = new HashMap(); |
196 |
m.put("pytel", s); // replace /append to legacy-provided value |
197 |
m.put("nese", desc.getValue("jedna")); // copy previous value |
198 |
return m; |
199 |
} |
200 |
} |
201 |
|
202 |
private static final class AttrProvLegacy implements CreateFromTemplateAttributesProvider { |
203 |
@Override |
204 |
public Map<String, ?> attributesFor(DataObject template, DataFolder target, String name) { |
205 |
Map m = new HashMap(); |
206 |
m.put("pytel", "s"); // appended by Prov2 |
207 |
m.put("bude", "bude pect vdolky"); |
208 |
return m; |
209 |
} |
210 |
} |
211 |
|
212 |
private static final class TestProject implements Project { |
213 |
|
214 |
private final Lookup l; |
215 |
private final FileObject projectDirectory; |
216 |
|
217 |
TestProject(FileObject projectDirectory) throws IOException { |
218 |
l = Lookups.fixed(new AttrProv1(), new AttrProv2(), new AttrProvLegacy()); |
219 |
this.projectDirectory = projectDirectory; |
220 |
} |
221 |
|
222 |
public FileObject getProjectDirectory() { |
223 |
return projectDirectory; |
224 |
} |
225 |
|
226 |
public Lookup getLookup() { |
227 |
return l; |
228 |
} |
229 |
|
230 |
public String toString() { |
231 |
return "TestAntBasedProject[" + getProjectDirectory() + "]"; |
232 |
} |
233 |
|
234 |
} |
235 |
|
236 |
public static class TestProjectFactory implements ProjectFactory { |
237 |
|
238 |
public boolean isProject(FileObject projectDirectory) { |
239 |
return projectDirectory.getFileObject("nbproject") != null; |
240 |
} |
241 |
|
242 |
public Project loadProject(FileObject projectDirectory, ProjectState state) throws IOException { |
243 |
if (isProject(projectDirectory)) |
244 |
return new TestProject(projectDirectory); |
245 |
|
246 |
return null; |
247 |
} |
248 |
|
249 |
public void saveProject(Project project) throws IOException, ClassCastException { |
250 |
} |
251 |
|
252 |
} |
131 |
} |
253 |
} |