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 org.apache.maven.toolchain.model.PersistedToolchains;
23  import org.apache.maven.toolchain.model.ToolchainModel;
24  import org.apache.maven.toolchain.model.TrackableBase;
25  import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
26  import org.codehaus.plexus.util.xml.Xpp3Dom;
27  import org.junit.Test;
28  
29  import java.io.InputStream;
30  
31  import static org.junit.Assert.assertEquals;
32  
33  public class MavenToolchainMergerTest
34  {
35      private MavenToolchainMerger merger = new MavenToolchainMerger();
36  
37      private MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
38  
39      @Test
40      public void testMergeNulls()
41      {
42          merger.merge( null, null, null );
43  
44          PersistedToolchains pt = new PersistedToolchains();
45          merger.merge( pt, null, null );
46          merger.merge( null, pt, null );
47      }
48  
49      @Test
50      public void testMergeJdk()
51          throws Exception
52      {
53          try ( InputStream isDominant = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
54                InputStream isRecessive = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" ) )
55          {
56              PersistedToolchains dominant = reader.read( isDominant );
57              PersistedToolchains recessive = reader.read( isRecessive );
58              assertEquals( 2, dominant.getToolchains().size() );
59  
60              merger.merge( dominant, recessive, TrackableBase.USER_LEVEL );
61              assertEquals( 2, dominant.getToolchains().size() );
62          }
63      }
64  
65      @Test
66      public void testMergeJdkExtra()
67          throws Exception
68      {
69          try ( InputStream jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
70                InputStream jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" ) )
71          {
72              PersistedToolchains jdks = reader.read( jdksIS );
73              PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
74              assertEquals( 2, jdks.getToolchains().size() );
75  
76              merger.merge( jdks, jdksExtra, TrackableBase.USER_LEVEL );
77              assertEquals( 4, jdks.getToolchains().size() );
78              assertEquals( 2, jdksExtra.getToolchains().size() );
79          }
80          try ( InputStream jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
81                InputStream 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              // switch dominant with recessive
88              merger.merge( jdksExtra, jdks, TrackableBase.USER_LEVEL );
89              assertEquals( 4, jdksExtra.getToolchains().size() );
90              assertEquals( 2, jdks.getToolchains().size() );
91          }
92      }
93  
94      @Test
95      public void testMergeJdkExtend()
96          throws Exception
97      {
98          try ( InputStream jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
99                InputStream jdksExtendIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extend.xml" ) )
100         {
101             PersistedToolchains jdks = reader.read( jdksIS );
102             PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
103             assertEquals( 2, jdks.getToolchains().size() );
104 
105             merger.merge( jdks, jdksExtend, TrackableBase.USER_LEVEL );
106             assertEquals( 2, jdks.getToolchains().size() );
107             Xpp3Dom config0 = (Xpp3Dom) jdks.getToolchains().get( 0 ).getConfiguration();
108             assertEquals( "lib/tools.jar", config0.getChild( "toolsJar" ).getValue() );
109             assertEquals( 2, config0.getChildCount() );
110             Xpp3Dom config1 = (Xpp3Dom) jdks.getToolchains().get( 1 ).getConfiguration();
111             assertEquals( 2, config1.getChildCount() );
112             assertEquals( "lib/classes.jar", config1.getChild( "toolsJar" ).getValue() );
113             assertEquals( 2, jdksExtend.getToolchains().size() );
114         }
115         try ( InputStream jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
116               InputStream jdksExtendIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extend.xml" ) )
117         {
118             PersistedToolchains jdks = reader.read( jdksIS );
119             PersistedToolchains jdksExtend = reader.read( jdksExtendIS );
120             assertEquals( 2, jdks.getToolchains().size() );
121 
122             // switch dominant with recessive
123             merger.merge( jdksExtend, jdks, TrackableBase.USER_LEVEL );
124             assertEquals( 2, jdksExtend.getToolchains().size() );
125             Xpp3Dom config0 = (Xpp3Dom) jdksExtend.getToolchains().get( 0 ).getConfiguration();
126             assertEquals( "lib/tools.jar", config0.getChild( "toolsJar" ).getValue() );
127             assertEquals( 2, config0.getChildCount() );
128             Xpp3Dom config1 = (Xpp3Dom) jdksExtend.getToolchains().get( 1 ).getConfiguration();
129             assertEquals( 2, config1.getChildCount() );
130             assertEquals( "lib/classes.jar", config1.getChild( "toolsJar" ).getValue() );
131             assertEquals( 2, jdks.getToolchains().size() );
132         }
133     }
134 
135 }