1 package org.apache.maven.plugin.surefire.booterclient;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.File;
23 import java.io.IOException;
24
25 import org.apache.maven.plugin.surefire.SurefireProperties;
26 import org.apache.maven.surefire.booter.BooterConstants;
27 import org.apache.maven.surefire.booter.ClassLoaderConfiguration;
28 import org.apache.maven.surefire.booter.ClasspathConfiguration;
29 import org.apache.maven.surefire.booter.KeyValueSource;
30 import org.apache.maven.surefire.booter.ProviderConfiguration;
31 import org.apache.maven.surefire.booter.StartupConfiguration;
32 import org.apache.maven.surefire.booter.SystemPropertyManager;
33 import org.apache.maven.surefire.report.ReporterConfiguration;
34 import org.apache.maven.surefire.testset.DirectoryScannerParameters;
35 import org.apache.maven.surefire.testset.RunOrderParameters;
36 import org.apache.maven.surefire.testset.TestArtifactInfo;
37 import org.apache.maven.surefire.testset.TestRequest;
38 import org.apache.maven.surefire.util.RunOrder;
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55 class BooterSerializer
56 {
57 private final ForkConfiguration forkConfiguration;
58
59 public BooterSerializer( ForkConfiguration forkConfiguration )
60 {
61 this.forkConfiguration = forkConfiguration;
62 }
63
64
65
66
67
68 public File serialize( KeyValueSource sourceProperties, ProviderConfiguration booterConfiguration,
69 StartupConfiguration providerConfiguration, Object testSet, boolean readTestsFromInStream )
70 throws IOException
71 {
72
73 SurefireProperties properties = new SurefireProperties( sourceProperties );
74
75 ClasspathConfiguration cp = providerConfiguration.getClasspathConfiguration();
76 properties.setClasspath( ClasspathConfiguration.CLASSPATH, cp.getTestClasspath() );
77 properties.setClasspath( ClasspathConfiguration.SUREFIRE_CLASSPATH, cp.getProviderClasspath() );
78 properties.setProperty( ClasspathConfiguration.ENABLE_ASSERTIONS, String.valueOf( cp.isEnableAssertions()) );
79 properties.setProperty( ClasspathConfiguration.CHILD_DELEGATION, String.valueOf( cp.isChildDelegation() ) );
80
81 TestArtifactInfo testNg = booterConfiguration.getTestArtifact();
82 if ( testNg != null )
83 {
84 properties.setProperty( BooterConstants.TESTARTIFACT_VERSION, testNg.getVersion() );
85 properties.setNullableProperty( BooterConstants.TESTARTIFACT_CLASSIFIER, testNg.getClassifier() );
86 }
87
88 properties.setProperty( BooterConstants.FORKTESTSET_PREFER_TESTS_FROM_IN_STREAM, readTestsFromInStream );
89 properties.setNullableProperty( BooterConstants.FORKTESTSET, getTypeEncoded( testSet ) );
90
91 TestRequest testSuiteDefinition = booterConfiguration.getTestSuiteDefinition();
92 if ( testSuiteDefinition != null )
93 {
94 properties.setProperty( BooterConstants.SOURCE_DIRECTORY, testSuiteDefinition.getTestSourceDirectory() );
95 properties.addList( testSuiteDefinition.getSuiteXmlFiles(), BooterConstants.TEST_SUITE_XML_FILES );
96 properties.setNullableProperty( BooterConstants.REQUESTEDTEST, testSuiteDefinition.getRequestedTest() );
97 properties.setNullableProperty( BooterConstants.REQUESTEDTESTMETHOD, testSuiteDefinition.getRequestedTestMethod() );
98 }
99
100 DirectoryScannerParameters directoryScannerParameters = booterConfiguration.getDirScannerParams();
101 if ( directoryScannerParameters != null )
102 {
103 properties.setProperty( BooterConstants.FAILIFNOTESTS,
104 String.valueOf( directoryScannerParameters.isFailIfNoTests() ) );
105 properties.addList( directoryScannerParameters.getIncludes(), BooterConstants.INCLUDES_PROPERTY_PREFIX );
106 properties.addList( directoryScannerParameters.getExcludes(), BooterConstants.EXCLUDES_PROPERTY_PREFIX );
107 properties.addList( directoryScannerParameters.getSpecificTests(),
108 BooterConstants.SPECIFIC_TEST_PROPERTY_PREFIX );
109
110 properties.setProperty( BooterConstants.TEST_CLASSES_DIRECTORY,
111 directoryScannerParameters.getTestClassesDirectory() );
112 }
113
114 final RunOrderParameters runOrderParameters = booterConfiguration.getRunOrderParameters();
115 if ( runOrderParameters != null )
116 {
117 properties.setProperty( BooterConstants.RUN_ORDER, RunOrder.asString( runOrderParameters.getRunOrder() ) );
118 properties.setProperty( BooterConstants.RUN_STATISTICS_FILE, runOrderParameters.getRunStatisticsFile() );
119 }
120
121 ReporterConfiguration reporterConfiguration = booterConfiguration.getReporterConfiguration();
122
123 Boolean rep = reporterConfiguration.isTrimStackTrace();
124 properties.setProperty( BooterConstants.ISTRIMSTACKTRACE, rep );
125 properties.setProperty( BooterConstants.REPORTSDIRECTORY, reporterConfiguration.getReportsDirectory() );
126 ClassLoaderConfiguration classLoaderConfiguration = providerConfiguration.getClassLoaderConfiguration();
127 properties.setProperty( BooterConstants.USESYSTEMCLASSLOADER,
128 String.valueOf( classLoaderConfiguration.isUseSystemClassLoader() ) );
129 properties.setProperty( BooterConstants.USEMANIFESTONLYJAR,
130 String.valueOf( classLoaderConfiguration.isUseManifestOnlyJar() ) );
131 properties.setProperty( BooterConstants.FAILIFNOTESTS,
132 String.valueOf( booterConfiguration.isFailIfNoTests() ) );
133 properties.setProperty( BooterConstants.PROVIDER_CONFIGURATION, providerConfiguration.getProviderClassName() );
134
135 return SystemPropertyManager.writePropertiesFile( properties,
136 forkConfiguration.getTempDirectory(), "surefire",
137 forkConfiguration.isDebug() );
138 }
139
140
141 private String getTypeEncoded( Object value )
142 {
143 if ( value == null )
144 {
145 return null;
146 }
147 String valueToUse;
148 if ( value instanceof Class )
149 {
150 valueToUse = ( (Class<?>) value ).getName();
151 }
152 else
153 {
154 valueToUse = value.toString();
155 }
156 return value.getClass().getName() + "|" + valueToUse;
157 }
158
159 }