Skip to content

Commit a14d9cc

Browse files
authored
Merge pull request eugenp#4368 from araknoid/BAEL-1504
BAEL-1504 - Java 9 java.lang.Module API
2 parents efd8b18 + 722dec7 commit a14d9cc

1 file changed

Lines changed: 199 additions & 0 deletions

File tree

Lines changed: 199 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,199 @@
1+
package com.baeldung.java9.modules;
2+
3+
import static org.hamcrest.CoreMatchers.is;
4+
import static org.hamcrest.CoreMatchers.nullValue;
5+
import static org.hamcrest.Matchers.contains;
6+
import static org.hamcrest.Matchers.containsInAnyOrder;
7+
import static org.hamcrest.collection.IsEmptyCollection.empty;
8+
import static org.junit.Assert.*;
9+
10+
import java.lang.module.ModuleDescriptor;
11+
import java.lang.module.ModuleDescriptor.*;
12+
import java.sql.Date;
13+
import java.sql.Driver;
14+
import java.util.HashMap;
15+
import java.util.Set;
16+
import java.util.stream.Collectors;
17+
18+
import org.junit.Before;
19+
import org.junit.Test;
20+
21+
public class ModuleAPIUnitTest {
22+
23+
public static final String JAVA_BASE_MODULE_NAME = "java.base";
24+
25+
private Module javaBaseModule;
26+
private Module javaSqlModule;
27+
private Module module;
28+
29+
@Before
30+
public void setUp() {
31+
Class<HashMap> hashMapClass = HashMap.class;
32+
javaBaseModule = hashMapClass.getModule();
33+
34+
Class<Date> dateClass = Date.class;
35+
javaSqlModule = dateClass.getModule();
36+
37+
Class<Person> personClass = Person.class;
38+
module = personClass.getModule();
39+
}
40+
41+
@Test
42+
public void whenCheckingIfNamed_thenModuleIsNamed() {
43+
assertThat(javaBaseModule.isNamed(), is(true));
44+
assertThat(javaBaseModule.getName(), is(JAVA_BASE_MODULE_NAME));
45+
}
46+
47+
@Test
48+
public void whenCheckingIfNamed_thenModuleIsUnnamed() {
49+
assertThat(module.isNamed(), is(false));
50+
assertThat(module.getName(), is(nullValue()));
51+
}
52+
53+
@Test
54+
public void whenExtractingPackagesContainedInAModule_thenModuleContainsOnlyFewOfThem() {
55+
assertTrue(javaBaseModule.getPackages().contains("java.lang.annotation"));
56+
assertFalse(javaBaseModule.getPackages().contains("java.sql"));
57+
}
58+
59+
@Test
60+
public void whenRetrievingClassLoader_thenClassLoaderIsReturned() {
61+
assertThat(
62+
module.getClassLoader().getClass().getName(),
63+
is("jdk.internal.loader.ClassLoaders$AppClassLoader")
64+
);
65+
}
66+
67+
@Test
68+
public void whenGettingAnnotationsPresentOnAModule_thenNoAnnotationsArePresent() {
69+
assertThat(javaBaseModule.getAnnotations().length, is(0));
70+
}
71+
72+
@Test
73+
public void whenGettingLayerOfAModule_thenModuleLayerInformationAreAvailable() {
74+
ModuleLayer javaBaseModuleLayer = javaBaseModule.getLayer();
75+
76+
assertTrue(javaBaseModuleLayer.configuration().findModule(JAVA_BASE_MODULE_NAME).isPresent());
77+
assertThat(javaBaseModuleLayer.configuration().modules().size(), is(78));
78+
assertTrue(javaBaseModuleLayer.parents().get(0).configuration().parents().isEmpty());
79+
}
80+
81+
@Test
82+
public void whenRetrievingModuleDescriptor_thenTypeOfModuleIsInferred() {
83+
ModuleDescriptor javaBaseModuleDescriptor = javaBaseModule.getDescriptor();
84+
ModuleDescriptor javaSqlModuleDescriptor = javaSqlModule.getDescriptor();
85+
86+
assertFalse(javaBaseModuleDescriptor.isAutomatic());
87+
assertFalse(javaBaseModuleDescriptor.isOpen());
88+
assertFalse(javaSqlModuleDescriptor.isAutomatic());
89+
assertFalse(javaSqlModuleDescriptor.isOpen());
90+
}
91+
92+
@Test
93+
public void givenModuleName_whenBuildingModuleDescriptor_thenBuilt() {
94+
Builder moduleBuilder = ModuleDescriptor.newModule("baeldung.base");
95+
96+
ModuleDescriptor moduleDescriptor = moduleBuilder.build();
97+
98+
assertThat(moduleDescriptor.name(), is("baeldung.base"));
99+
}
100+
101+
@Test
102+
public void givenModules_whenAccessingModuleDescriptorRequires_thenRequiresAreReturned() {
103+
Set<Requires> javaBaseRequires = javaBaseModule.getDescriptor().requires();
104+
Set<Requires> javaSqlRequires = javaSqlModule.getDescriptor().requires();
105+
106+
Set<String> javaSqlRequiresNames = javaSqlRequires.stream()
107+
.map(Requires::name)
108+
.collect(Collectors.toSet());
109+
110+
assertThat(javaBaseRequires, empty());
111+
assertThat(javaSqlRequires.size(), is(3));
112+
assertThat(javaSqlRequiresNames, containsInAnyOrder("java.base", "java.xml", "java.logging"));
113+
}
114+
115+
@Test
116+
public void givenModules_whenAccessingModuleDescriptorProvides_thenProvidesAreReturned() {
117+
Set<Provides> javaBaseProvides = javaBaseModule.getDescriptor().provides();
118+
Set<Provides> javaSqlProvides = javaSqlModule.getDescriptor().provides();
119+
120+
Set<String> javaBaseProvidesService = javaBaseProvides.stream()
121+
.map(Provides::service)
122+
.collect(Collectors.toSet());
123+
124+
assertThat(javaBaseProvidesService, contains("java.nio.file.spi.FileSystemProvider"));
125+
assertThat(javaSqlProvides, empty());
126+
}
127+
128+
@Test
129+
public void givenModules_whenAccessingModuleDescriptorExports_thenExportsAreReturned() {
130+
Set<Exports> javaBaseExports = javaBaseModule.getDescriptor().exports();
131+
Set<Exports> javaSqlExports = javaSqlModule.getDescriptor().exports();
132+
133+
Set<String> javaSqlExportsSource = javaSqlExports.stream()
134+
.map(Exports::source)
135+
.collect(Collectors.toSet());
136+
137+
assertThat(javaBaseExports.size(), is(108));
138+
assertThat(javaSqlExports.size(), is(3));
139+
assertThat(javaSqlExportsSource, containsInAnyOrder("java.sql", "javax.transaction.xa", "javax.sql"));
140+
}
141+
142+
@Test
143+
public void givenModules_whenAccessingModuleDescriptorUses_thenUsesAreReturned() {
144+
Set<String> javaBaseUses = javaBaseModule.getDescriptor().uses();
145+
Set<String> javaSqlUses = javaSqlModule.getDescriptor().uses();
146+
147+
assertThat(javaBaseUses.size(), is(34));
148+
assertThat(javaSqlUses, contains("java.sql.Driver"));
149+
}
150+
151+
@Test
152+
public void givenModules_whenAccessingModuleDescriptorOpen_thenOpenAreReturned() {
153+
Set<Opens> javaBaseUses = javaBaseModule.getDescriptor().opens();
154+
Set<Opens> javaSqlUses = javaSqlModule.getDescriptor().opens();
155+
156+
assertThat(javaBaseUses, empty());
157+
assertThat(javaSqlUses, empty());
158+
}
159+
160+
@Test
161+
public void whenAddingReadsToAModule_thenModuleCanReadNewModule() {
162+
Module updatedModule = module.addReads(javaSqlModule);
163+
164+
assertTrue(updatedModule.canRead(javaSqlModule));
165+
}
166+
167+
@Test
168+
public void whenExportingPackage_thenPackageIsExported() {
169+
Module updatedModule = module.addExports("com.baeldung.java9.modules", javaSqlModule);
170+
171+
assertTrue(updatedModule.isExported("com.baeldung.java9.modules"));
172+
}
173+
174+
@Test
175+
public void whenOpeningAModulePackage_thenPackagedIsOpened() {
176+
Module updatedModule = module.addOpens("com.baeldung.java9.modules", javaSqlModule);
177+
178+
assertTrue(updatedModule.isOpen("com.baeldung.java9.modules", javaSqlModule));
179+
}
180+
181+
@Test
182+
public void whenAddingUsesToModule_thenUsesIsAdded() {
183+
Module updatedModule = module.addUses(Driver.class);
184+
185+
assertTrue(updatedModule.canUse(Driver.class));
186+
}
187+
188+
private class Person {
189+
private String name;
190+
191+
public Person(String name) {
192+
this.name = name;
193+
}
194+
195+
public String getName() {
196+
return name;
197+
}
198+
}
199+
}

0 commit comments

Comments
 (0)