moved devtools to the test source folder

The purpose of the devtools source folder was to have a place to put code that should not be included in the released jar file. However, this requirement is also met by the test source folder. The devtools source folder was a relict from before we used maven.

I also externalized the devtool settings to the properties file `src/test/resources/amidst/devtools/devtools.properties`. This file is ignored by git, however there is a commited template file. To run the devtools, copy the template and populate it with the correct values. The template also contains documentation about how the values are used.

Added tests to execute each devtool. Removed all main methods from the devtools. The tests are ignored by default since they serve as a main methods.
master
Stefan Dollase 2016-02-01 00:47:26 +01:00
parent 1f84e37473
commit bdb9c74a29
14 changed files with 122 additions and 116 deletions

View File

@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/devtools/java"/>
<classpathentry kind="src" output="target/classes" path="src/main/java">
<attributes>
<attribute name="optional" value="true"/>

3
.gitignore vendored
View File

@ -16,4 +16,5 @@
history.txt
target/
/dependency-reduced-pom.xml
/dependency-reduced-pom.xml
devtools.properties

View File

@ -1,16 +0,0 @@
package amidst.devtools.settings;
public enum DevToolsSettings {
INSTANCE;
private String minecraftVersionsDirectory = "/home/stefan/.minecraft/amidst-all-client-versions/";
private String minecraftLibrariesDirectory = "/home/stefan/.minecraft/libraries/";
public String getMinecraftVersionsDirectory() {
return minecraftVersionsDirectory;
}
public String getMinecraftLibrariesDirectory() {
return minecraftLibrariesDirectory;
}
}

View File

@ -5,19 +5,79 @@ import java.io.IOException;
import org.junit.Ignore;
import org.junit.Test;
import amidst.AmidstVersion;
import amidst.ResourceLoader;
import amidst.devtools.settings.DevToolsSettings;
import amidst.mojangapi.file.MojangApiParsingException;
import amidst.mojangapi.file.json.JsonReader;
import amidst.mojangapi.file.json.versionlist.VersionListJson;
/**
* Eclipse does not allow to run the main directly as a Java Application,
* because it is placed in the test directory. Ensure that these tests are
* ignored when creating a commit, so it will be ignored by travis ci when
* creating a new release.
* ignored when creating a commit, so they will be ignored by travis ci.
*/
@Ignore
public class DevToolRunner {
@Ignore
@Test
public void generateTestData() throws IOException,
public void generateRecognisedVersionList() throws IOException,
MojangApiParsingException {
GenerateWorldTestData.main(new String[0]);
new GenerateRecognisedVersionList(versionsDirectory(),
librariesDirectory(), versionList()).run();
}
@Ignore
@Test
public void generateUpdateInformationJson() throws IOException,
MojangApiParsingException {
new GenerateUpdateInformationJson(amidstVersion()).run();
}
@Ignore
@Test
public void generateWorldTestData() throws IOException,
MojangApiParsingException {
new GenerateWorldTestData(versionsDirectory(), librariesDirectory(),
versionList()).run();
}
@Ignore
@Test
public void checkMinecraftJarFileDownloadAvailability() throws IOException,
MojangApiParsingException {
new MinecraftJarDownloadAvailabilityChecker(versionList()).run();
}
@Ignore
@Test
public void downloadMinecraftJarFiles() throws IOException,
MojangApiParsingException {
new MinecraftJarDownloader(versionsDirectory(), versionList()).run();
}
@Ignore
@Test
public void checkMinecraftVersionCompatibility() throws IOException,
MojangApiParsingException {
new MinecraftVersionCompatibilityChecker(versionsDirectory(),
versionList()).run();
}
private VersionListJson versionList() throws IOException,
MojangApiParsingException {
return JsonReader.readRemoteVersionList();
}
private String librariesDirectory() {
return DevToolsSettings.INSTANCE.getMinecraftLibrariesDirectory();
}
private String versionsDirectory() {
return DevToolsSettings.INSTANCE.getMinecraftVersionsDirectory();
}
private AmidstVersion amidstVersion() {
return AmidstVersion.from(ResourceLoader
.getProperties("/amidst/metadata.properties"));
}
}

View File

@ -1,16 +0,0 @@
package amidst.devtools;
public enum DevToolsSettings {
INSTANCE;
private String minecraftVersionsDirectory = "/home/stefan/.minecraft/amidst-all-client-versions/";
private String minecraftLibrariesDirectory = "/home/stefan/.minecraft/libraries/";
public String getMinecraftVersionsDirectory() {
return minecraftVersionsDirectory;
}
public String getMinecraftLibrariesDirectory() {
return minecraftLibrariesDirectory;
}
}

View File

@ -1,7 +1,6 @@
package amidst.devtools;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URLClassLoader;
import java.util.Arrays;
@ -10,13 +9,10 @@ import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import amidst.devtools.settings.DevToolsSettings;
import amidst.logging.Log;
import amidst.mojangapi.file.FilenameFactory;
import amidst.mojangapi.file.MojangApiParsingException;
import amidst.mojangapi.file.directory.DotMinecraftDirectory;
import amidst.mojangapi.file.directory.VersionDirectory;
import amidst.mojangapi.file.json.JsonReader;
import amidst.mojangapi.file.json.versionlist.VersionListEntryJson;
import amidst.mojangapi.file.json.versionlist.VersionListJson;
import amidst.mojangapi.minecraftinterface.RecognisedVersion;
@ -24,21 +20,6 @@ import amidst.mojangapi.minecraftinterface.RecognisedVersion;
public class GenerateRecognisedVersionList {
private static final int MAX_LENGTH_MAGIC_STRING = 111;
public static void main(String[] args) throws IOException,
MojangApiParsingException {
VersionListJson versionList = JsonReader.readRemoteVersionList();
int maxVersionIdLength = 0;
for (VersionListEntryJson version : versionList.getVersions()) {
if (maxVersionIdLength < version.getId().length()) {
maxVersionIdLength = version.getId().length();
}
}
new GenerateRecognisedVersionList(
DevToolsSettings.INSTANCE.getMinecraftVersionsDirectory(),
DevToolsSettings.INSTANCE.getMinecraftLibrariesDirectory(),
versionList, maxVersionIdLength).generate();
}
private final String prefix;
private final File libraries;
private final VersionListJson versionList;
@ -57,9 +38,9 @@ public class GenerateRecognisedVersionList {
private final int maxVersionIdLength;
public GenerateRecognisedVersionList(String prefix, String libraries,
VersionListJson versionList, int maxVersionIdLength) {
VersionListJson versionList) {
this.prefix = prefix;
this.maxVersionIdLength = maxVersionIdLength;
this.maxVersionIdLength = calculateMaxVersionIdLength(versionList);
this.libraries = new File(libraries);
this.versionList = versionList;
this.versions = new File(prefix);
@ -69,7 +50,17 @@ public class GenerateRecognisedVersionList {
.values()));
}
public void generate() {
private int calculateMaxVersionIdLength(VersionListJson versionList) {
int maxVersionIdLength = 0;
for (VersionListEntryJson version : versionList.getVersions()) {
if (maxVersionIdLength < version.getId().length()) {
maxVersionIdLength = version.getId().length();
}
}
return maxVersionIdLength;
}
public void run() {
for (VersionListEntryJson version : versionList.getVersions()) {
process(version);
}

View File

@ -1,7 +1,6 @@
package amidst.devtools;
import amidst.AmidstVersion;
import amidst.ResourceLoader;
import amidst.gui.main.UpdateInformationJson;
import com.google.gson.Gson;
@ -12,9 +11,13 @@ public class GenerateUpdateInformationJson {
private static final Gson GSON = new GsonBuilder().setPrettyPrinting()
.create();
public static void main(String[] args) {
AmidstVersion version = AmidstVersion.from(ResourceLoader
.getProperties("/amidst/metadata.properties"));
private final AmidstVersion version;
public GenerateUpdateInformationJson(AmidstVersion version) {
this.version = version;
}
public void run() {
if (version.isPreRelease()) {
throw new RuntimeException(
"Update information documents can only be created for stable releases (not a pre-release).");

View File

@ -6,10 +6,8 @@ import java.util.LinkedList;
import java.util.List;
import amidst.mojangapi.file.FilenameFactory;
import amidst.mojangapi.file.MojangApiParsingException;
import amidst.mojangapi.file.directory.DotMinecraftDirectory;
import amidst.mojangapi.file.directory.VersionDirectory;
import amidst.mojangapi.file.json.JsonReader;
import amidst.mojangapi.file.json.versionlist.VersionListEntryJson;
import amidst.mojangapi.file.json.versionlist.VersionListJson;
import amidst.mojangapi.minecraftinterface.MinecraftInterfaceException;
@ -19,21 +17,10 @@ import amidst.mojangapi.minecraftinterface.local.LocalMinecraftInterfaceCreation
import amidst.mojangapi.world.testworld.TestWorldCache;
import amidst.mojangapi.world.testworld.TestWorldDeclaration;
/**
* This needs to be placed in the test directory to find the mocking classes.
*/
public class GenerateWorldTestData {
private static final LocalMinecraftInterfaceBuilder LOCAL_MINECRAFT_INTERFACE_BUILDER = new LocalMinecraftInterfaceBuilder(
DefaultClassTranslator.INSTANCE.get());
public static void main(String[] args) throws IOException,
MojangApiParsingException {
new GenerateWorldTestData(
DevToolsSettings.INSTANCE.getMinecraftVersionsDirectory(),
DevToolsSettings.INSTANCE.getMinecraftLibrariesDirectory(),
JsonReader.readRemoteVersionList()).generate();
}
private final String prefix;
private final File libraries;
private final VersionListJson versionList;
@ -52,7 +39,7 @@ public class GenerateWorldTestData {
this.libraries);
}
public void generate() {
public void run() {
for (VersionListEntryJson version : versionList.getVersions()) {
for (TestWorldDeclaration declaration : TestWorldDeclaration
.values()) {

View File

@ -1,21 +1,10 @@
package amidst.devtools;
import java.io.IOException;
import amidst.devtools.utils.VersionStateRenderer;
import amidst.mojangapi.file.MojangApiParsingException;
import amidst.mojangapi.file.json.JsonReader;
import amidst.mojangapi.file.json.versionlist.VersionListEntryJson;
import amidst.mojangapi.file.json.versionlist.VersionListJson;
public class MinecraftJarDownloadAvailabilityChecker {
public static void main(String[] args) throws IOException,
MojangApiParsingException {
new MinecraftJarDownloadAvailabilityChecker(
JsonReader.readRemoteVersionList())
.displayDownloadAvailability();
}
private VersionStateRenderer renderer = new VersionStateRenderer();
private VersionListJson versionList;
@ -23,7 +12,7 @@ public class MinecraftJarDownloadAvailabilityChecker {
this.versionList = versionList;
}
public void displayDownloadAvailability() {
public void run() {
for (VersionListEntryJson version : versionList.getVersions()) {
boolean hasServer = version.hasServer();
boolean hasClient = version.hasClient();

View File

@ -1,22 +1,10 @@
package amidst.devtools;
import java.io.IOException;
import amidst.devtools.settings.DevToolsSettings;
import amidst.devtools.utils.VersionStateRenderer;
import amidst.mojangapi.file.MojangApiParsingException;
import amidst.mojangapi.file.json.JsonReader;
import amidst.mojangapi.file.json.versionlist.VersionListEntryJson;
import amidst.mojangapi.file.json.versionlist.VersionListJson;
public class MinecraftJarDownloader {
public static void main(String[] args) throws IOException,
MojangApiParsingException {
new MinecraftJarDownloader(
DevToolsSettings.INSTANCE.getMinecraftVersionsDirectory(),
JsonReader.readRemoteVersionList()).downloadAll();
}
private VersionStateRenderer renderer = new VersionStateRenderer();
private String prefix;
private VersionListJson versionList;
@ -26,7 +14,7 @@ public class MinecraftJarDownloader {
this.versionList = versionList;
}
public void downloadAll() {
public void run() {
for (VersionListEntryJson version : versionList.getVersions()) {
boolean hasServer = version.tryDownloadServer(prefix);
boolean hasClient = version.tryDownloadClient(prefix);

View File

@ -2,7 +2,6 @@ package amidst.devtools;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -12,9 +11,6 @@ import amidst.clazz.Classes;
import amidst.clazz.real.JarFileParsingException;
import amidst.clazz.symbolic.declaration.SymbolicClassDeclaration;
import amidst.clazz.translator.ClassTranslator;
import amidst.devtools.settings.DevToolsSettings;
import amidst.mojangapi.file.MojangApiParsingException;
import amidst.mojangapi.file.json.JsonReader;
import amidst.mojangapi.file.json.versionlist.VersionListEntryJson;
import amidst.mojangapi.file.json.versionlist.VersionListJson;
import amidst.mojangapi.minecraftinterface.local.DefaultClassTranslator;
@ -26,13 +22,6 @@ import amidst.mojangapi.minecraftinterface.local.DefaultClassTranslator;
* methods and fields. It also does not try to use the found classes.
*/
public class MinecraftVersionCompatibilityChecker {
public static void main(String[] args) throws IOException,
MojangApiParsingException {
new MinecraftVersionCompatibilityChecker(
DevToolsSettings.INSTANCE.getMinecraftVersionsDirectory(),
JsonReader.readRemoteVersionList()).checkAll();
}
private String prefix;
private VersionListJson versionList;
@ -42,7 +31,7 @@ public class MinecraftVersionCompatibilityChecker {
this.versionList = versionList;
}
public void checkAll() {
public void run() {
List<VersionListEntryJson> supported = new ArrayList<VersionListEntryJson>();
List<VersionListEntryJson> unsupported = new ArrayList<VersionListEntryJson>();
for (VersionListEntryJson version : versionList.getVersions()) {

View File

@ -0,0 +1,22 @@
package amidst.devtools.settings;
import java.util.Properties;
import amidst.ResourceLoader;
import amidst.documentation.Immutable;
@Immutable
public enum DevToolsSettings {
INSTANCE;
private final Properties properties = ResourceLoader
.getProperties("/amidst/devtools/devtools.properties");
public String getMinecraftVersionsDirectory() {
return properties.getProperty("amidst.devtools.directory.versions");
}
public String getMinecraftLibrariesDirectory() {
return properties.getProperty("amidst.devtools.directory.libraries");
}
}

View File

@ -0,0 +1,9 @@
# Path to a directory where minecraft versions can be stored.
# The devtools will also download new minecraft versions into this directory.
amidst.devtools.directory.versions=
# Path to the directory where minecraft stores its libraries. This is currently use readonly.
# When the devtools fail to run this might be related to a missing library.
# To fix this issue, start the corresponding minecraft version via the minecraft launcher.
# This will download the required libraries.
amidst.devtools.directory.libraries=