You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@jackrabbit.apache.org by "Stefan Guggisberg (JIRA)" <ji...@apache.org> on 2006/04/03 14:58:14 UTC

[jira] Assigned: (JCR-285) Line-separator differences cause PredefinedNodeTypeTest to fail on different operating systems.

     [ http://issues.apache.org/jira/browse/JCR-285?page=all ]

Stefan Guggisberg reassigned JCR-285:
-------------------------------------

    Assign To: Stefan Guggisberg

> 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: test
>     Versions: 0.9, 1.0
>     Reporter: Joseph Chen
>     Assignee: Stefan Guggisberg
>     Priority: Minor
>      Fix For: 1.1
>  Attachments: PredefinedNodeTypeTest.java
>
> 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