View Javadoc
1   /*-
2    * #%L
3    * io.earcam.instrumental.archive.osgi
4    * %%
5    * Copyright (C) 2018 earcam
6    * %%
7    * SPDX-License-Identifier: (BSD-3-Clause OR EPL-1.0 OR Apache-2.0 OR MIT)
8    * 
9    * You <b>must</b> choose to accept, in full - any individual or combination of 
10   * the following licenses:
11   * <ul>
12   * 	<li><a href="https://opensource.org/licenses/BSD-3-Clause">BSD-3-Clause</a></li>
13   * 	<li><a href="https://www.eclipse.org/legal/epl-v10.html">EPL-1.0</a></li>
14   * 	<li><a href="https://www.apache.org/licenses/LICENSE-2.0">Apache-2.0</a></li>
15   * 	<li><a href="https://opensource.org/licenses/MIT">MIT</a></li>
16   * </ul>
17   * #L%
18   */
19  package io.earcam.instrumental.archive.osgi.auto;
20  
21  import static io.earcam.instrumental.module.osgi.BundleInfoBuilder.bundle;
22  import static io.earcam.instrumental.module.osgi.Clause.clause;
23  import static io.earcam.instrumental.module.osgi.ClauseParameters.ClauseParameter.attribute;
24  import static java.util.Collections.singletonList;
25  import static org.hamcrest.MatcherAssert.assertThat;
26  import static org.hamcrest.Matchers.*;
27  
28  import java.util.ArrayList;
29  import java.util.Arrays;
30  import java.util.List;
31  
32  import org.junit.jupiter.api.Test;
33  
34  import io.earcam.instrumental.module.osgi.BundleInfo;
35  import io.earcam.instrumental.module.osgi.Clause;
36  import io.earcam.instrumental.module.osgi.ClauseParameters;
37  
38  public class AbstractPackageBundleMapperTest {
39  
40  	private static final String EXPORTED = "com.acme.api";
41  	private static final ClauseParameters VERSION = attribute("version", "1.2.3");
42  
43  	private AbstractPackageBundleMapper mapper = new AbstractPackageBundleMapper() {
44  
45  		@Override
46  		protected List<BundleInfo> bundles()
47  		{
48  			return singletonList(
49  					bundle().exportPackages(EXPORTED, VERSION).construct());
50  		}
51  	};
52  
53  
54  	@Test
55  	void importFoundAndRemoved()
56  	{
57  		List<String> required = new ArrayList<>(Arrays.asList(EXPORTED));
58  
59  		List<Clause> importPackage = mapper.importsFor(required.iterator());
60  
61  		assertThat(importPackage, contains(clause(EXPORTED, VERSION)));
62  		assertThat(required, is(empty()));
63  	}
64  
65  
66  	@Test
67  	void standardJavaImportsImplicitlyRemoved()
68  	{
69  		List<String> required = new ArrayList<>(Arrays.asList(EXPORTED, "java.lang", "java.util.function"));
70  
71  		List<Clause> importPackage = mapper.importsFor(required.iterator());
72  
73  		assertThat(importPackage, contains(clause(EXPORTED, VERSION)));
74  		assertThat(required, is(empty()));
75  	}
76  
77  
78  	@Test
79  	void whenImportNotFoundThenNotRemoved()
80  	{
81  		String notFound = "com.acme.something.funky";
82  		List<String> required = new ArrayList<>(Arrays.asList(notFound));
83  
84  		List<Clause> importPackage = mapper.importsFor(required.iterator());
85  
86  		assertThat(importPackage, is(empty()));
87  		assertThat(required, contains(notFound));
88  	}
89  }