View Javadoc
1   package org.apache.maven.toolchain.merge;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import static org.junit.Assert.assertEquals;
23  
24  import java.io.InputStream;
25  
26  import org.apache.maven.toolchain.model.PersistedToolchains;
27  import org.apache.maven.toolchain.model.ToolchainModel;
28  import org.apache.maven.toolchain.model.TrackableBase;
29  import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
30  import org.codehaus.plexus.util.IOUtil;
31  import org.codehaus.plexus.util.xml.Xpp3Dom;
32  import org.junit.Test;
33  
34  public class MavenToolchainMergerTest
35  {
36      private MavenToolchainMerger merger = new MavenToolchainMerger();
37  
38      private MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
39  
40      @Test
41      public void testMergeNulls()
42      {
43          merger.merge( null, null, null );
44          
45          PersistedToolchains pt = new PersistedToolchains();
46          merger.merge( pt, null, null );
47          merger.merge( null, pt, null );
48      }
49      
50      @Test
51      public void testMergeJdk() throws Exception
52      {
53          InputStream isDominant = null;
54          InputStream isRecessive = null;
55          try 
56          {
57              isDominant = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
58              isRecessive = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
59              
60              PersistedToolchains dominant = reader.read( isDominant );
61              PersistedToolchains recessive = reader.read( isRecessive );
62              assertEquals( 2, dominant.getToolchains().size() );
63              
64              merger.merge( dominant, recessive, TrackableBase.USER_LEVEL );
65              assertEquals( 2, dominant.getToolchains().size() );
66          }
67          finally
68          {
69              IOUtil.close( isDominant );
70          }
71      }
72  
73      @Test
74      public void testMergeJdkExtra() throws Exception
75      {
76          InputStream jdksIS = null;
77          InputStream jdksExtraIS = null;
78          try 
79          {
80              jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
81              jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" );
82              
83              PersistedToolchains jdks = reader.read( jdksIS );
84              PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
85              assertEquals( 2, jdks.getToolchains().size() );
86              
87              merger.merge( jdks, jdksExtra, TrackableBase.USER_LEVEL );
88              assertEquals( 4, jdks.getToolchains().size() );
89              assertEquals( 2, jdksExtra.getToolchains().size() );
90          }
91          finally
92          {
93              IOUtil.close( jdksIS );
94              IOUtil.close( jdksExtraIS );
95          }
96          
97          try 
98          {
99              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 }