View Javadoc
1   package org.apache.maven.toolchain.building;
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  import static org.junit.Assert.assertNotNull;
24  import static org.mockito.ArgumentMatchers.any;
25  import static org.mockito.Mockito.when;
26  
27  import java.io.IOException;
28  import java.io.InputStream;
29  
30  import org.apache.maven.building.StringSource;
31  import org.apache.maven.toolchain.io.ToolchainsParseException;
32  import org.apache.maven.toolchain.io.ToolchainsReader;
33  import org.apache.maven.toolchain.model.PersistedToolchains;
34  import org.apache.maven.toolchain.model.ToolchainModel;
35  import org.junit.Before;
36  import org.junit.Test;
37  import org.mockito.ArgumentMatchers;
38  import org.mockito.InjectMocks;
39  import org.mockito.Mock;
40  import org.mockito.MockitoAnnotations;
41  
42  public class DefaultToolchainsBuilderTest
43  {
44      private static final String LS = System.getProperty( "line.separator" );
45      
46      @Mock
47      private ToolchainsReader toolchainsReader;
48  
49      @InjectMocks
50      private DefaultToolchainsBuilder toolchainBuilder = new DefaultToolchainsBuilder();
51  
52      @Before
53      public void onSetup()
54      {
55          MockitoAnnotations.initMocks( this );
56      }
57  
58      @Test
59      public void testBuildEmptyRequest()
60          throws Exception
61      {
62          ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
63          ToolchainsBuildingResult result = toolchainBuilder.build( request );
64          assertNotNull( result.getEffectiveToolchains() );
65          assertNotNull( result.getProblems() );
66          assertEquals( 0, result.getProblems().size() );
67      }
68  
69      @Test
70      public void testBuildRequestWithUserToolchains()
71          throws Exception
72      {
73          ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
74          request.setUserToolchainsSource( new StringSource( "" ) );
75  
76          PersistedToolchains userResult = new PersistedToolchains();
77          ToolchainModel toolchain = new ToolchainModel();
78          toolchain.setType( "TYPE" );
79          toolchain.addProvide( "key", "user_value" );
80          userResult.addToolchain(  toolchain );
81          when( toolchainsReader.read( any( InputStream.class ), ArgumentMatchers.<String, Object>anyMap()) ).thenReturn( userResult );
82  
83          ToolchainsBuildingResult result = toolchainBuilder.build( request );
84          assertNotNull( result.getEffectiveToolchains() );
85          assertEquals( 1, result.getEffectiveToolchains().getToolchains().size() );
86          assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(0).getType() );
87          assertEquals( "user_value", result.getEffectiveToolchains().getToolchains().get(0).getProvides().getProperty( "key" ) );
88          assertNotNull( result.getProblems() );
89          assertEquals( 0, result.getProblems().size() );
90      }
91  
92      @Test
93      public void testBuildRequestWithGlobalToolchains()
94          throws Exception
95      {
96          ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
97          request.setGlobalToolchainsSource( new StringSource( "" ) );
98  
99          PersistedToolchains globalResult = new PersistedToolchains();
100         ToolchainModel toolchain = new ToolchainModel();
101         toolchain.setType( "TYPE" );
102         toolchain.addProvide( "key", "global_value" );
103         globalResult.addToolchain(  toolchain );
104         when( toolchainsReader.read( any( InputStream.class ), ArgumentMatchers.<String, Object>anyMap()) ).thenReturn( globalResult );
105 
106         ToolchainsBuildingResult result = toolchainBuilder.build( request );
107         assertNotNull( result.getEffectiveToolchains() );
108         assertEquals( 1, result.getEffectiveToolchains().getToolchains().size() );
109         assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(0).getType() );
110         assertEquals( "global_value", result.getEffectiveToolchains().getToolchains().get(0).getProvides().getProperty( "key" ) );
111         assertNotNull( result.getProblems() );
112         assertEquals( 0, result.getProblems().size() );
113     }
114 
115     @Test
116     public void testBuildRequestWithBothToolchains()
117         throws Exception
118     {
119         ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
120         request.setGlobalToolchainsSource( new StringSource( "" ) );
121         request.setUserToolchainsSource( new StringSource( "" ) );
122 
123         PersistedToolchains userResult = new PersistedToolchains();
124         ToolchainModel userToolchain = new ToolchainModel();
125         userToolchain.setType( "TYPE" );
126         userToolchain.addProvide( "key", "user_value" );
127         userResult.addToolchain(  userToolchain );
128 
129         PersistedToolchains globalResult = new PersistedToolchains();
130         ToolchainModel globalToolchain = new ToolchainModel();
131         globalToolchain.setType( "TYPE" );
132         globalToolchain.addProvide( "key", "global_value" );
133         globalResult.addToolchain(  globalToolchain );
134         when( toolchainsReader.read( any( InputStream.class ), ArgumentMatchers.<String, Object>anyMap()) ).thenReturn( globalResult ).thenReturn( userResult );
135 
136         ToolchainsBuildingResult result = toolchainBuilder.build( request );
137         assertNotNull( result.getEffectiveToolchains() );
138         assertEquals( 2, result.getEffectiveToolchains().getToolchains().size() );
139         assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(0).getType() );
140         assertEquals( "user_value", result.getEffectiveToolchains().getToolchains().get(0).getProvides().getProperty( "key" ) );
141         assertEquals( "TYPE", result.getEffectiveToolchains().getToolchains().get(1).getType() );
142         assertEquals( "global_value", result.getEffectiveToolchains().getToolchains().get(1).getProvides().getProperty( "key" ) );
143         assertNotNull( result.getProblems() );
144         assertEquals( 0, result.getProblems().size() );
145     }
146     
147     @Test
148     public void testStrictToolchainsParseException() throws Exception
149     {
150         ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
151         request.setGlobalToolchainsSource( new StringSource( "" ) );
152         ToolchainsParseException parseException = new ToolchainsParseException( "MESSAGE", 4, 2 );
153         when( toolchainsReader.read( any( InputStream.class ), ArgumentMatchers.<String, Object>anyMap()) ).thenThrow( parseException );
154         
155         try
156         {
157             toolchainBuilder.build( request );
158         }
159         catch ( ToolchainsBuildingException e )
160         {
161             assertEquals( "1 problem was encountered while building the effective toolchains" + LS + 
162                 "[FATAL] Non-parseable toolchains (memory): MESSAGE @ line 4, column 2" + LS, e.getMessage() );
163         }
164     }
165     
166     @Test
167     public void testIOException() throws Exception
168     {
169         ToolchainsBuildingRequest request = new DefaultToolchainsBuildingRequest();
170         request.setGlobalToolchainsSource( new StringSource( "", "LOCATION" ) );
171         IOException ioException = new IOException( "MESSAGE" );
172         when( toolchainsReader.read( any( InputStream.class ), ArgumentMatchers.<String, Object>anyMap()) ).thenThrow( ioException );
173         
174         try
175         {
176             toolchainBuilder.build( request );
177         }
178         catch ( ToolchainsBuildingException e )
179         {
180             assertEquals( "1 problem was encountered while building the effective toolchains" + LS + 
181                 "[FATAL] Non-readable toolchains LOCATION: MESSAGE" + LS, e.getMessage() );
182         }
183     }
184     
185 }