Author: krosenvold
Date: Wed Aug  1 20:20:19 2012
New Revision: 1368237

URL: http://svn.apache.org/viewvc?rev=1368237&view=rev
Log:
o Made the property files written by the fork logic obey insertion order, so 
they are human readable

This has been annoying me since the beginning of time

Added:
    
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/OrderedProperties.java
    
maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/OrderedPropertiesTest.java
Modified:
    
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java

Modified: 
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java?rev=1368237&r1=1368236&r2=1368237&view=diff
==============================================================================
--- 
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
 (original)
+++ 
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/AbstractSurefireMojo.java
 Wed Aug  1 20:20:19 2012
@@ -573,6 +573,7 @@ public abstract class AbstractSurefireMo
     boolean verifyParameters()
         throws MojoFailureException
     {
+        setProperties( new OrderedProperties( getProperties() ) );
         if ( isSkipExecution() )
         {
             getLog().info( "Tests are skipped." );
@@ -593,7 +594,6 @@ public abstract class AbstractSurefireMo
             ensureParallelRunningCompatibility();
             warnIfUselessUseSystemClassLoaderParameter();
         }
-
         return true;
     }
 
@@ -642,6 +642,7 @@ public abstract class AbstractSurefireMo
     {
         List<ProviderInfo> providers = createProviders();
         Summary summary = new Summary();
+
         for ( ProviderInfo provider : providers )
         {
             executeProvider( provider, summary );
@@ -717,11 +718,6 @@ public abstract class AbstractSurefireMo
      */
     private void convertTestNGParameters()
     {
-        if ( getProperties() == null ) // May be predefined from plugin 
paramaters
-        {
-            setProperties( new Properties() );
-        }
-
         if ( this.getParallel() != null )
         {
             getProperties().setProperty( ProviderParameterNames.PARALLEL_PROP, 
this.getParallel() );
@@ -747,10 +743,6 @@ public abstract class AbstractSurefireMo
 
     private void convertGroupParameters()
     {
-        if ( getProperties() == null ) // May be predefined from plugin 
paramaters
-        {
-            setProperties( new Properties() );
-        }
         if ( this.getExcludedGroups() != null )
         {
             getProperties().setProperty( 
ProviderParameterNames.TESTNG_EXCLUDEDGROUPS_PROP, this.getExcludedGroups() );
@@ -777,11 +769,6 @@ public abstract class AbstractSurefireMo
      */
     private void convertJunitCoreParameters()
     {
-        if ( getProperties() == null )
-        {
-            setProperties( new Properties() );
-        }
-
         if ( this.getParallel() != null )
         {
             getProperties().setProperty( ProviderParameterNames.PARALLEL_PROP, 
this.getParallel() );
@@ -889,10 +876,6 @@ public abstract class AbstractSurefireMo
         }
 
         Properties providerProperties = getProperties();
-        if ( providerProperties == null )
-        {
-            providerProperties = new Properties();
-        }
 
         RunOrderParameters runOrderParameters =
             new RunOrderParameters( getRunOrder(), getStatisticsFileName( 
configurationHash ) );
@@ -1338,7 +1321,8 @@ public abstract class AbstractSurefireMo
 
     }
 
-    protected void addPluginSpecificChecksumItems( ChecksumCalculator checksum 
){
+    protected void addPluginSpecificChecksumItems( ChecksumCalculator checksum 
)
+    {
 
     }
 
@@ -1539,7 +1523,7 @@ public abstract class AbstractSurefireMo
 
         if ( this.getSystemPropertiesFile() != null )
         {
-            Properties props = new Properties();
+            Properties props = new OrderedProperties();
             try
             {
                 FileInputStream fis = new FileInputStream( 
getSystemPropertiesFile() );

Added: 
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/OrderedProperties.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/OrderedProperties.java?rev=1368237&view=auto
==============================================================================
--- 
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/OrderedProperties.java
 (added)
+++ 
maven/surefire/trunk/maven-surefire-common/src/main/java/org/apache/maven/plugin/surefire/OrderedProperties.java
 Wed Aug  1 20:20:19 2012
@@ -0,0 +1,69 @@
+package org.apache.maven.plugin.surefire;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import java.util.*;
+
+/**
+ * A properties implementation that preserves insertion order.
+ */
+public class OrderedProperties
+    extends Properties
+{
+    private final LinkedHashSet<Object> items = new LinkedHashSet<Object>();
+
+    public OrderedProperties()
+    {
+    }
+
+    public OrderedProperties( Properties source )
+    {
+        if ( source != null )
+        {
+            this.putAll(  source );
+        }
+    }
+
+    @Override
+    public synchronized Object put( Object key, Object value )
+    {
+        items.add( key );
+        return super.put( key, value );
+    }
+
+    @Override
+    public synchronized Object remove( Object key )
+    {
+        items.remove( key );
+        return super.remove( key );
+    }
+
+    @Override
+    public synchronized void clear()
+    {
+        items.clear();
+        super.clear();
+    }
+
+    public synchronized Enumeration<Object> keys()
+    {
+        return Collections.enumeration( items );
+    }
+
+}

Added: 
maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/OrderedPropertiesTest.java
URL: 
http://svn.apache.org/viewvc/maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/OrderedPropertiesTest.java?rev=1368237&view=auto
==============================================================================
--- 
maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/OrderedPropertiesTest.java
 (added)
+++ 
maven/surefire/trunk/maven-surefire-common/src/test/java/org/apache/maven/plugin/surefire/OrderedPropertiesTest.java
 Wed Aug  1 20:20:19 2012
@@ -0,0 +1,70 @@
+package org.apache.maven.plugin.surefire;
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+import junit.framework.TestCase;
+
+import java.util.Enumeration;
+import java.util.Properties;
+
+/**
+ * Tests the insertion-order preserving properties collection
+ */
+public class OrderedPropertiesTest extends TestCase {
+
+    public void testKeys() throws Exception {
+        OrderedProperties orderedProperties = new OrderedProperties(null);
+        orderedProperties.setProperty("abc", "1");
+        orderedProperties.setProperty("xyz", "1");
+        orderedProperties.setProperty("efg", "1");
+
+        Enumeration<Object> keys = orderedProperties.keys();
+        assertEquals("abc", keys.nextElement());
+        assertEquals("xyz", keys.nextElement());
+        assertEquals( "efg", keys.nextElement() );
+
+    }
+
+    public void testKeysReinsert() throws Exception {
+        OrderedProperties orderedProperties = new OrderedProperties(null);
+        orderedProperties.setProperty("abc", "1");
+        orderedProperties.setProperty("xyz", "1");
+        orderedProperties.setProperty("efg", "1");
+        orderedProperties.setProperty("abc", "2");
+        orderedProperties.remove( "xyz" );
+        orderedProperties.setProperty( "xyz", "1" );
+
+        Enumeration<Object> keys = orderedProperties.keys();
+        assertEquals("abc", keys.nextElement());
+        assertEquals("efg", keys.nextElement());
+        assertEquals("xyz", keys.nextElement());
+    }
+
+    public void testConstructWithOther(){
+        Properties src = new Properties(  );
+        src.setProperty( "a" , "1");
+        src.setProperty( "b" , "2");
+        OrderedProperties orderedProperties = new OrderedProperties(src);
+        // Cannot make assumptions about insertion order
+        assertEquals( 2, orderedProperties.size() );
+
+
+    }
+
+}


Reply via email to