View Javadoc
1   package org.apache.maven.toolchain;
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.java.DefaultJavaToolChain;
23  import org.apache.maven.toolchain.model.PersistedToolchains;
24  import org.apache.maven.toolchain.model.ToolchainModel;
25  import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
26  import org.codehaus.plexus.logging.Logger;
27  import org.junit.Before;
28  import org.junit.Test;
29  import org.mockito.Mock;
30  import org.mockito.MockitoAnnotations;
31  
32  import java.io.InputStream;
33  import java.util.Collections;
34  
35  import static org.junit.Assert.assertEquals;
36  import static org.junit.Assert.assertFalse;
37  import static org.junit.Assert.assertTrue;
38  import static org.mockito.Mockito.verify;
39  
40  public class DefaultToolchainTest
41  {
42      @Mock
43      private Logger logger;
44  
45      private MavenToolchainsXpp3Reader reader = new MavenToolchainsXpp3Reader();
46  
47      @Before
48      public void setUp()
49          throws Exception
50      {
51          MockitoAnnotations.initMocks( this );
52      }
53  
54      private DefaultToolchain newDefaultToolchain( ToolchainModel model )
55      {
56          return new DefaultToolchain( model, logger )
57          {
58              @Override
59              public String findTool( String toolName )
60              {
61                  return null;
62              }
63          };
64      }
65  
66      private DefaultToolchain newDefaultToolchain( ToolchainModel model, String type )
67      {
68          return new DefaultToolchain( model, type, logger )
69          {
70              @Override
71              public String findTool( String toolName )
72              {
73                  return null;
74              }
75          };
76      }
77  
78      @Test
79      public void testGetModel()
80      {
81          ToolchainModel model = new ToolchainModel();
82          DefaultToolchain toolchain = newDefaultToolchain( model );
83          assertEquals( model, toolchain.getModel() );
84      }
85  
86      @Test
87      public void testGetType()
88      {
89          ToolchainModel model = new ToolchainModel();
90          DefaultToolchain toolchain = newDefaultToolchain( model, "TYPE" );
91          assertEquals( "TYPE", toolchain.getType() );
92  
93          model.setType( "MODEL_TYPE" );
94          toolchain = newDefaultToolchain( model );
95          assertEquals( "MODEL_TYPE", toolchain.getType() );
96      }
97  
98      @Test
99      public void testGetLogger()
100     {
101         ToolchainModel model = new ToolchainModel();
102         DefaultToolchain toolchain = newDefaultToolchain( model );
103         assertEquals( logger, toolchain.getLog() );
104     }
105 
106     @Test
107     public void testMissingRequirementProperty()
108     {
109         ToolchainModel model = new ToolchainModel();
110         model.setType( "TYPE" );
111         DefaultToolchain toolchain = newDefaultToolchain( model );
112 
113         assertFalse( toolchain.matchesRequirements( Collections.singletonMap( "name", "John Doe" ) ) );
114         verify( logger ).debug( "Toolchain type:TYPE{} is missing required property: name" );
115     }
116 
117 
118     @Test
119     public void testNonMatchingRequirementProperty()
120     {
121         ToolchainModel model = new ToolchainModel();
122         model.setType( "TYPE" );
123         DefaultToolchain toolchain = newDefaultToolchain( model );
124         toolchain.addProvideToken( "name", RequirementMatcherFactory.createExactMatcher( "Jane Doe" ) );
125 
126         assertFalse( toolchain.matchesRequirements( Collections.singletonMap( "name", "John Doe" ) ) );
127         verify( logger ).debug( "Toolchain type:TYPE{name = Jane Doe} doesn't match required property: name" );
128     }
129 
130 
131     @Test
132     public void testEquals()
133         throws Exception
134     {
135         try ( InputStream jdksIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks.xml" );
136               InputStream jdksExtraIS = ToolchainModel.class.getResourceAsStream( "toolchains-jdks-extra.xml" ) )
137         {
138             PersistedToolchains jdks = reader.read( jdksIS );
139             PersistedToolchains jdksExtra = reader.read( jdksExtraIS );
140 
141             DefaultToolchain tc1 = new DefaultJavaToolChain( jdks.getToolchains().get( 0 ), null );
142             DefaultToolchain tc2 = new DefaultJavaToolChain( jdksExtra.getToolchains().get( 0 ), null );
143 
144             assertTrue( tc1.equals( tc1 ) );
145             assertFalse( tc1.equals( tc2 ) );
146             assertFalse( tc2.equals( tc1 ) );
147             assertTrue( tc2.equals( tc2 ) );
148         }
149     }
150 }