1 package org.apache.maven.toolchain;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import static org.junit.Assert.assertEquals;
23 import static org.junit.Assert.assertFalse;
24 import static org.junit.Assert.assertNotEquals;
25 import static org.mockito.Mockito.verify;
26
27 import java.io.InputStream;
28 import java.util.Collections;
29
30 import org.apache.maven.toolchain.java.DefaultJavaToolChain;
31 import org.apache.maven.toolchain.model.PersistedToolchains;
32 import org.apache.maven.toolchain.model.ToolchainModel;
33 import org.apache.maven.toolchain.model.io.xpp3.MavenToolchainsXpp3Reader;
34 import org.codehaus.plexus.logging.Logger;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.mockito.Mock;
38 import org.mockito.MockitoAnnotations;
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 assertEquals( tc1, tc1 );
145 assertNotEquals( tc1, tc2 );
146 assertNotEquals( tc2, tc1 );
147 assertEquals( tc2, tc2 );
148 }
149 }
150 }