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}