You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@maven.apache.org by jd...@apache.org on 2007/09/14 08:54:31 UTC
svn commit: r575563 - in
/maven/sandbox/trunk/shared/maven-extra-profile-activators: ./ src/
src/main/ src/main/java/ src/main/java/org/ src/main/java/org/apache/
src/main/java/org/apache/maven/ src/main/java/org/apache/maven/shared/
src/main/java/org/...
Author: jdcasey
Date: Thu Sep 13 23:54:29 2007
New Revision: 575563
URL: http://svn.apache.org/viewvc?rev=575563&view=rev
Log:
Splitting this <properties/> based profile activator out of native-mojos for wider use, a la maven-common-artifact-filters.
Added:
maven/sandbox/trunk/shared/maven-extra-profile-activators/
maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml (with props)
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java (with props)
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/
maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java (with props)
Added: maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml?rev=575563&view=auto
==============================================================================
--- maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml (added)
+++ maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml Thu Sep 13 23:54:29 2007
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="UTF-8"?><project>
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-shared-components</artifactId>
+ <version>4</version>
+ </parent>
+
+ <groupId>org.apache.maven.shared</groupId>
+ <artifactId>maven-extra-profile-activators</artifactId>
+ <version>1.0-SNAPSHOT</version>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-build-context</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-project</artifactId>
+ <version>2.1-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-maven-plugin</artifactId>
+ <version>1.3.5</version>
+ <executions>
+ <execution>
+ <id>create-component-descriptor</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
\ No newline at end of file
Propchange: maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/shared/maven-extra-profile-activators/pom.xml
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java?rev=575563&view=auto
==============================================================================
--- maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java (added)
+++ maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java Thu Sep 13 23:54:29 2007
@@ -0,0 +1,291 @@
+package org.apache.maven.shared.profiles;
+
+import java.io.File;
+import java.util.Iterator;
+import java.util.Properties;
+
+import org.apache.maven.context.BuildContextManager;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.profiles.activation.ProfileActivator;
+import org.apache.maven.project.MavenProject;
+import org.apache.maven.project.build.ProjectBuildCache;
+import org.apache.maven.project.build.ProjectBuildContext;
+import org.apache.maven.project.build.model.ModelLineage;
+import org.codehaus.plexus.logging.LogEnabled;
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.logging.console.ConsoleLogger;
+
+/**
+ * @plexus.component role="org.apache.maven.profiles.activation.ProfileActivator"
+ * role-hint="modelProperty"
+ * instantiation-strategy="per-lookup"
+ *
+ * @author jdcasey
+ */
+public class ModelPropertyProfileActivator
+ implements ProfileActivator, LogEnabled
+{
+
+ /**
+ * Configured as part of the CustomActivator's setup of this ProfileActivator, before the
+ * CustomActivator delegates the profile-activation process to it. This IS a required element,
+ * and it can be reversed (negated) using a '!' prefix. Reversing the name means one of two things:
+ * <br/>
+ * <ul>
+ * <li>If the value configuration is null, make sure the property doesn't exist in the lineage.</li>
+ * <li>If the value configuration does exist, make sure the retrieved value doesn't match it.</li>
+ * </ul>
+ *
+ * @plexus.configuration
+ */
+ private String name;
+
+ /**
+ * Configured as part of the CustomActivator's setup of this ProfileActivator, before the
+ * CustomActivator delegates the profile-activation process to it. This is NOT a required element,
+ * and it can be reversed (negated) using a '!' prefix.
+ *
+ * @plexus.configuration
+ */
+ private String value;
+
+ /**
+ * @plexus.requirement
+ */
+ private BuildContextManager buildContextManager;
+
+ // initialized by the container, or lazily.
+ private Logger logger;
+
+ public ModelPropertyProfileActivator()
+ {
+ // provided for Plexus activation
+ }
+
+ protected ModelPropertyProfileActivator( String name, BuildContextManager buildContextManager )
+ {
+ this.name = name;
+ this.buildContextManager = buildContextManager;
+ }
+
+ protected ModelPropertyProfileActivator( String name, String value, BuildContextManager buildContextManager )
+ {
+ this.name = name;
+ this.value = value;
+ this.buildContextManager = buildContextManager;
+ }
+
+ public boolean canDetermineActivation( Profile profile )
+ {
+ ProjectBuildContext projectContext = ProjectBuildContext.getProjectBuildContext( buildContextManager, false );
+
+ if ( checkConfigurationSanity() && ( projectContext != null ) )
+ {
+ return projectContext.getModelLineage() != null;
+ }
+
+ return false;
+ }
+
+ private boolean checkConfigurationSanity()
+ {
+ return name != null;
+ }
+
+ public boolean isActive( Profile profile )
+ {
+ // currently, just make sure the name configuration is set.
+ if ( !checkConfigurationSanity() )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Skipping profile: " + profile.getId() + ". Reason: modelProperty activation is missing 'name' configuration." );
+ }
+ return false;
+ }
+
+ // using the project cache to speed things up; if the project has been built already,
+ // we don't have to search the entire model lineage for it...parents should be
+ // built ahead of children, so this could be a time-saver.
+ ProjectBuildCache projectCache = ProjectBuildCache.read( buildContextManager );
+
+ ProjectBuildContext projectContext = ProjectBuildContext.getProjectBuildContext( buildContextManager, false );
+
+ if ( projectContext == null )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Skipping profile: " + profile.getId() + ". Reason: projectContext is missing." );
+ }
+
+ return false;
+ }
+
+ ModelLineage lineage = projectContext.getModelLineage();
+
+ if ( lineage == null )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Skipping profile: " + profile.getId() + ". Reason: model lineage is missing." );
+ }
+
+ return false;
+ }
+
+ String originatingId = lineage.getOriginatingModel().getId();
+
+ String propertyName = name;
+ boolean reverse = false;
+
+ if ( propertyName.startsWith( "!" ) )
+ {
+ reverse = true;
+ propertyName = propertyName.substring( 1 );
+ }
+
+ String checkValue = value;
+ if ( ( checkValue != null ) && checkValue.startsWith( "!" ) )
+ {
+ reverse = true;
+ checkValue = checkValue.substring( 1 );
+ }
+
+ boolean matches = false;
+
+ // iterate through the Model instances that will eventually be calculated as one
+ // inheritance-assembled Model, and see if we can activate the profile based on properties
+ // found within one of them. NOTE: iteration starts with the child POM, and goes back through
+ // the ancestry.
+ for ( Iterator it = lineage.modelIterator(); it.hasNext(); )
+ {
+ Model model = (Model) it.next();
+ MavenProject project = projectCache.getCachedProject( model.getGroupId(), model.getArtifactId(), model.getVersion() );
+ File file = lineage.getFile( model );
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Searching: " + model.getId() + "\nfrom file: " + file + "\nfor property: " + propertyName + "\nhaving value: " + checkValue + " (if null, only checking for property presence)." );
+ }
+
+ boolean fromProject = false;
+ Properties properties;
+ if ( project != null )
+ {
+ properties = project.getProperties();
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Found MavenProject instance for: " + model.getId() + "; no need to traverse entire lineage from this point back." );
+ }
+ }
+ else
+ {
+ properties = model.getProperties();
+ }
+
+ if ( properties == null )
+ {
+ if ( fromProject )
+ {
+ break;
+ }
+ else
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "no properties here. continuing down the lineage." );
+ }
+ continue;
+ }
+ }
+
+ String retrievedValue = properties.getProperty( propertyName );
+
+ if ( value != null )
+ {
+ // local-most values win, so if the retrievedValue != null in the current POM, NEVER
+ // look in the parent POM for a match.
+ // If the retrievedValue == null, though, we need to stop looking for a match here.
+ if ( retrievedValue == null )
+ {
+ if ( fromProject )
+ {
+ break;
+ }
+ else
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "property not found here. continuing down the lineage." );
+ }
+ continue;
+ }
+ }
+
+ matches = checkValue.equals( retrievedValue );
+
+ // if we get here, retrievedValue != null, and we're looking at the local-most POM, so:
+ //
+ // if startsWith '!' (reverse == true) and values don't match (match == false), return true
+ // if NOT startsWith '!' (reverse == false) and values DO match (match == true), return true
+ // else return false
+ if ( reverse != matches )
+ {
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Searching for property-value match: matches: " + matches + "; reversed: " + reverse + "; profile: " + profile.getId() + " should be activated." );
+ }
+ break;
+ }
+ }
+ // if the value is not specified, then we have to search the entire ancestry before we
+ // can say for certain that a property is missing.
+ else
+ {
+ // if startsWith '!' (reverse == true) and retrievedValue == null (true), return true
+ // if NOT startsWith '!' (reverse == false) and NOT retrievedValue == null (false), return true
+ matches = retrievedValue != null;
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "Searching for property presence: matches: " + matches + "; reversed: " + reverse + "; stopping lineage search." );
+ }
+
+ if ( matches )
+ {
+ break;
+ }
+ }
+
+ // if we can't definitely say we're activating the profile, go to the next model in the
+ // lineage, and try again.
+ }
+
+ // if we get to the end of the lineage without activating the profile, return false.
+ boolean result = reverse != matches;
+
+ if ( getLogger().isDebugEnabled() )
+ {
+ getLogger().debug( "As a result of modelProperty activation in profile: " + profile.getId() + " of POM: " + originatingId + ", profile is: " + ( result ? "ACTIVE" : "INACTIVE") );
+ }
+
+ return result;
+ }
+
+ protected Logger getLogger()
+ {
+ if ( logger == null )
+ {
+ logger = new ConsoleLogger( Logger.LEVEL_DEBUG, "ModelPropertyProfileActivator:internal" );
+ }
+
+ return logger;
+ }
+
+ public void enableLogging( Logger logger )
+ {
+ this.logger = logger;
+ }
+
+}
Propchange: maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/shared/maven-extra-profile-activators/src/main/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivator.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"
Added: maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java
URL: http://svn.apache.org/viewvc/maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java?rev=575563&view=auto
==============================================================================
--- maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java (added)
+++ maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java Thu Sep 13 23:54:29 2007
@@ -0,0 +1,336 @@
+package org.apache.maven.shared.profiles;
+
+import org.apache.maven.context.BuildContextManager;
+import org.apache.maven.context.DefaultBuildContextManager;
+import org.apache.maven.model.Model;
+import org.apache.maven.model.Profile;
+import org.apache.maven.project.build.ProjectBuildContext;
+import org.apache.maven.project.build.model.DefaultModelLineage;
+import org.apache.maven.project.build.model.ModelLineage;
+
+import java.util.Properties;
+
+import junit.framework.TestCase;
+
+public class ModelPropertyProfileActivatorTest
+ extends TestCase
+{
+
+ private BuildContextManager buildContextManager;
+
+ public void setUp() throws Exception
+ {
+ super.setUp();
+
+ buildContextManager = new DefaultBuildContextManager();
+ }
+
+ public void testCanDetermineActivation_ShouldReturnFalseWhenNameNotSet()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ assertFalse( new ModelPropertyProfileActivator( null, "value", buildContextManager ).canDetermineActivation( profile ) );
+ }
+
+ public void testCanDetermineActivation_ShouldReturnFalseWhenLineageNotPresent()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ assertFalse( new ModelPropertyProfileActivator( "name", buildContextManager ).canDetermineActivation( profile ) );
+ }
+
+ public void testCanDetermineActivation_ShouldReturnTrueWhenNameSetAndLineagePresent()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( new Model(), null, null );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+ context.setModelLineage( lineage );
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "name", buildContextManager ).canDetermineActivation( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenNameNotSet()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ assertFalse( new ModelPropertyProfileActivator( null, "value", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenProjectContextIsMissing()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ assertFalse( new ModelPropertyProfileActivator( "name", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenModelLineageMissingFromProjectContext()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+ context.store( buildContextManager );
+
+ assertFalse( new ModelPropertyProfileActivator( "name", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenNoModelsInLineageContainProperties()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( new Model(), null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertFalse( new ModelPropertyProfileActivator( "name", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnTrueWhenModelPropertyNamePresentAndValueNotConfigured()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value" );
+
+ model.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "name", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenModelPropertyNamePresentValueNotConfigedAndNameConfigNegated()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value" );
+
+ model.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertFalse( new ModelPropertyProfileActivator( "!name", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnTrueWhenModelPropertyNameMissingValueNotConfigedAndNameConfigNegated()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+
+ model.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "!name", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnTrueWhenNameAndValueMatch()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value" );
+
+ model.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "name", "value", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnTrueWhenNameAndValueMatchInParentModel()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Model parentModel = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value" );
+
+ parentModel.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+ lineage.addParent( parentModel, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "name", "value", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenNameMatchesAndValueDoesntMatch()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value1" );
+
+ model.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertFalse( new ModelPropertyProfileActivator( "name", "value", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnTrueWhenNameNegatedAndValueDoesntMatch()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value1" );
+
+ model.setProperties( props );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "!name", "value", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnTrueWhenNameNegatedAndValueDoesntMatchButValueInParentDoesMatch()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+ props.setProperty( "name", "value1" );
+
+ model.setProperties( props );
+
+ Model parent = new Model();
+
+ Properties parentProps = new Properties();
+ parentProps.setProperty( "name", "value" );
+
+ parent.setProperties( parentProps );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+ lineage.addParent( parent, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertTrue( new ModelPropertyProfileActivator( "!name", "value", buildContextManager ).isActive( profile ) );
+ }
+
+ public void testIsActive_ShouldReturnFalseWhenNameNegatedAndParentHasValue()
+ {
+ Profile profile = new Profile();
+ profile.setId( "test-profile" );
+
+ ProjectBuildContext context = ProjectBuildContext.getProjectBuildContext( buildContextManager, true );
+
+ Model model = new Model();
+
+ Properties props = new Properties();
+
+ model.setProperties( props );
+
+ Model parent = new Model();
+
+ Properties parentProps = new Properties();
+ parentProps.setProperty( "name", "value" );
+
+ parent.setProperties( parentProps );
+
+ ModelLineage lineage = new DefaultModelLineage();
+ lineage.setOrigin( model, null, null );
+ lineage.addParent( parent, null, null );
+
+ context.setModelLineage( lineage );
+
+ context.store( buildContextManager );
+
+ assertFalse( new ModelPropertyProfileActivator( "!name", buildContextManager ).isActive( profile ) );
+ }
+
+}
Propchange: maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: maven/sandbox/trunk/shared/maven-extra-profile-activators/src/test/java/org/apache/maven/shared/profiles/ModelPropertyProfileActivatorTest.java
------------------------------------------------------------------------------
svn:keywords = "Author Date Id Revision"