You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ni...@apache.org on 2004/06/12 12:38:36 UTC

svn commit: rev 21129 - in avalon/trunk/tools/magic/engine: . src/java/org/apache/avalon/magic src/test/java/org/apache/avalon/magic src/test/resources/org/apache/avalon/magic

Author: niclas
Date: Sat Jun 12 03:38:34 2004
New Revision: 21129

Added:
   avalon/trunk/tools/magic/engine/src/test/resources/org/apache/avalon/magic/test.properties
      - copied unchanged from rev 21125, avalon/trunk/tools/magic/engine/src/test/java/org/apache/avalon/magic/test.properties
Removed:
   avalon/trunk/tools/magic/engine/src/test/java/org/apache/avalon/magic/test.properties
Modified:
   avalon/trunk/tools/magic/engine/build.xml
   avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/Builder.java
   avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/DefaultResolver.java
   avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginContext.java
   avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginProperties.java
   avalon/trunk/tools/magic/engine/src/test/java/org/apache/avalon/magic/PluginContextTestCase.java
Log:
Fixed the proeprty resolution problem, updated the unittests, and made unittesting part of the default build.

Modified: avalon/trunk/tools/magic/engine/build.xml
==============================================================================
--- avalon/trunk/tools/magic/engine/build.xml	(original)
+++ avalon/trunk/tools/magic/engine/build.xml	Sat Jun 12 03:38:34 2004
@@ -62,7 +62,7 @@
   
   </target>
   
-  <target name="dist" depends="install" >
+  <target name="dist" depends="install,test" >
     <copy todir="${build.dist.dir}" >
       <fileset dir="${build.src.dir}/dist" includes="**" />
     </copy>

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/Builder.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/Builder.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/Builder.java	Sat Jun 12 03:38:34 2004
@@ -151,14 +151,14 @@
     
     private void loadGlobalProperties( PluginProperties props )
     {
-        props.put( "magic.home.dir", m_SystemDir.toString() );
-        props.put( "magic.plugins.dir", m_PluginsDir.getAbsolutePath() );
-        props.put( "magic.repository.dir", new File( m_SystemDir, "repository" ).toString() );
-        props.put( "magic.project.dir", m_ProjectDir.getAbsolutePath() );
-        props.put( "magic.temp.dir", m_TempDir.getAbsolutePath() );
-        props.put( "user.home", System.getProperty( "user.home" ) );
-        props.put( "java.home", System.getProperty( "java.home" ) );
-        props.put( "java.version", System.getProperty( "java.version" ) );
+        props.setProperty( "magic.home.dir", m_SystemDir.toString() );
+        props.setProperty( "magic.plugins.dir", m_PluginsDir.getAbsolutePath() );
+        props.setProperty( "magic.repository.dir", new File( m_SystemDir, "repository" ).toString() );
+        props.setProperty( "magic.project.dir", m_ProjectDir.getAbsolutePath() );
+        props.setProperty( "magic.temp.dir", m_TempDir.getAbsolutePath() );
+        props.setProperty( "user.home", System.getProperty( "user.home" ) );
+        props.setProperty( "java.home", System.getProperty( "java.home" ) );
+        props.setProperty( "java.version", System.getProperty( "java.version" ) );
         populateDateTimes( props );        
     }
     
@@ -268,12 +268,12 @@
     {
         Calendar cal = Calendar.getInstance();
         
-        p.put( "magic.year", "" + cal.get( Calendar.YEAR ) );
-        p.put( "magic.month", "" + cal.get( Calendar.MONTH ) );
-        p.put( "magic.date", "" + cal.get( Calendar.DATE ) );
-        p.put( "magic.hour", "" + cal.get( Calendar.HOUR_OF_DAY ) );
-        p.put( "magic.minute", "" + cal.get( Calendar.MINUTE ) );
-        p.put( "magic.second", "" + cal.get( Calendar.SECOND ) );
+        p.setProperty( "magic.year", "" + cal.get( Calendar.YEAR ) );
+        p.setProperty( "magic.month", "" + cal.get( Calendar.MONTH ) );
+        p.setProperty( "magic.date", "" + cal.get( Calendar.DATE ) );
+        p.setProperty( "magic.hour", "" + cal.get( Calendar.HOUR_OF_DAY ) );
+        p.setProperty( "magic.minute", "" + cal.get( Calendar.MINUTE ) );
+        p.setProperty( "magic.second", "" + cal.get( Calendar.SECOND ) );
     }
 } 
  

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/DefaultResolver.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/DefaultResolver.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/DefaultResolver.java	Sat Jun 12 03:38:34 2004
@@ -24,7 +24,13 @@
 public class DefaultResolver
     implements PropertyResolver
 {
-
+    private PluginContext m_Context;
+    
+    DefaultResolver( PluginContext context )
+    {
+        m_Context = context;
+    }
+    
     public String resolve( PluginProperties props, String value )
     {
         // optimization for common case.
@@ -44,7 +50,10 @@
                 String open = (String) stack.pop();
                 if( open.equals( "${" ) )
                 {
-                    String propValue = props.getProperty( name );
+                    String propValue = props.getProperty( name, this );
+                    if( propValue == null )
+                        propValue = m_Context.getProperty( name );
+                        
                     if( propValue == null )
                         push( stack, "${" + name + "}" );
                     else

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginContext.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginContext.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginContext.java	Sat Jun 12 03:38:34 2004
@@ -45,6 +45,7 @@
     private File m_TempDir;
    
     private Project  m_AntProject;
+    private PropertyResolver m_Resolver;
     
     
     PluginContext( File scriptDir )
@@ -74,6 +75,8 @@
         if( ant == null )
             throw new IllegalArgumentException( "Null argument: ant" );
             
+        m_Resolver = new DefaultResolver( this );
+        
         m_ProjectName = projectName.trim();
         m_ProjectDir = projectDir;
         m_ProjectProperties = projectProps;
@@ -162,7 +165,8 @@
     
     public String getProperty( String name )
     {
-        String value = m_ProjectProperties.getProperty( name );
+        name = name.trim();
+        String value = m_ProjectProperties.getProperty( name, m_Resolver );
         if( value == null )
         {
             if( name.equals( "plugin.dir" ) )
@@ -202,6 +206,6 @@
     
     public String resolve( String value )
     {
-        return new DefaultResolver().resolve( m_ProjectProperties, value );
+        return m_ProjectProperties.resolve( value, m_Resolver );
     }
 }

Modified: avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginProperties.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginProperties.java	(original)
+++ avalon/trunk/tools/magic/engine/src/java/org/apache/avalon/magic/PluginProperties.java	Sat Jun 12 03:38:34 2004
@@ -17,45 +17,82 @@
 
 package org.apache.avalon.magic;
 
+import java.io.IOException;
+import java.io.InputStream;
+
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
-public class PluginProperties extends Properties
+public class PluginProperties
 {
-    private PropertyResolver m_Resolver;
+    private Properties m_Properties;
     
     PluginProperties()
     {
-        m_Resolver = new DefaultResolver();
+        m_Properties = new Properties();
     }
     
-    PluginProperties( Properties content )
+    PluginProperties( PluginProperties content )
     {
-        super();
+        this();
+        putAll( content );
+    }
+    
+    void putAll( PluginProperties content )
+    {    
         Iterator list = content.entrySet().iterator();
         while( list.hasNext() )
         {
             Map.Entry entry = (Map.Entry) list.next();
             Object key = entry.getKey();
             Object value = entry.getValue();
-            put( key, value );
+            m_Properties.put( key, value );
         }
     }
     
+    public String getProperty( String name )
+    {
+        String value = m_Properties.getProperty( name ).trim();
+        if( value.indexOf( "${" ) >= 0 )
+            throw new IllegalArgumentException( "The value of '" + name + "' contains a variable, and not supported to resolve with this method:" + value );
+        return value;
+    }
+    
     public String getProperty( String name, PropertyResolver resolver )
     {
         name = name.trim();
-        String value = super.getProperty( name );
+        String value = m_Properties.getProperty( name );
         if( value == null )
             return null;
         value = value.trim();
         return resolver.resolve( this, value );
     }
     
-    public String getProperty( String name )
+    public String resolve( String data, PropertyResolver resolver  )
     {
-        return getProperty( name, m_Resolver );
+        return resolver.resolve( this, data ).trim();
+    }
+
+    public void setProperty( String name, String value )
+    {
+        m_Properties.setProperty( name, value );
     }
     
+    void load( InputStream in )
+        throws IOException
+    {
+        m_Properties.load( in );
+    }
+    
+    Set entrySet()
+    {
+        return m_Properties.entrySet();
+    }
+
+    Set keySet()
+    {
+        return m_Properties.keySet();
+    }
 }

Modified: avalon/trunk/tools/magic/engine/src/test/java/org/apache/avalon/magic/PluginContextTestCase.java
==============================================================================
--- avalon/trunk/tools/magic/engine/src/test/java/org/apache/avalon/magic/PluginContextTestCase.java	(original)
+++ avalon/trunk/tools/magic/engine/src/test/java/org/apache/avalon/magic/PluginContextTestCase.java	Sat Jun 12 03:38:34 2004
@@ -27,19 +27,30 @@
     protected void setUp() throws Exception
     {
         super.setUp();
-        m_ProjectDir = new File( "target/projectdir");
-        m_ProjectDir.mkdir();
+        m_ProjectDir = new File( "target/test/projectdir");
+        m_ProjectDir.mkdirs();
         
         PluginProperties projectProps = new PluginProperties();
         InputStream in = getClass().getResourceAsStream( "test.properties");
         projectProps.load( in );
         
-        m_PluginDir = new File( "target/plugins");
-        m_PluginDir.mkdir();
+        m_PluginDir = new File( "target/test/plugins");
+        m_PluginDir.mkdirs();
         
-        m_SystemDir = new File( "target/system");
-        m_SystemDir.mkdir();
+        m_SystemDir = new File( "target/test/system");
+        m_SystemDir.mkdirs();
         
+        m_TempDir = new File( "target/test/temp");
+        m_TempDir.mkdirs();
+        
+        m_ProjectSystemDir = new File( "../../../central/system");
+
+        m_Project = new Project();
+        m_Project.setBaseDir( m_ProjectDir );
+        m_Project.setCoreLoader( this.getClass().getClassLoader() );
+        m_Project.setName( "testcase project" );
+        m_Project.init();
+                
         m_Context = new PluginContext
         ( 
             " testcase project ", 
@@ -89,26 +100,43 @@
         assertEquals( "Plugin ClassName failed.", "TestCasePlugin", m_Context.getPluginClassname());
     }
 
-    public void testGetProperty()
+    public void testGetProperty1()
     {
         String p1 = "niclas${abc.def}hedhman";
         String value = m_Context.resolve( p1 );
+        System.out.println( "1:" + value );
         assertEquals( "Unresolvable failed.", p1, value );
+    }
 
-        p1 = "niclas ${a.property } hedhman";
-        value = m_Context.resolve( p1 );
+    public void testGetProperty2()
+    {
+        String p1 = "niclas ${a.property } hedhman";
+        String value = m_Context.resolve( p1 );
+        System.out.println( "2:" + value );
         assertEquals( "Single Level resolution failed.", "niclas has the surname of hedhman", value );
+    }
 
-        p1 = "${a2.this}";
-        value = m_Context.resolve( p1 );
+    public void testGetProperty3()
+    {
+        String p1 = "${a2.this}";
+        String value = m_Context.resolve( p1 );
+        System.out.println( "3:" + value );
         assertEquals( "Property resolution failed.", "this is", value );
+    }
 
-        p1 = "Hey, ${a2.${a1}} ${a2.${a4}} ${a3}";
-        value = m_Context.resolve( p1 );
+    public void testGetProperty4()
+    {
+        String p1 = "Hey, ${a2.${a1}} ${a2.${a4}} ${a3}";
+        String value = m_Context.resolve( p1 );
+        System.out.println( "4:" + value );
         assertEquals( "Nested resolution failed.", "Hey, this is this is not this is funky", value );
+    }
 
-        p1 = "${${${${${${b1}}}}}}";
-        value = m_Context.resolve( p1 );
+    public void testGetProperty5()
+    {
+        String p1 = "${${${${${${b1}}}}}}";
+        String value = m_Context.resolve( p1 );
+        System.out.println( "5:" + value );
         assertEquals( "Nested resolution failed.", "YEAH!!!!", value );
     }
 
@@ -116,5 +144,11 @@
     {
         assertTrue( "Ant Project failed.", m_Context.getAntProject() != null );
         assertEquals( "Ant Project failed.", "testcase project", m_Context.getAntProject().getName() );
+    }
+    
+    public void testResolvePluginDir()
+    {
+        String expected = "This is " + m_PluginDir.getAbsolutePath() + " right.";
+        assertEquals( "PluginDir not retrievable.", expected, m_Context.resolve( "This is ${plugin.dir} right." ) );
     }
 }

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org