001package org.apache.maven.toolchain.merge;
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 static org.junit.Assert.assertEquals;
023
024import java.io.InputStream;
025
026import org.apache.maven.toolchain.model.PersistedToolchains;
027import org.apache.maven.toolchain.model.ToolchainModel;
028import org.apache.maven.toolchain.model.TrackableBase;
029import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
030import org.codehaus.plexus.util.IOUtil;
031import org.codehaus.plexus.util.xml.Xpp3Dom;
032import org.junit.Test;
033
034public class MavenToolchainMergerTest
035{
036    private MavenToolchainMerger merger = new MavenToolchainMerger();
037
038    private MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
039
040    @Test
041    public void testMergeNulls()
042    {
043        merger.merge( null, null, null );
044        
045        PersistedToolchains pt = new PersistedToolchains();
046        merger.merge( pt, null, null );
047        merger.merge( null, pt, null );
048    }
049    
050    @Test
051    public void testMergeJdk() throws Exception
052    {
053        InputStream isDominant = null;
054        InputStream isRecessive = null;
055        try 
056        {
057            isDominant = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
058            isRecessive = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
059            
060            PersistedToolchains dominant = reader.read( isDominant );
061            PersistedToolchains recessive = reader.read( isRecessive );
062            assertEquals( 2, dominant.getToolchains().size() );
063            
064            merger.merge( dominant, recessive, TrackableBase.USER_LEVEL );
065            assertEquals( 2, dominant.getToolchains().size() );
066        }
067        finally
068        {
069            IOUtil.close( isDominant );
070        }
071    }
072
073    @Test
074    public void testMergeJdkExtra() throws Exception
075    {
076        InputStream jdksIS = null;
077        InputStream jdksExtraIS = null;
078        try 
079        {
080            jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
081            jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" );
082            
083            PersistedToolchains jdks = reader.read( jdksIS );
084            PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
085            assertEquals( 2, jdks.getToolchains().size() );
086            
087            merger.merge( jdks, jdksExtra, TrackableBase.USER_LEVEL );
088            assertEquals( 4, jdks.getToolchains().size() );
089            assertEquals( 2, jdksExtra.getToolchains().size() );
090        }
091        finally
092        {
093            IOUtil.close( jdksIS );
094            IOUtil.close( jdksExtraIS );
095        }
096        
097        try 
098        {
099            jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
100            jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" );
101            
102            PersistedToolchains jdks = reader.read( jdksIS );
103            PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
104            assertEquals( 2, jdks.getToolchains().size() );
105            
106            // switch dominant with reccessive
107            merger.merge( jdksExtra, jdks, TrackableBase.USER_LEVEL );
108            assertEquals( 4, jdksExtra.getToolchains().size() );
109            assertEquals( 2, jdks.getToolchains().size() );
110        }
111        finally
112        {
113            IOUtil.close( jdksIS );
114            IOUtil.close( jdksExtraIS );
115        }
116    }
117    
118    @Test
119    public void testMergeJdkExtend() throws Exception
120    {
121        InputStream jdksIS = null;
122        InputStream jdksExtendIS = null;
123        try 
124        {
125            jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
126            jdksExtendIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extend.xml" );
127            
128            PersistedToolchains jdks = reader.read( jdksIS );
129            PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
130            assertEquals( 2, jdks.getToolchains().size() );
131            
132            merger.merge( jdks, jdksExtend, TrackableBase.USER_LEVEL );
133            assertEquals( 2, jdks.getToolchains().size() );
134            Xpp3Dom config0 = (Xpp3Dom) jdks.getToolchains().get( 0 ).getConfiguration(); 
135            assertEquals( "lib/tools.jar", config0.getChild( "toolsJar" ).getValue() );
136            assertEquals( 2, config0.getChildCount() );
137            Xpp3Dom config1 = (Xpp3Dom) jdks.getToolchains().get( 1 ).getConfiguration();
138            assertEquals( 2, config1.getChildCount() );
139            assertEquals( "lib/classes.jar", config1.getChild( "toolsJar" ).getValue() );
140            assertEquals( 2, jdksExtend.getToolchains().size() );
141        }
142        finally
143        {
144            IOUtil.close( jdksIS );
145            IOUtil.close( jdksExtendIS );
146        }
147        
148        try 
149        {
150            jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
151            jdksExtendIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extend.xml" );
152            
153            PersistedToolchains jdks = reader.read( jdksIS );
154            PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
155            assertEquals( 2, jdks.getToolchains().size() );
156            
157            // switch dominant with reccessive
158            merger.merge( jdksExtend, jdks, TrackableBase.USER_LEVEL );
159            assertEquals( 2, jdksExtend.getToolchains().size() );
160            Xpp3Dom config0 = (Xpp3Dom) jdksExtend.getToolchains().get( 0 ).getConfiguration(); 
161            assertEquals( "lib/tools.jar", config0.getChild( "toolsJar" ).getValue() );
162            assertEquals( 2, config0.getChildCount() );
163            Xpp3Dom config1 = (Xpp3Dom) jdksExtend.getToolchains().get( 1 ).getConfiguration();
164            assertEquals( 2, config1.getChildCount() );
165            assertEquals( "lib/classes.jar", config1.getChild( "toolsJar" ).getValue() );
166            assertEquals( 2, jdks.getToolchains().size() );
167        }
168        finally
169        {
170            IOUtil.close( jdksIS );
171            IOUtil.close( jdksExtendIS );
172        }
173
174    }
175
176}