Line-separator differences cause PredefinedNodeTypeTest to fail on different
operating systems.
-----------------------------------------------------------------------------------------------
Key: JCR-285
URL: http://issues.apache.org/jira/browse/JCR-285
Project: Jackrabbit
Type: Bug
Components: nodetype
Versions: 1.0
Reporter: Joseph Chen
Priority: Minor
In testPredefinedNodeType(), the test reads in a test file from the file system
and then performs a string comparison, which may fail due to line-separator
differences:
private void testPredefinedNodeType(String name)
throws NotExecutableException {
try {
StringBuffer spec = new StringBuffer();
String resource =
"org/apache/jackrabbit/test/api/nodetype/spec/"
+ name.replace(':', '-') + ".txt";
Reader reader = new InputStreamReader(
getClass().getClassLoader().getResourceAsStream(resource));
for (int ch = reader.read(); ch != -1; ch = reader.read()) {
spec.append((char) ch);
}
NodeType type = manager.getNodeType(name);
assertEquals(
"Predefined node type " + name,
spec.toString(),
getNodeTypeSpec(type));
...
The above works when the file being read in has line-separators that match the
operating system the test is being run on. However, if there is a mismatch,
the string comparison will fail.
The fix is to replace line-separators in both strings being compared:
Helper method to replace line separators
/** Standardize line separators around "\n". */
public String replaceLineSeparators(String stringValue) {
// Replace "\r\n" (Windows format) with "\n" (Unix format)
stringValue = stringValue.replaceAll("\r\n", "\n");
// Replace "\r" (Mac format) with "\n" (Unix format)
stringValue = stringValue.replaceAll("\r", "\n");
return stringValue;
}
Updated test method:
private void testPredefinedNodeType(String name)
throws NotExecutableException {
try {
StringBuffer spec = new StringBuffer();
String resource =
"org/apache/jackrabbit/test/api/nodetype/spec/"
+ name.replace(':', '-') + ".txt";
Reader reader = new InputStreamReader(
getClass().getClassLoader().getResourceAsStream(resource));
for (int ch = reader.read(); ch != -1; ch = reader.read()) {
spec.append((char) ch);
}
NodeType type = manager.getNodeType(name);
String nodeTypeSpecValue =
replaceLineSeparators(getNodeTypeSpec(type));
String specValue = replaceLineSeparators(spec.toString());
assertEquals(
"Predefined node type " + name,
specValue,
nodeTypeSpecValue);
...
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira