Skip to content

Commit 65635ff

Browse files
committed
#1419 add unit test for the project properties serialization
1 parent 098ecd2 commit 65635ff

File tree

4 files changed

+149
-34
lines changed

4 files changed

+149
-34
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package net.sourceforge.pmd.eclipse.runtime.properties.impl;
2+
3+
import org.apache.commons.io.IOUtils;
4+
import org.junit.Assert;
5+
import org.junit.Test;
6+
7+
public class ProjectPropertiesManagerImplTest {
8+
9+
private ProjectPropertiesManagerImpl manager = new ProjectPropertiesManagerImpl();
10+
11+
@Test
12+
public void testToString() throws Exception {
13+
ProjectPropertiesTO projectProperties = createProjectProperties();
14+
String expected = IOUtils.toString(this.getClass().getResourceAsStream("projectproperties.xml"));
15+
16+
String s = manager.convertProjectPropertiesToString(projectProperties);
17+
Assert.assertEquals(expected, s);
18+
}
19+
20+
@Test
21+
public void testFromString() throws Exception {
22+
String input = IOUtils.toString(this.getClass().getResourceAsStream("projectproperties.xml"));
23+
ProjectPropertiesTO projectProperties = manager.convertProjectPropertiesFromString(input);
24+
ProjectPropertiesTO expected = createProjectProperties();
25+
26+
Assert.assertArrayEquals(expected.getExcludePatterns(), projectProperties.getExcludePatterns());
27+
Assert.assertEquals(expected.isFullBuildEnabled(), projectProperties.isFullBuildEnabled());
28+
Assert.assertEquals(expected.isIncludeDerivedFiles(), projectProperties.isIncludeDerivedFiles());
29+
Assert.assertArrayEquals(expected.getIncludePatterns(), projectProperties.getIncludePatterns());
30+
Assert.assertEquals(expected.getRuleSetFile(), projectProperties.getRuleSetFile());
31+
Assert.assertEquals(expected.isRuleSetStoredInProject(), projectProperties.isRuleSetStoredInProject());
32+
Assert.assertEquals(expected.isViolationsAsErrors(), projectProperties.isViolationsAsErrors());
33+
Assert.assertEquals(expected.getWorkingSetName(), projectProperties.getWorkingSetName());
34+
35+
Assert.assertEquals(expected.getRules().length, projectProperties.getRules().length);
36+
for (int i = 0; i < expected.getRules().length; i++) {
37+
Assert.assertEquals(expected.getRules()[i].getName(), projectProperties.getRules()[i].getName());
38+
Assert.assertEquals(expected.getRules()[i].getRuleSetName(), projectProperties.getRules()[i].getRuleSetName());
39+
}
40+
}
41+
42+
private ProjectPropertiesTO createProjectProperties() {
43+
ProjectPropertiesTO projectProperties = new ProjectPropertiesTO();
44+
projectProperties.setExcludePatterns(new String[] { ".project" });
45+
projectProperties.setFullBuildEnabled(true);
46+
projectProperties.setIncludeDerivedFiles(false);
47+
projectProperties.setIncludePatterns(new String[] { "*.java" });
48+
projectProperties.setRuleSetFile("rulesetfile");
49+
projectProperties.setRuleSetStoredInProject(true);
50+
projectProperties.setViolationsAsErrors(false);
51+
projectProperties.setWorkingSetName("workingsetname");
52+
projectProperties.setRules(new RuleSpecTO[] { createRule("JumbledIncrementer", "java-basic"),
53+
createRule("ForLoopShouldBeWhileLoop", "java-basic") });
54+
return projectProperties;
55+
}
56+
57+
private RuleSpecTO createRule(String name, String rulesetname) {
58+
RuleSpecTO rulespec = new RuleSpecTO();
59+
rulespec.setName(name);
60+
rulespec.setRuleSetName(rulesetname);
61+
return rulespec;
62+
}
63+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<pmd>
3+
<workingSet>workingsetname</workingSet>
4+
<useProjectRuleSet>true</useProjectRuleSet>
5+
<ruleSetFile>rulesetfile</ruleSetFile>
6+
<excludePatterns>
7+
<excludePattern>.project</excludePattern>
8+
</excludePatterns>
9+
<includePatterns>
10+
<includePattern>*.java</includePattern>
11+
</includePatterns>
12+
<rules>
13+
<rule>
14+
<name>JumbledIncrementer</name>
15+
<ruleset>java-basic</ruleset>
16+
</rule>
17+
<rule>
18+
<name>ForLoopShouldBeWhileLoop</name>
19+
<ruleset>java-basic</ruleset>
20+
</rule>
21+
</rules>
22+
<includeDerivedFiles>false</includeDerivedFiles>
23+
<violationsAsErrors>false</violationsAsErrors>
24+
<fullBuildEnabled>true</fullBuildEnabled>
25+
</pmd>

net.sourceforge.pmd.eclipse.plugin/META-INF/MANIFEST.MF

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,7 @@ Export-Package: name.herlin.command,
109109
net.sourceforge.pmd.eclipse.runtime.cmd,
110110
net.sourceforge.pmd.eclipse.runtime.preferences,
111111
net.sourceforge.pmd.eclipse.runtime.properties;uses:="org.eclipse.ui,org.eclipse.core.resources,net.sourceforge.pmd",
112+
net.sourceforge.pmd.eclipse.runtime.properties.impl;x-internal:=true,
112113
net.sourceforge.pmd.eclipse.runtime.writer;uses:="net.sourceforge.pmd.lang.java.ast,net.sourceforge.pmd",
113114
net.sourceforge.pmd.eclipse.ui,
114115
net.sourceforge.pmd.eclipse.ui.actions;
@@ -158,4 +159,5 @@ Export-Package: name.herlin.command,
158159
net.sourceforge.pmd.renderers,
159160
net.sourceforge.pmd.util;uses:="net.sourceforge.pmd.lang.java.ast",
160161
net.sourceforge.pmd.util.datasource,
162+
org.apache.commons.io;x-internal:=true,
161163
org.apache.log4j;uses:="org.apache.log4j.helpers,org.apache.log4j.or,org.apache.log4j.spi"

net.sourceforge.pmd.eclipse.plugin/src/main/java/net/sourceforge/pmd/eclipse/runtime/properties/impl/ProjectPropertiesManagerImpl.java

Lines changed: 59 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@
4040
import java.io.IOException;
4141
import java.io.InputStreamReader;
4242
import java.io.Reader;
43+
import java.io.StringReader;
4344
import java.io.StringWriter;
4445
import java.net.URL;
4546
import java.util.ArrayList;
@@ -59,6 +60,7 @@
5960
import net.sourceforge.pmd.eclipse.runtime.properties.PropertiesException;
6061
import net.sourceforge.pmd.eclipse.util.IOUtil;
6162

63+
import org.apache.commons.io.IOUtils;
6264
import org.apache.log4j.Logger;
6365
import org.eclipse.core.resources.IFile;
6466
import org.eclipse.core.resources.IProject;
@@ -167,26 +169,18 @@ private void loadRuleSetFromProject(IProjectProperties projectProperties) throws
167169
}
168170
}
169171

170-
/**
171-
* Read a project properties from properties file
172-
*
173-
* @param project a project
174-
*/
175-
private ProjectPropertiesTO readProjectProperties(final IProject project) throws PropertiesException {
172+
public ProjectPropertiesTO convertProjectPropertiesFromString(String properties)
173+
throws PropertiesException {
176174
ProjectPropertiesTO projectProperties = null;
177175
Reader reader = null;
178176
try {
179177
final Mapping mapping = new Mapping(this.getClass().getClassLoader());
180178
final URL mappingSpecUrl = this.getClass().getResource(PROPERTIES_MAPPING);
181179
mapping.loadMapping(mappingSpecUrl);
182180

183-
final IFile propertiesFile = project.getFile(PROPERTIES_FILE);
184-
if (propertiesFile.exists() && propertiesFile.isAccessible()) {
185-
reader = new InputStreamReader(propertiesFile.getContents());
186-
final Unmarshaller unmarshaller = new Unmarshaller(mapping);
187-
projectProperties = (ProjectPropertiesTO) unmarshaller.unmarshal(reader);
188-
reader.close();
189-
}
181+
reader = new StringReader(properties);
182+
final Unmarshaller unmarshaller = new Unmarshaller(mapping);
183+
projectProperties = (ProjectPropertiesTO) unmarshaller.unmarshal(reader);
190184
} catch (MarshalException e) {
191185
throw new PropertiesException(e);
192186
} catch (ValidationException e) {
@@ -195,14 +189,35 @@ private ProjectPropertiesTO readProjectProperties(final IProject project) throws
195189
throw new PropertiesException(e);
196190
} catch (MappingException e) {
197191
throw new PropertiesException(e);
198-
} catch (CoreException e) {
199-
throw new PropertiesException(e);
200192
} finally {
201-
IOUtil.closeQuietly(reader);
193+
IOUtil.closeQuietly(reader);
202194
}
203195

204196
return projectProperties;
205197
}
198+
/**
199+
* Read a project properties from properties file
200+
*
201+
* @param project a project
202+
*/
203+
private ProjectPropertiesTO readProjectProperties(final IProject project) throws PropertiesException {
204+
ProjectPropertiesTO projectProperties = null;
205+
try {
206+
207+
final IFile propertiesFile = project.getFile(PROPERTIES_FILE);
208+
if (propertiesFile.exists() && propertiesFile.isAccessible()) {
209+
String properties = IOUtils.toString(propertiesFile.getContents());
210+
projectProperties = convertProjectPropertiesFromString(properties);
211+
}
212+
213+
return projectProperties;
214+
215+
} catch (IOException e) {
216+
throw new PropertiesException(e);
217+
} catch (CoreException e) {
218+
throw new PropertiesException(e);
219+
}
220+
}
206221

207222
/**
208223
* Fill a properties information structure from a transfer object
@@ -258,17 +273,9 @@ private void setRuleSetFromProperties(IProjectProperties projectProperties, Rule
258273
projectProperties.setProjectRuleSet(ruleSet);
259274
}
260275

261-
/**
262-
* Save project properties
263-
*
264-
* @param project a project
265-
* @param projectProperties the project properties to save
266-
* @param monitor a progress monitor
267-
* @throws DAOException
268-
*/
269-
private void writeProjectProperties(final IProject project, final ProjectPropertiesTO projectProperties)
276+
public String convertProjectPropertiesToString(ProjectPropertiesTO projectProperties)
270277
throws PropertiesException {
271-
StringWriter writer = null;
278+
StringWriter writer = null;
272279
try {
273280
final Mapping mapping = new Mapping(getClass().getClassLoader());
274281
final URL mappingSpecUrl = getClass().getResource(PROPERTIES_MAPPING);
@@ -282,12 +289,8 @@ private void writeProjectProperties(final IProject project, final ProjectPropert
282289
marshaller.marshal(projectProperties);
283290
writer.flush();
284291

285-
final IFile propertiesFile = project.getFile(PROPERTIES_FILE);
286-
if (propertiesFile.exists() && propertiesFile.isAccessible()) {
287-
propertiesFile.setContents(new ByteArrayInputStream(writer.toString().getBytes()), false, false, null);
288-
} else {
289-
propertiesFile.create(new ByteArrayInputStream(writer.toString().getBytes()), false, null);
290-
}
292+
return writer.toString();
293+
291294
} catch (MarshalException e) {
292295
throw new PropertiesException(e);
293296
} catch (ValidationException e) {
@@ -296,10 +299,32 @@ private void writeProjectProperties(final IProject project, final ProjectPropert
296299
throw new PropertiesException(e);
297300
} catch (MappingException e) {
298301
throw new PropertiesException(e);
302+
} finally {
303+
IOUtil.closeQuietly(writer);
304+
}
305+
}
306+
307+
/**
308+
* Save project properties
309+
*
310+
* @param project a project
311+
* @param projectProperties the project properties to save
312+
* @param monitor a progress monitor
313+
* @throws DAOException
314+
*/
315+
private void writeProjectProperties(final IProject project, final ProjectPropertiesTO projectProperties)
316+
throws PropertiesException {
317+
try {
318+
String writer = convertProjectPropertiesToString(projectProperties);
319+
320+
final IFile propertiesFile = project.getFile(PROPERTIES_FILE);
321+
if (propertiesFile.exists() && propertiesFile.isAccessible()) {
322+
propertiesFile.setContents(new ByteArrayInputStream(writer.getBytes()), false, false, null);
323+
} else {
324+
propertiesFile.create(new ByteArrayInputStream(writer.getBytes()), false, null);
325+
}
299326
} catch (CoreException e) {
300327
throw new PropertiesException(e);
301-
} finally {
302-
IOUtil.closeQuietly(writer);
303328
}
304329
}
305330

0 commit comments

Comments
 (0)