1 package org.apache.maven.model.building;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.lang.reflect.Method;
23 import java.lang.reflect.ParameterizedType;
24 import java.lang.reflect.Type;
25 import java.util.List;
26 import java.util.stream.Collectors;
27 import java.util.stream.Stream;
28
29 import org.apache.maven.model.v4.MavenMerger;
30 import org.junit.jupiter.api.Test;
31
32 import static org.hamcrest.MatcherAssert.assertThat;
33 import static org.hamcrest.Matchers.hasItems;
34
35 public class FileToRawModelMergerTest
36 {
37
38
39
40
41 @Test
42 public void testOverriddenMergeMethods()
43 {
44 List<String> methodNames =
45 Stream.of( MavenMerger.class.getDeclaredMethods() )
46 .filter( m -> m.getName().startsWith( "merge" ) )
47 .filter( m ->
48 {
49 String baseName = m.getName().substring( 5 );
50 String entity = baseName.substring( baseName.indexOf( '_' ) + 1 );
51 try
52 {
53 Type returnType = m.getParameterTypes()[0].getMethod( "get" + entity ).getGenericReturnType();
54 if ( returnType instanceof ParameterizedType )
55 {
56 return !( (ParameterizedType) returnType ).getActualTypeArguments()[0].equals( String.class );
57 }
58 else
59 {
60 return false;
61 }
62 }
63 catch ( ReflectiveOperationException | SecurityException e )
64 {
65 return false;
66 }
67 } )
68 .map( Method::getName )
69 .collect( Collectors.toList() );
70
71 List<String> overriddenMethods =
72 Stream.of( FileToRawModelMerger.class.getDeclaredMethods() )
73 .map( Method::getName )
74 .filter( m -> m.startsWith( "merge" ) )
75 .collect( Collectors.toList() );
76
77 assertThat( overriddenMethods, hasItems( methodNames.toArray( new String[0] ) ) );
78 }
79
80
81 }