Merge branch 'master' into uta/complete-statement
[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 com.intellij.rt.execution.junit.JUnitStarter;
19 import org.junit.gen5.engine.discovery.NameBasedSelector;
20 import org.junit.gen5.engine.discovery.PackageSelector;
21 import org.junit.gen5.launcher.TestDiscoveryRequest;
22 import org.junit.gen5.launcher.main.TestDiscoveryRequestBuilder;
23
24 import java.io.BufferedReader;
25 import java.io.FileReader;
26 import java.io.IOException;
27 import java.util.ArrayList;
28 import java.util.Collections;
29 import java.util.List;
30 import java.util.stream.Collectors;
31
32 public class JUnit5TestRunnerUtil {
33
34   public static TestDiscoveryRequest buildRequest(String[] suiteClassNames, String[] packageNameRef) {
35     if (suiteClassNames.length == 0) {
36       return null;
37     }
38
39     final TestDiscoveryRequestBuilder builder = TestDiscoveryRequestBuilder.request();
40     final List<String> lines = new ArrayList<>();
41
42
43     if (suiteClassNames.length == 1 && suiteClassNames[0].charAt(0) == '@') {
44       // all tests in the package specified
45       try {
46         BufferedReader reader = new BufferedReader(new FileReader(suiteClassNames[0].substring(1)));
47         try {
48           final String packageName = reader.readLine();
49           if (packageName == null) return null;
50
51           //todo category?
52           final String categoryName = reader.readLine();
53           String line;
54
55           while ((line = reader.readLine()) != null) {
56             lines.add(line);
57           }
58           packageNameRef[0] = packageName.length() == 0 ? "<default package>" : packageName;
59           if (JUnitStarter.isJUnit5Preferred()) {
60             final PackageSelector selector = PackageSelector.forPackageName(packageName);
61             return builder.select(selector).build();
62           }
63         }
64         finally {
65           reader.close();
66         }
67       }
68       catch (IOException e) {
69         e.printStackTrace();
70         System.exit(1);
71       }
72     }
73     else {
74       Collections.addAll(lines, suiteClassNames);
75     }
76
77     final List<String> mappedLines = lines.stream().map(line -> line.replaceFirst(",", "#")).collect(Collectors.toList());
78     return builder.select(NameBasedSelector.forNames(mappedLines)).build();
79   }
80
81 }