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
7 changes: 7 additions & 0 deletions FactorioDataWrapper/pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
<version>0.0.1-SNAPSHOT</version>
<build>
<sourceDirectory>src</sourceDirectory>
<testSourceDirectory>test</testSourceDirectory>
<resources>
<resource>
<directory>lua</directory>
Expand Down Expand Up @@ -40,5 +41,11 @@
<artifactId>guava</artifactId>
<version>21.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13.2</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
9 changes: 7 additions & 2 deletions FactorioDataWrapper/src/com/demod/factorio/ModInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@

public class ModInfo {
public static final Pattern DEPENDENCY_REGEX = Pattern
.compile("^(?:(\\?|\\(\\?\\)|!|~) *)?(.+?)(?: *([<>=]=?) *([0-9.]+))?$");
.compile("^(?:(\\?|\\(\\?\\)|!|~|\\+) *)?(.+?)(?: *([<>=]=?) *([0-9.]+))?$");

public static class Dependency {
private final DepPrefix prefix;
Expand Down Expand Up @@ -67,7 +67,8 @@ public boolean doesNotAffectLoadOrder() {
}

public boolean isRequired() {
return this.prefix == DepPrefix.REQUIRED || this.prefix == DepPrefix.DOES_NOT_AFFECT_LOAD_ORDER;
return this.prefix == DepPrefix.REQUIRED || this.prefix == DepPrefix.DOES_NOT_AFFECT_LOAD_ORDER
|| this.prefix == DepPrefix.REQUIRED_LOAD_AFTER;
}
}

Expand All @@ -81,6 +82,8 @@ public static enum DepPrefix {
HIDDEN_OPTIONAL,
// ~ for a dependency that does not affect load order
DOES_NOT_AFFECT_LOAD_ORDER,
// + for a required dependency that loads after the mod declaring it (Factorio 2.1)
REQUIRED_LOAD_AFTER,
// no prefix for a hard requirement for the other mod.
REQUIRED,;

Expand All @@ -97,6 +100,8 @@ private static DepPrefix fromSymbol(String symbol) {
return HIDDEN_OPTIONAL;
case "~":
return DOES_NOT_AFFECT_LOAD_ORDER;
case "+":
return REQUIRED_LOAD_AFTER;
default:
throw new RuntimeException("Invalid dependency symbol: " + symbol);
}
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
package com.demod.factorio;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

import org.junit.Test;

import com.demod.factorio.ModInfo.DepOp;
import com.demod.factorio.ModInfo.DepPrefix;
import com.demod.factorio.ModInfo.Dependency;

public class ModInfoDependencyTest {

@Test
public void parsesRequiredDependencyWithoutPrefix() {
Dependency dependency = Dependency.parse("flib >= 0.16.2");

assertEquals("flib", dependency.getName());
assertEquals(DepPrefix.REQUIRED, dependency.getPrefix());
assertEquals(DepOp.GTE, dependency.getOp());
assertEquals("0.16.2", dependency.getVersion());
assertTrue(dependency.isRequired());
}

@Test
public void parsesLoadAfterDependencyWithPlusPrefix() {
Dependency dependency = Dependency.parse("+ ChangeInserterDropLane >= 1.3.0");

assertEquals("ChangeInserterDropLane", dependency.getName());
assertEquals(DepPrefix.REQUIRED_LOAD_AFTER, dependency.getPrefix());
assertEquals(DepOp.GTE, dependency.getOp());
assertEquals("1.3.0", dependency.getVersion());
assertTrue(dependency.isRequired());
assertFalse(dependency.isOptional());
assertFalse(dependency.isIncompatible());
}

@Test
public void parsesIncompatibleDependency() {
Dependency dependency = Dependency.parse("! Annotorio");

assertEquals("Annotorio", dependency.getName());
assertEquals(DepPrefix.INCOMPATIBLE, dependency.getPrefix());
assertNull(dependency.getVersion());
assertTrue(dependency.isIncompatible());
}

@Test
public void parsesHiddenOptionalDependency() {
Dependency dependency = Dependency.parse("(?) space-age");

assertEquals("space-age", dependency.getName());
assertEquals(DepPrefix.HIDDEN_OPTIONAL, dependency.getPrefix());
assertTrue(dependency.isOptional());
}

@Test
public void parsesOptionalDependencyWithVersion() {
Dependency dependency = Dependency.parse("? Aircraft >= 1.6.6");

assertEquals("Aircraft", dependency.getName());
assertEquals(DepPrefix.OPTIONAL, dependency.getPrefix());
assertEquals(DepOp.GTE, dependency.getOp());
assertEquals("1.6.6", dependency.getVersion());
}

@Test
public void parsesLoadOrderIndependentDependency() {
Dependency dependency = Dependency.parse("~ base >= 2.0.0");

assertEquals("base", dependency.getName());
assertEquals(DepPrefix.DOES_NOT_AFFECT_LOAD_ORDER, dependency.getPrefix());
assertTrue(dependency.isRequired());
}
}