88
99import java .util .ArrayList ;
1010import java .util .List ;
11+ import java .util .stream .Collectors ;
12+ import java .util .stream .Stream ;
1113
1214/**
1315 * Provides methods for talking to the marklogic-unit-test REST extension.
@@ -81,12 +83,13 @@ public TestSuiteResult run(TestModule testModule) {
8183 * @return
8284 */
8385 public TestSuiteResult run (TestModule testModule , boolean runTeardown , boolean runSuiteTeardown , boolean calculateCoverage ) {
84- RequestParameters params = buildRequestParameters (testModule .getSuite (), FORMAT_NONE , runTeardown , runSuiteTeardown , calculateCoverage );
85-
86- String test = testModule .getTest ();
87- if (test != null ) {
88- params .add ("tests" , testModule .getTest ());
89- }
86+ RequestParameters params = new RunParameters ()
87+ .withTestNames (testModule .getTest ())
88+ .withFormat (FORMAT_NONE )
89+ .withRunSuiteTeardown (runSuiteTeardown )
90+ .withRunTeardown (runTeardown )
91+ .withCalculateCoverage (calculateCoverage )
92+ .toRequestParameters (testModule .getSuite ());
9093
9194 String xml = getServices ().post (params , (AbstractWriteHandle ) null , new StringHandle ()).get ();
9295 return unitTestXmlParser .parseTestSuiteResult (xml );
@@ -96,15 +99,17 @@ public TestSuiteResult run(TestModule testModule, boolean runTeardown, boolean r
9699 * @return a JUnitTestSuite for every suite found in the modules database
97100 */
98101 public List <JUnitTestSuite > runAllSuites () {
99- return runAllSuites (true , true , false );
102+ return runAllSuites (new RunParameters () );
100103 }
101104
102105 /**
103106 * @param runTeardown
104107 * @param runSuiteTeardown
105108 * @param calculateCoverage
106109 * @return a JUnitTestSuite for every suite found in the modules database
110+ * @deprecated since 1.4.0; prefer using {@code RunParameters}
107111 */
112+ @ Deprecated
108113 public List <JUnitTestSuite > runAllSuites (boolean runTeardown , boolean runSuiteTeardown , boolean calculateCoverage ) {
109114 List <String > suiteNames = listSuites ();
110115 List <JUnitTestSuite > suites = new ArrayList <>();
@@ -119,7 +124,7 @@ public List<JUnitTestSuite> runAllSuites(boolean runTeardown, boolean runSuiteTe
119124 * @return a JUnitTestSuite capturing the results of running the given suite name
120125 */
121126 public JUnitTestSuite runSuite (String suite ) {
122- return runSuite (suite , true , true , false );
127+ return runSuite (suite , new RunParameters () );
123128 }
124129
125130 /**
@@ -128,25 +133,118 @@ public JUnitTestSuite runSuite(String suite) {
128133 * @param runSuiteTeardown
129134 * @param calculateCoverage
130135 * @return
136+ * @deprecated since 1.4.0; prefer using {@code RunParameters}
131137 */
138+ @ Deprecated
132139 public JUnitTestSuite runSuite (String suite , boolean runTeardown , boolean runSuiteTeardown , boolean calculateCoverage ) {
133- RequestParameters params = buildRequestParameters (suite , FORMAT_JUNIT , runTeardown , runSuiteTeardown , calculateCoverage );
140+ RequestParameters params = new RunParameters ()
141+ .withFormat (FORMAT_JUNIT )
142+ .withRunSuiteTeardown (runSuiteTeardown )
143+ .withRunTeardown (runTeardown )
144+ .withCalculateCoverage (calculateCoverage )
145+ .toRequestParameters (suite );
146+
134147 String xml = getServices ().post (params , (AbstractWriteHandle ) null , new StringHandle ()).get ();
135148 return unitTestXmlParser .parseJUnitTestSuiteResult (xml );
136149 }
137150
138- protected RequestParameters buildRequestParameters (String suite , String format , boolean runTeardown , boolean runSuiteTeardown , boolean calculateCoverage ) {
139- RequestParameters params = new RequestParameters ();
140- params .add ("func" , "run" );
141- params .add ("suite" , suite );
142- params .add ("format" , format );
143- params .add ("runsuiteteardown" , String .valueOf (runSuiteTeardown ));
144- params .add ("runteardown" , String .valueOf (runTeardown ));
145- params .add ("calculatecoverage" , String .valueOf (calculateCoverage ));
146- return params ;
151+ /**
152+ * Run a single suite with the given parameters.
153+ *
154+ * @param params
155+ * @return
156+ * @since 1.4.0
157+ */
158+ public JUnitTestSuite runSuite (String suiteName , RunParameters params ) {
159+ String xml = getServices ().post (params .toRequestParameters (suiteName ), (AbstractWriteHandle ) null , new StringHandle ()).get ();
160+ return unitTestXmlParser .parseJUnitTestSuiteResult (xml );
161+ }
162+
163+ /**
164+ * Run all suites using the given parameters.
165+ *
166+ * @since 1.4.0
167+ */
168+ public List <JUnitTestSuite > runAllSuites (RunParameters params ) {
169+ return this .listSuites ().stream ().map (suite -> runSuite (suite , params )).collect (Collectors .toList ());
170+ }
171+
172+ /**
173+ * Runs each suite identified by {@code suiteNames}, using the parameters in the given {@code RunParameters}
174+ * instance.
175+ *
176+ * @since 1.4.0
177+ */
178+ public List <JUnitTestSuite > runSuites (List <String > suiteNames , RunParameters params ) {
179+ return suiteNames .stream ().map (suiteName -> runSuite (suiteName , params )).collect (Collectors .toList ());
147180 }
148181
149182 public void setUnitTestXmlParser (ServiceResponseUnmarshaller unitTestXmlParser ) {
150183 this .unitTestXmlParser = unitTestXmlParser ;
151184 }
185+
186+ /**
187+ * Simplifies constructing a set of request parameters to pass to the marklogic-unit-test REST extension.
188+ *
189+ * @since 1.4.0
190+ */
191+ public static class RunParameters {
192+
193+ private String [] testNames ;
194+ private boolean runSuiteTeardown = true ;
195+ private boolean runTeardown = true ;
196+ private boolean calculateCoverage = false ;
197+ private String format = "junit" ;
198+
199+ public RunParameters () {
200+ }
201+
202+ public RunParameters (String ... testNames ) {
203+ this ();
204+ withTestNames (testNames );
205+ }
206+
207+ public RunParameters withTestNames (String ... testNames ) {
208+ this .testNames = testNames ;
209+ return this ;
210+ }
211+
212+ public RunParameters withFormat (String format ) {
213+ this .format = format ;
214+ return this ;
215+ }
216+
217+ public RunParameters withRunSuiteTeardown (boolean runSuiteTeardown ) {
218+ this .runSuiteTeardown = runSuiteTeardown ;
219+ return this ;
220+ }
221+
222+ public RunParameters withRunTeardown (boolean runTeardown ) {
223+ this .runTeardown = runTeardown ;
224+ return this ;
225+ }
226+
227+ public RunParameters withCalculateCoverage (boolean calculateCoverage ) {
228+ this .calculateCoverage = calculateCoverage ;
229+ return this ;
230+ }
231+
232+ public RequestParameters toRequestParameters (String suiteName ) {
233+ RequestParameters params = new RequestParameters ();
234+ params .add ("run" , "func" );
235+ if (suiteName != null ) {
236+ params .add ("suite" , suiteName );
237+ }
238+ if (format != null ) {
239+ params .add ("format" , format );
240+ }
241+ if (testNames != null ) {
242+ params .add ("tests" , Stream .of (testNames ).collect (Collectors .joining ("," )));
243+ }
244+ params .add ("runsuiteteardown" , String .valueOf (runSuiteTeardown ));
245+ params .add ("runteardown" , String .valueOf (runTeardown ));
246+ params .add ("calculatecoverage" , String .valueOf (calculateCoverage ));
247+ return params ;
248+ }
249+ }
152250}
0 commit comments