Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions sample-jar/Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
sample.jar: classes/a/A.class
jar -c -f $@ $^

classes/a/A.class: src/a/A.java
javac -d classes src/a/A.java

clean:
rm -rf classes
Binary file added sample-jar/classes/a/A.class
Binary file not shown.
Binary file added sample-jar/sample.jar
Binary file not shown.
3 changes: 3 additions & 0 deletions sample-jar/src/a/A.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
package a;

public class A {}
5 changes: 5 additions & 0 deletions src/main/java/no/ion/jhms/modularizer/ModuleDescription.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,11 @@ public Options setJarPath(Path path) {
public PrintStream out() { return out; }
}

/**
* Writes a description of the modular JAR given by {@link Options#jarPath()}.
*
* @throws ErrorException if jar file is not a module
*/
public static void describeModule(PrintStream out, Options options) {
new ModuleDescription(out, options).describe();
}
Expand Down
50 changes: 46 additions & 4 deletions src/test/java/no/ion/jhms/modularizer/ModuleUpdaterTest.java
Original file line number Diff line number Diff line change
@@ -1,17 +1,59 @@
package no.ion.jhms.modularizer;

import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.io.TempDir;

import java.lang.module.ModuleDescriptor;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail;

class ModuleUpdaterTest {
private final ByteArrayOutputStream baos = new ByteArrayOutputStream();
private final PrintStream printStream = new PrintStream(baos);
private Path path;

@TempDir
Path tmpDirectory;

@BeforeEach
void setUp() {
path = tmpDirectory.resolve("sample.jar");
}

@Test
public void addModuleInfoClass() {
ModuleInfoClassReader reader = ModuleInfoClassReader.open(Path.of("src/test/resources/min-descriptor/module-info.class"));
ModuleInfoClass moduleInfoClass = reader.parse();
public void verifyUpdate() throws IOException {
Files.copy(Path.of("sample-jar/sample.jar"), path);

var describeOptions = new ModuleDescription.Options().setJarPath(path);
try {
ModuleDescription.describeModule(printStream, describeOptions);
fail();
} catch (ErrorException e) {
assertTrue(e.getMessage().startsWith("error: no module declaration found:"), e::getMessage);
assertTrue(e.getMessage().endsWith("/sample.jar"));
}
assertEquals("", output());

var updateOptions = new ModuleUpdater.Options()
.setJarPath(path)
.setModuleName("module.name");
ModuleUpdater.update(printStream, updateOptions);
assertEquals("", output());
}

private String getDeclaration() {

}

private String output() {
return baos.toString(StandardCharsets.UTF_8);
}
}