Author: oheger Date: Wed Nov 30 20:52:24 2016 New Revision: 1772114 URL: http://svn.apache.org/viewvc?rev=1772114&view=rev Log: [CONFIGURATION-644] Fix for a duplicated header comment.
Under certain circumstances, the header comment managed by PropertiesConfigurationLayout gets duplicated. This commit fixes this problem. Thanks to Andrew DeMaria for the patch. Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestPropertiesConfigurationLayout.java Modified: commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java?rev=1772114&r1=1772113&r2=1772114&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java (original) +++ commons/proper/configuration/trunk/src/main/java/org/apache/commons/configuration2/PropertiesConfigurationLayout.java Wed Nov 30 20:52:24 2016 @@ -796,8 +796,7 @@ public class PropertiesConfigurationLayo */ private int checkHeaderComment(List<String> commentLines) { - if (loadCounter == 1 && getHeaderComment() == null - && layoutData.isEmpty()) + if (loadCounter == 1 && layoutData.isEmpty()) { // This is the first comment. Search for blanc lines. int index = commentLines.size() - 1; @@ -806,7 +805,10 @@ public class PropertiesConfigurationLayo { index--; } - setHeaderComment(extractComment(commentLines, 0, index - 1)); + if (getHeaderComment() == null) + { + setHeaderComment(extractComment(commentLines, 0, index - 1)); + } return index + 1; } else Modified: commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestPropertiesConfigurationLayout.java URL: http://svn.apache.org/viewvc/commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestPropertiesConfigurationLayout.java?rev=1772114&r1=1772113&r2=1772114&view=diff ============================================================================== --- commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestPropertiesConfigurationLayout.java (original) +++ commons/proper/configuration/trunk/src/test/java/org/apache/commons/configuration2/TestPropertiesConfigurationLayout.java Wed Nov 30 20:52:24 2016 @@ -230,6 +230,26 @@ public class TestPropertiesConfiguration } /** + * Tests if a header comment containing blanc lines is correctly detected and doesn't overflow into the property + * comment in the case that the header comment is already set + */ + @Test + public void testHeaderCommentWithBlancsAndPresetHeaderComment() throws ConfigurationException + { + String presetHeaderComment = "preset" + TEST_COMMENT + CRNORM + CRNORM + TEST_COMMENT; + builder.addComment(TEST_COMMENT); + builder.addComment(null); + builder.addComment(TEST_COMMENT); + builder.addComment(null); + builder.addProperty(TEST_KEY, TEST_VALUE); + layout.setHeaderComment(presetHeaderComment); + layout.load(config, builder.getReader()); + assertEquals("Wrong header comment", presetHeaderComment, + layout.getCanonicalHeaderComment(false)); + assertNull("Wrong comment for property", layout.getComment(TEST_KEY)); + } + + /** * Tests if a header comment is correctly detected when it contains blanc * lines and the first property has a comment, too. */