Merge remote-tracking branch 'origin/master'
[idea/community.git] / plugins / junit5_rt / src / com / intellij / junit5 / JUnit5TestRunnerUtil.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.junit5;
17
18 import org.junit.gen5.engine.discovery.NameBasedSelector;
19 import org.junit.gen5.launcher.TestDiscoveryRequest;
20 import org.junit.gen5.launcher.main.TestDiscoveryRequestBuilder;
21
22 import java.io.BufferedReader;
23 import java.io.FileReader;
24 import java.io.IOException;
25 import java.util.ArrayList;
26 import java.util.Collections;
27 import java.util.List;
28 import java.util.stream.Collectors;
29
30 public class JUnit5TestRunnerUtil {
31   
32   public static TestDiscoveryRequest buildRequest(String[] suiteClassNames, String[] packageNameRef) {
33     if (suiteClassNames.length == 0) {
34       return null;
35     }
36
37     final TestDiscoveryRequestBuilder builder = TestDiscoveryRequestBuilder.request();
38     final List<String> lines = new ArrayList<>();
39
40
41     if (suiteClassNames.length == 1 && suiteClassNames[0].charAt(0) == '@') {
42       // all tests in the package specified
43       try {
44         BufferedReader reader = new BufferedReader(new FileReader(suiteClassNames[0].substring(1)));
45         try {
46           final String packageName = reader.readLine();
47           if (packageName == null) return null;
48
49           //todo category?
50           final String categoryName = reader.readLine();
51           String line;
52
53           while ((line = reader.readLine()) != null) {
54             lines.add(line);
55           }
56           packageNameRef[0] = packageName.length() == 0 ? "<default package>" : packageName;
57         }
58         finally {
59           reader.close();
60         }
61       }
62       catch (IOException e) {
63         e.printStackTrace();
64         System.exit(1);
65       }
66     }
67     else {
68       Collections.addAll(lines, suiteClassNames);
69     }
70
71     final List<String> mappedLines = lines.stream().map(line -> line.replaceFirst(",", "#")).collect(Collectors.toList());
72     return builder.select(NameBasedSelector.forNames(mappedLines)).build();
73   }
74
75 }