1 package net.avcompris.commons3.api.tests;
2
3 import java.io.FileNotFoundException;
4 import java.io.InputStream;
5 import java.util.ArrayList;
6 import java.util.Collection;
7 import java.util.List;
8 import java.util.stream.Collectors;
9 import java.util.stream.Stream;
10
11 import org.junit.jupiter.params.provider.Arguments;
12
13 import net.avcompris.commons3.api.tests.TestsSpec.TestSpec;
14
15 public abstract class ApiTestsUtils {
16
17 public static Stream<Arguments> testSpecs(final Class<?>... classes) throws Exception {
18
19 final Collection<Object[]> parameters = parameters(classes);
20
21 final Collection<TestSpec> testSpecs = parameters.stream()
22 .map(args -> (TestSpec) args[0])
23 .collect(Collectors.toList());
24
25 TestSpecParametersExtension.inject(testSpecs);
26
27 return testSpecs.stream()
28 .map(testSpec -> Arguments.of(testSpec));
29 }
30
31 private static Collection<Object[]> parameters(final Class<?>... classes) throws Exception {
32
33 final String RESOURCE_PATH = "api-tests.yml";
34
35 final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(RESOURCE_PATH);
36
37 if (is == null) {
38 throw new FileNotFoundException("Cannot find resource: " + RESOURCE_PATH);
39 }
40
41 final TestsSpec spec;
42
43 try {
44
45 spec = TestsSpec.load(is, classes);
46
47 } finally {
48 is.close();
49 }
50
51 final List<Object[]> parameters = new ArrayList<>();
52
53 for (final TestSpec test : spec.getTests()) {
54
55 parameters.add(new Object[] {
56
57 test,
58
59 });
60 }
61
62 return parameters;
63 }
64 }