View Javadoc
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  }