001package org.apache.maven.model.profile.activation;
002
003/*
004 * Licensed to the Apache Software Foundation (ASF) under one
005 * or more contributor license agreements.  See the NOTICE file
006 * distributed with this work for additional information
007 * regarding copyright ownership.  The ASF licenses this file
008 * to you under the Apache License, Version 2.0 (the
009 * "License"); you may not use this file except in compliance
010 * with the License.  You may obtain a copy of the License at
011 *
012 *   http://www.apache.org/licenses/LICENSE-2.0
013 *
014 * Unless required by applicable law or agreed to in writing,
015 * software distributed under the License is distributed on an
016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
017 * KIND, either express or implied.  See the License for the
018 * specific language governing permissions and limitations
019 * under the License.
020 */
021
022import java.util.Properties;
023
024import org.apache.maven.model.Activation;
025import org.apache.maven.model.ActivationProperty;
026import org.apache.maven.model.Profile;
027
028/**
029 * Tests {@link PropertyProfileActivator}.
030 * 
031 * @author Benjamin Bentmann
032 */
033public class PropertyProfileActivatorTest
034    extends AbstractProfileActivatorTest<PropertyProfileActivator>
035{
036
037    public PropertyProfileActivatorTest()
038    {
039        super( PropertyProfileActivator.class );
040    }
041
042    private Profile newProfile( String key, String value )
043    {
044        ActivationProperty ap = new ActivationProperty();
045        ap.setName( key );
046        ap.setValue( value );
047
048        Activation a = new Activation();
049        a.setProperty( ap );
050
051        Profile p = new Profile();
052        p.setActivation( a );
053
054        return p;
055    }
056
057    private Properties newProperties( String key, String value )
058    {
059        Properties props = new Properties();
060        props.setProperty( key, value );
061        return props;
062    }
063
064    public void testNullSafe()
065        throws Exception
066    {
067        Profile p = new Profile();
068
069        assertActivation( false, p, newContext( null, null ) );
070
071        p.setActivation( new Activation() );
072
073        assertActivation( false, p, newContext( null, null ) );
074    }
075
076    public void testWithNameOnly_UserProperty()
077        throws Exception
078    {
079        Profile profile = newProfile( "prop", null );
080
081        assertActivation( true, profile, newContext( newProperties( "prop", "value" ), null ) );
082
083        assertActivation( false, profile, newContext( newProperties( "prop", "" ), null ) );
084
085        assertActivation( false, profile, newContext( newProperties( "other", "value" ), null ) );
086    }
087
088    public void testWithNameOnly_SystemProperty()
089        throws Exception
090    {
091        Profile profile = newProfile( "prop", null );
092
093        assertActivation( true, profile, newContext( null, newProperties( "prop", "value" ) ) );
094
095        assertActivation( false, profile, newContext( null, newProperties( "prop", "" ) ) );
096
097        assertActivation( false, profile, newContext( null, newProperties( "other", "value" ) ) );
098    }
099
100    public void testWithNegatedNameOnly_UserProperty()
101        throws Exception
102    {
103        Profile profile = newProfile( "!prop", null );
104
105        assertActivation( false, profile, newContext( newProperties( "prop", "value" ), null ) );
106
107        assertActivation( true, profile, newContext( newProperties( "prop", "" ), null ) );
108
109        assertActivation( true, profile, newContext( newProperties( "other", "value" ), null ) );
110    }
111
112    public void testWithNegatedNameOnly_SystemProperty()
113        throws Exception
114    {
115        Profile profile = newProfile( "!prop", null );
116
117        assertActivation( false, profile, newContext( null, newProperties( "prop", "value" ) ) );
118
119        assertActivation( true, profile, newContext( null, newProperties( "prop", "" ) ) );
120
121        assertActivation( true, profile, newContext( null, newProperties( "other", "value" ) ) );
122    }
123
124    public void testWithValue_UserProperty()
125        throws Exception
126    {
127        Profile profile = newProfile( "prop", "value" );
128
129        assertActivation( true, profile, newContext( newProperties( "prop", "value" ), null ) );
130
131        assertActivation( false, profile, newContext( newProperties( "prop", "other" ), null ) );
132
133        assertActivation( false, profile, newContext( newProperties( "prop", "" ), null ) );
134    }
135
136    public void testWithValue_SystemProperty()
137        throws Exception
138    {
139        Profile profile = newProfile( "prop", "value" );
140
141        assertActivation( true, profile, newContext( null, newProperties( "prop", "value" ) ) );
142
143        assertActivation( false, profile, newContext( null, newProperties( "prop", "other" ) ) );
144
145        assertActivation( false, profile, newContext( null, newProperties( "other", "" ) ) );
146    }
147
148    public void testWithNegatedValue_UserProperty()
149        throws Exception
150    {
151        Profile profile = newProfile( "prop", "!value" );
152
153        assertActivation( false, profile, newContext( newProperties( "prop", "value" ), null ) );
154
155        assertActivation( true, profile, newContext( newProperties( "prop", "other" ), null ) );
156
157        assertActivation( true, profile, newContext( newProperties( "prop", "" ), null ) );
158    }
159
160    public void testWithNegatedValue_SystemProperty()
161        throws Exception
162    {
163        Profile profile = newProfile( "prop", "!value" );
164
165        assertActivation( false, profile, newContext( null, newProperties( "prop", "value" ) ) );
166
167        assertActivation( true, profile, newContext( null, newProperties( "prop", "other" ) ) );
168
169        assertActivation( true, profile, newContext( null, newProperties( "other", "" ) ) );
170    }
171
172    public void testWithValue_UserPropertyDominantOverSystemProperty()
173        throws Exception
174    {
175        Profile profile = newProfile( "prop", "value" );
176
177        Properties props1 = newProperties( "prop", "value" );
178        Properties props2 = newProperties( "prop", "other" );
179
180        assertActivation( true, profile, newContext( props1, props2 ) );
181
182        assertActivation( false, profile, newContext( props2, props1 ) );
183    }
184
185}