1 package org.apache.maven.surefire.testng.conf;
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.util.ArrayList;
24 import java.util.HashMap;
25 import java.util.Iterator;
26 import java.util.Map;
27
28 import org.apache.maven.surefire.booter.ProviderParameterNames;
29 import org.apache.maven.surefire.testset.TestSetFailedException;
30 import org.testng.TestNG;
31 import org.testng.xml.XmlSuite;
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 public class TestNGMapConfigurator
47 implements Configurator
48 {
49 public void configure( TestNG testng, Map options )
50 throws TestSetFailedException
51 {
52 Map convertedOptions = getConvertedOptions( options );
53 testng.configure( convertedOptions );
54 }
55
56 public void configure( XmlSuite suite, Map options )
57 throws TestSetFailedException
58 {
59 String threadCountString = (String) options.get( ProviderParameterNames.THREADCOUNT_PROP );
60 int threadCount = ( null != threadCountString ) ? Integer.parseInt( threadCountString ) : 1;
61 suite.setThreadCount( threadCount );
62
63 String parallel = (String) options.get( ProviderParameterNames.PARALLEL_PROP );
64 if ( parallel != null ) {
65 suite.setParallel( parallel );
66 }
67 }
68
69 Map getConvertedOptions( Map options )
70 throws TestSetFailedException
71 {
72 Map convertedOptions = new HashMap();
73 convertedOptions.put( "-mixed", Boolean.FALSE );
74 for ( Iterator it = options.entrySet().iterator(); it.hasNext(); )
75 {
76 Map.Entry entry = (Map.Entry) it.next();
77 String key = (String) entry.getKey();
78 Object val = entry.getValue();
79 if ( "listener".equals( key ) )
80 {
81 val = AbstractDirectConfigurator.loadListenerClasses( (String) val );
82 }
83 if ( "objectfactory".equals( key ) )
84 {
85 val = AbstractDirectConfigurator.loadClass( (String) val );
86 }
87 if ( "reporter".equals( key ) )
88 {
89
90 val = convertReporterConfig( val );
91 key = "reporterslist";
92
93 }
94 if ( "junit".equals( key ) )
95 {
96 val = convert( val, Boolean.class );
97 }
98 else if ( "skipfailedinvocationcounts".equals( key ) )
99 {
100 val = convert( val, Boolean.class );
101 }
102 else if ( "mixed".equals( key ) )
103 {
104 val = convert( val, Boolean.class );
105 }
106 else if ( "configfailurepolicy".equals( key ) )
107 {
108 val = convert( val, String.class );
109 }
110 else if ( "group-by-instances".equals( key ) )
111 {
112 val = convert( val, Boolean.class );
113 }
114 else if ( ProviderParameterNames.THREADCOUNT_PROP.equals( key ) )
115 {
116 val = convert( val, String.class );
117 }
118
119 if ( key.startsWith( "-" ) )
120 {
121 convertedOptions.put( key, val );
122 }
123 else
124 {
125 convertedOptions.put( "-" + key, val );
126 }
127 }
128 return convertedOptions;
129 }
130
131
132 private Object convertReporterConfig( Object val )
133 {
134 final String reporterConfigClassName = "org.testng.ReporterConfig";
135 try
136 {
137 Class reporterConfig = Class.forName( reporterConfigClassName );
138 Method deserialize = reporterConfig.getMethod( "deserialize", new Class[]{ String.class } );
139 Object rc = deserialize.invoke( null, new Object[]{ val } );
140 ArrayList reportersList = new ArrayList();
141 reportersList.add( rc );
142 return reportersList;
143 }
144 catch ( Exception e )
145 {
146 return val;
147 }
148 }
149
150 protected Object convert( Object val, Class type )
151 {
152 if ( val == null )
153 {
154 return null;
155 }
156 if ( type.isAssignableFrom( val.getClass() ) )
157 {
158 return val;
159 }
160
161 if ( ( Boolean.class.equals( type ) || boolean.class.equals( type ) ) && String.class.equals( val.getClass() ) )
162 {
163 return Boolean.valueOf( (String) val );
164 }
165
166 if ( String.class.equals( type ) )
167 {
168 return val.toString();
169 }
170
171 return val;
172 }
173 }