Skip to content

Commit cca1768

Browse files
committed
So much stuff is broken still :<
[no ci]
1 parent 475a92e commit cca1768

File tree

83 files changed

+1220
-1730
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

83 files changed

+1220
-1730
lines changed

neoforge-main/build.gradle.kts

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -126,15 +126,25 @@ repositories {
126126

127127
dependencies {
128128
compileOnly(coreApi)
129+
testCompileOnly(coreApi)
129130
jarJar(coreApi)
130131

131132
implementation(libs.rxjava)
132133
additionalRuntimeClasspath(libs.rxjava)
133134

135+
testImplementation(neoforged.testframework)
136+
testImplementation("org.junit.jupiter:junit-jupiter:5.7.1")
137+
testRuntimeOnly("org.junit.platform:junit-platform-launcher")
138+
134139
jarJar(libs.rxjava)
135140
jarJar(libs.reactivestreams)
136141
}
137142

143+
tasks.withType<Test> {
144+
useJUnitPlatform()
145+
environment.put("CC_TEST_RESOURCES", file("src/test/resources").path)
146+
}
147+
138148
tasks.withType<ProcessResources>().configureEach {
139149

140150
duplicatesStrategy = DuplicatesStrategy.WARN
@@ -155,10 +165,6 @@ tasks.withType<ProcessResources>().configureEach {
155165
}
156166
}
157167

158-
tasks.withType<JavaCompile> {
159-
options.encoding = "UTF-8";
160-
}
161-
162168
tasks.withType<Jar> {
163169
manifest {
164170
val now = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ").format(Date())

neoforge-main/src/main/java/dev/compactmods/crafting/recipes/MiniaturizationRecipeSerializer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,10 @@
1212

1313
public class MiniaturizationRecipeSerializer implements RecipeSerializer<MiniaturizationRecipe> {
1414

15+
1516
@Override
1617
public MapCodec<MiniaturizationRecipe> codec() {
18+
CompactCrafting.LOGGER.debug("Loading recipe codec.");
1719
return MiniaturizationRecipe.CODEC;
1820
}
1921

neoforge-main/src/main/java/dev/compactmods/crafting/recipes/setup/FakeInventory.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,5 @@
11
package dev.compactmods.crafting.recipes.setup;
22

3-
import net.minecraft.world.entity.player.Player;
4-
import net.minecraft.world.Container;
53
import net.minecraft.world.item.ItemStack;
64
import net.minecraft.world.item.crafting.RecipeInput;
75

old_tests/tests/util/FileHelper.java renamed to neoforge-main/src/test/java/dev/compactmods/crafting/test/FileHelper.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package dev.compactmods.crafting.tests.util;
1+
package dev.compactmods.crafting.test;
22

33
import java.io.File;
44
import java.io.IOException;

old_tests/tests/ServerEventListener.java renamed to neoforge-main/src/test/java/dev/compactmods/crafting/test/ServerEventListener.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,40 @@
1-
package dev.compactmods.crafting.tests;
1+
package dev.compactmods.crafting.test;
22

33
import java.io.File;
44
import java.util.concurrent.ExecutionException;
55
import com.google.common.collect.ImmutableSet;
66
import dev.compactmods.crafting.CompactCrafting;
77
import net.minecraft.server.MinecraftServer;
8+
import net.minecraft.server.packs.PackType;
89
import net.minecraft.server.packs.repository.FolderRepositorySource;
910
import net.minecraft.server.packs.repository.PackSource;
11+
import net.minecraft.world.level.validation.DirectoryValidator;
12+
import net.neoforged.bus.api.SubscribeEvent;
13+
import net.neoforged.fml.common.EventBusSubscriber;
1014
import net.neoforged.neoforge.event.entity.player.PlayerEvent;
1115
import net.neoforged.neoforge.event.server.ServerStartedEvent;
12-
import net.neoforged.neoforge.eventbus.api.SubscribeEvent;
13-
import net.neoforged.neoforge.fml.common.Mod;
16+
import net.neoforged.testframework.junit.EphemeralTestServerProvider;
1417

15-
@Mod.EventBusSubscriber(modid = CompactCrafting.MOD_ID)
18+
@EventBusSubscriber(modid = CompactCrafting.MOD_ID)
1619
public class ServerEventListener {
1720

1821
@SubscribeEvent
1922
public static void onServerStarted(final ServerStartedEvent evt) {
2023
final MinecraftServer server = evt.getServer();
2124

25+
if(server instanceof EphemeralTestServerProvider.JUnitServer)
26+
return;
27+
2228
// Add "test/resources" as a resource pack to the pack repository
2329
final var packs = server.getPackRepository();
2430

2531
final String cc_test_resources = System.getenv("CC_TEST_RESOURCES");
2632
if(cc_test_resources != null) {
27-
final var testPack = new FolderRepositorySource(new File(cc_test_resources), PackSource.DEFAULT);
33+
final var testPack = new FolderRepositorySource(new File(cc_test_resources).toPath(),
34+
PackType.SERVER_DATA,
35+
PackSource.BUILT_IN,
36+
new DirectoryValidator(path -> true));
37+
2838
packs.addPackFinder(testPack);
2939
packs.reload();
3040

@@ -38,6 +48,7 @@ public static void onServerStarted(final ServerStartedEvent evt) {
3848

3949
try {
4050
server.reloadResources(packs.getSelectedIds()).get();
51+
CompactCrafting.LOGGER.info("Test datapack loaded.");
4152
} catch (InterruptedException | ExecutionException e) {
4253
CompactCrafting.LOGGER.error("Failed to reload test resource packs.", e);
4354
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
package dev.compactmods.crafting.test.gametests;
2+
3+
import dev.compactmods.crafting.CompactCrafting;
4+
import net.minecraft.commands.Commands;
5+
import net.neoforged.bus.api.IEventBus;
6+
import net.neoforged.fml.ModContainer;
7+
import net.neoforged.fml.common.Mod;
8+
import net.neoforged.testframework.conf.Feature;
9+
import net.neoforged.testframework.conf.FrameworkConfiguration;
10+
11+
@Mod(CompactCrafting.MOD_ID)
12+
public class CompactCraftingGametests {
13+
14+
public CompactCraftingGametests(ModContainer container, IEventBus modBus) {
15+
final var config = FrameworkConfiguration.builder(CompactCrafting.modRL("tests"))
16+
.enable(Feature.GAMETEST)
17+
.enable(Feature.MAGIC_ANNOTATIONS)
18+
.build();
19+
20+
var fw = config.create();
21+
fw.registerCommands(Commands.literal("cctest"));
22+
fw.init(modBus, container);
23+
}
24+
}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package dev.compactmods.crafting.test.gametests;
2+
3+
import net.minecraft.gametest.framework.GameTestAssertException;
4+
5+
import java.util.Objects;
6+
7+
public class GameTestAssertions {
8+
public static void assertNotNull(Object o) {
9+
if(o == null)
10+
throw new GameTestAssertException("Object is null");
11+
}
12+
13+
public static void assertEquals(Object expected, Object actual) {
14+
if(!Objects.equals(expected, actual))
15+
throw new GameTestAssertException("Objects not equal; expected {%s} but got {%s}.".formatted(expected, actual));
16+
}
17+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
package dev.compactmods.crafting.test.gametests;
2+
3+
import dev.compactmods.crafting.CompactCrafting;
4+
import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate;
5+
import net.neoforged.testframework.annotation.OnInit;
6+
import net.neoforged.testframework.annotation.RegisterStructureTemplate;
7+
import net.neoforged.testframework.gametest.StructureTemplateBuilder;
8+
9+
public class TestFrameworkTemplates {
10+
11+
public static final String ONE_CUBED = "1x1x1";
12+
public static final String FIVE_CUBED = "5x5x5";
13+
public static final String FIFTEEN_CUBED = "15x15x15";
14+
15+
@RegisterStructureTemplate(CompactCrafting.MOD_ID + ":empty_1_cubed")
16+
public static final StructureTemplate empty_1 = StructureTemplateBuilder.empty(1, 1, 1);
17+
18+
@RegisterStructureTemplate(CompactCrafting.MOD_ID + ":empty_5_cubed")
19+
public static final StructureTemplate empty_5 = StructureTemplateBuilder.empty(5, 5, 5);
20+
21+
@RegisterStructureTemplate(CompactCrafting.MOD_ID + ":empty_15_cubed")
22+
public static final StructureTemplate empty_15 = StructureTemplateBuilder.empty(15, 15, 15);
23+
24+
@OnInit
25+
public static void init() {
26+
27+
}
28+
}
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
package dev.compactmods.crafting.test.gametests.recipes;
2+
3+
import dev.compactmods.crafting.CompactCrafting;
4+
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
5+
import dev.compactmods.crafting.api.recipe.layers.IRecipeBlocks;
6+
import dev.compactmods.crafting.recipes.MiniaturizationRecipe;
7+
import dev.compactmods.crafting.recipes.blocks.RecipeBlocks;
8+
import dev.compactmods.crafting.test.gametests.util.RecipeTestUtil;
9+
import dev.compactmods.crafting.util.BlockSpaceUtil;
10+
import net.minecraft.core.BlockPos;
11+
import net.minecraft.gametest.framework.GameTest;
12+
import net.minecraft.gametest.framework.GameTestHelper;
13+
import net.minecraft.world.item.crafting.RecipeHolder;
14+
import net.minecraft.world.level.block.Blocks;
15+
import net.minecraft.world.level.block.state.BlockState;
16+
import net.neoforged.testframework.annotation.ForEachTest;
17+
import org.jetbrains.annotations.Nullable;
18+
19+
import java.util.Objects;
20+
21+
@ForEachTest(groups = "miniaturization_recipes")
22+
public class MiniaturizationRecipeTests {
23+
24+
@Nullable
25+
private static MiniaturizationRecipe getRecipe(GameTestHelper testHelper, String name) {
26+
return (MiniaturizationRecipe) testHelper.getLevel()
27+
.getRecipeManager()
28+
.byKey(CompactCrafting.modRL(name))
29+
.map(RecipeHolder::value)
30+
.orElse(null);
31+
}
32+
33+
@GameTest(template = "recipes/ender_crystal")
34+
public void MatchesExactStructure(final GameTestHelper test) {
35+
final MiniaturizationRecipe enderCrystal = getRecipe(test, "ender_crystal");
36+
final IRecipeBlocks blocks = RecipeBlocks
37+
.create(test.getLevel(), enderCrystal.getComponents(), RecipeTestUtil.getFieldBounds(MiniaturizationFieldSize.MEDIUM, test))
38+
.normalize();
39+
40+
try {
41+
boolean matched = enderCrystal.matches(blocks);
42+
if(!matched) {
43+
test.fail("Recipe should have matched.");
44+
}
45+
46+
test.succeed();
47+
}
48+
49+
catch(Exception e) {
50+
test.fail(e.getMessage());
51+
}
52+
}
53+
54+
@GameTest(template = "recipes/ender_crystal")
55+
public void RecipeFailsIfUnidentifiedBlock(final GameTestHelper test) {
56+
final MiniaturizationRecipe enderCrystal = getRecipe(test, "ender_crystal");
57+
Objects.requireNonNull(enderCrystal);
58+
59+
// Force an unknown component in the exact center
60+
test.setBlock(new BlockPos(2, 2, 2), Blocks.GOLD_BLOCK.defaultBlockState());
61+
62+
final IRecipeBlocks blocks = RecipeBlocks
63+
.create(test.getLevel(), enderCrystal.getComponents(), RecipeTestUtil.getFieldBounds(MiniaturizationFieldSize.MEDIUM, test))
64+
.normalize();
65+
66+
try {
67+
boolean matched = enderCrystal.matches(blocks);
68+
if(matched)
69+
test.fail("Recipe did not fail the matching process.");
70+
}
71+
72+
catch(Exception e) {
73+
test.fail(e.getMessage());
74+
}
75+
76+
test.succeed();
77+
}
78+
79+
@GameTest(template = "recipes/ender_crystal")
80+
public void RecipeFailsIfDifferentDimensions(final GameTestHelper test) {
81+
final MiniaturizationRecipe recipe = getRecipe(test, "compact_walls");
82+
Objects.requireNonNull(recipe);
83+
84+
final IRecipeBlocks blocks = RecipeBlocks
85+
.create(test.getLevel(), recipe.getComponents(), RecipeTestUtil.getFieldBounds(MiniaturizationFieldSize.MEDIUM, test))
86+
.normalize();
87+
88+
final boolean matched = recipe.matches(blocks);
89+
if(matched)
90+
test.fail("Recipe matched even though dimensions are different.");
91+
92+
test.succeed();
93+
}
94+
95+
@GameTest(template = "recipes/empty_medium")
96+
public void RecipeFailsIfNoRotationsMatched(final GameTestHelper test) {
97+
final MiniaturizationRecipe recipe = getRecipe(test, "ender_crystal");
98+
Objects.requireNonNull(recipe);
99+
100+
// Set up the 8 corners to be glass, so block creation below matches field boundaries
101+
final BlockState glass = Blocks.GLASS.defaultBlockState();
102+
BlockSpaceUtil.getCornersOfBounds(MiniaturizationFieldSize.MEDIUM).forEach(p -> test.setBlock(p, glass));
103+
104+
final IRecipeBlocks blocks = RecipeBlocks
105+
.create(test.getLevel(), recipe.getComponents(), RecipeTestUtil.getFieldBounds(MiniaturizationFieldSize.MEDIUM, test))
106+
.normalize();
107+
108+
final boolean matched = recipe.matches(blocks);
109+
if(matched)
110+
test.fail("Recipe matched even though blocks are different. (Spatial dimensions equal.)");
111+
112+
test.succeed();
113+
}
114+
}

old_tests/tests/recipes/layers/EmptyLayerTests.java renamed to neoforge-main/src/test/java/dev/compactmods/crafting/test/gametests/recipes/layers/EmptyLayerTests.java

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,28 @@
1-
package dev.compactmods.crafting.tests.recipes.layers;
1+
package dev.compactmods.crafting.test.gametests.recipes.layers;
22

3-
import dev.compactmods.crafting.CompactCrafting;
43
import dev.compactmods.crafting.api.field.MiniaturizationFieldSize;
54
import dev.compactmods.crafting.recipes.layers.EmptyRecipeLayer;
6-
import dev.compactmods.crafting.tests.GameTestTemplates;
7-
import dev.compactmods.crafting.tests.testers.TestHelper;
5+
import dev.compactmods.crafting.test.gametests.TestFrameworkTemplates;
6+
import dev.compactmods.crafting.test.testers.TestHelper;
87
import net.minecraft.core.BlockPos;
98
import net.minecraft.gametest.framework.GameTest;
109
import net.minecraft.gametest.framework.GameTestHelper;
1110
import net.minecraft.world.level.block.Blocks;
12-
import net.neoforged.neoforge.gametest.GameTestHolder;
13-
import net.neoforged.neoforge.gametest.PrefixGameTestTemplate;
11+
import net.neoforged.testframework.annotation.ForEachTest;
12+
import net.neoforged.testframework.gametest.EmptyTemplate;
1413

15-
@PrefixGameTestTemplate(false)
16-
@GameTestHolder(CompactCrafting.MOD_ID)
14+
@ForEachTest(groups = "layers")
1715
public class EmptyLayerTests {
1816

19-
@GameTest(template = GameTestTemplates.EMPTY)
17+
@GameTest @EmptyTemplate
2018
public static void CanCreateLayerInstance(final GameTestHelper test) {
2119
final var layer = new EmptyRecipeLayer();
2220
test.succeed();
2321
}
2422

25-
@GameTest(template = GameTestTemplates.MEDIUM_FIELD)
26-
public static void failsMatchIfAnyBlocksPresent(final GameTestHelper test) {
23+
@GameTest
24+
@EmptyTemplate(TestFrameworkTemplates.FIVE_CUBED)
25+
public static void fails_match_if_any_blocks_present(final GameTestHelper test) {
2726
final var testHelper = TestHelper.forTest(test)
2827
.forComponents()
2928
.forSingleLayer(MiniaturizationFieldSize.MEDIUM);

0 commit comments

Comments
 (0)