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