1 package org.apache.maven.surefire.booter;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import javax.annotation.Nonnull;
23
24
25
26
27
28
29 public class StartupConfiguration
30 {
31 private static final String SUREFIRE_TEST_CLASSPATH = "surefire.test.class.path";
32
33 private final String providerClassName;
34 private final AbstractPathConfiguration classpathConfiguration;
35 private final ClassLoaderConfiguration classLoaderConfiguration;
36 private final boolean isForkRequested;
37 private final boolean isInForkedVm;
38 private final ProcessCheckerType processChecker;
39
40 public StartupConfiguration( @Nonnull String providerClassName,
41 @Nonnull AbstractPathConfiguration classpathConfiguration,
42 @Nonnull ClassLoaderConfiguration classLoaderConfiguration, boolean isForkRequested,
43 boolean inForkedVm, ProcessCheckerType processChecker )
44 {
45 this.classpathConfiguration = classpathConfiguration;
46 this.classLoaderConfiguration = classLoaderConfiguration;
47 this.isForkRequested = isForkRequested;
48 this.providerClassName = providerClassName;
49 isInForkedVm = inForkedVm;
50 this.processChecker = processChecker;
51 }
52
53 public boolean isProviderMainClass()
54 {
55 return providerClassName.endsWith( "#main" );
56 }
57
58 public static StartupConfiguration inForkedVm( String providerClassName,
59 ClasspathConfiguration classpathConfiguration,
60 ClassLoaderConfiguration classLoaderConfiguration,
61 ProcessCheckerType processChecker )
62 {
63 return new StartupConfiguration( providerClassName, classpathConfiguration, classLoaderConfiguration, true,
64 true, processChecker );
65 }
66
67 public AbstractPathConfiguration getClasspathConfiguration()
68 {
69 return classpathConfiguration;
70 }
71
72 @Deprecated
73 public boolean useSystemClassLoader()
74 {
75
76 return classLoaderConfiguration.isUseSystemClassLoader() && ( isInForkedVm || isForkRequested );
77 }
78
79 public boolean isManifestOnlyJarRequestedAndUsable()
80 {
81 return classLoaderConfiguration.isManifestOnlyJarRequestedAndUsable();
82 }
83
84 public String getProviderClassName()
85 {
86 return providerClassName;
87 }
88
89 public String getActualClassName()
90 {
91 return isProviderMainClass() ? stripEnd( providerClassName, "#main" ) : providerClassName;
92 }
93
94
95
96
97
98
99
100
101
102
103
104 private static String stripEnd( String str, String strip )
105 {
106 if ( str == null )
107 {
108 return null;
109 }
110 int end = str.length();
111
112 if ( strip == null )
113 {
114 while ( ( end != 0 ) && Character.isWhitespace( str.charAt( end - 1 ) ) )
115 {
116 end--;
117 }
118 }
119 else
120 {
121 while ( end != 0 && strip.indexOf( str.charAt( end - 1 ) ) != -1 )
122 {
123 end--;
124 }
125 }
126 return str.substring( 0, end );
127 }
128
129 public ClassLoaderConfiguration getClassLoaderConfiguration()
130 {
131 return classLoaderConfiguration;
132 }
133
134 public boolean isShadefire()
135 {
136 return providerClassName.startsWith( "org.apache.maven.shadefire.surefire" );
137 }
138
139 public void writeSurefireTestClasspathProperty()
140 {
141 getClasspathConfiguration().getTestClasspath().writeToSystemProperty( SUREFIRE_TEST_CLASSPATH );
142 }
143
144 public ProcessCheckerType getProcessChecker()
145 {
146 return processChecker;
147 }
148 }