• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

CyclopsMC / IntegratedDynamics / 14556514164

20 Apr 2025 05:42AM UTC coverage: 43.947% (+0.4%) from 43.541%
14556514164

push

github

rubensworks
Add network read aspects game tests

2448 of 8393 branches covered (29.17%)

Branch coverage included in aggregate %.

11331 of 22961 relevant lines covered (49.35%)

2.34 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

78.75
/src/main/java/org/cyclops/integrateddynamics/gametest/GameTestHelpersIntegratedDynamics.java
1
package org.cyclops.integrateddynamics.gametest;
2

3
import net.minecraft.core.BlockPos;
4
import net.minecraft.core.Direction;
5
import net.minecraft.gametest.framework.GameTestAssertException;
6
import net.minecraft.gametest.framework.GameTestHelper;
7
import net.minecraft.world.item.ItemStack;
8
import net.minecraft.world.level.Level;
9
import org.apache.commons.lang3.tuple.Pair;
10
import org.cyclops.integrateddynamics.IntegratedDynamics;
11
import org.cyclops.integrateddynamics.RegistryEntries;
12
import org.cyclops.integrateddynamics.api.evaluate.EvaluationException;
13
import org.cyclops.integrateddynamics.api.evaluate.operator.IOperator;
14
import org.cyclops.integrateddynamics.api.evaluate.variable.IValue;
15
import org.cyclops.integrateddynamics.api.evaluate.variable.IValueType;
16
import org.cyclops.integrateddynamics.api.evaluate.variable.IVariable;
17
import org.cyclops.integrateddynamics.api.evaluate.variable.ValueDeseralizationContext;
18
import org.cyclops.integrateddynamics.api.item.IAspectVariableFacade;
19
import org.cyclops.integrateddynamics.api.item.IVariableFacade;
20
import org.cyclops.integrateddynamics.api.item.IVariableFacadeHandlerRegistry;
21
import org.cyclops.integrateddynamics.api.part.IPartState;
22
import org.cyclops.integrateddynamics.api.part.IPartType;
23
import org.cyclops.integrateddynamics.api.part.PartPos;
24
import org.cyclops.integrateddynamics.api.part.PartTarget;
25
import org.cyclops.integrateddynamics.api.part.aspect.IAspect;
26
import org.cyclops.integrateddynamics.api.part.aspect.IAspectRead;
27
import org.cyclops.integrateddynamics.api.part.aspect.IAspectVariable;
28
import org.cyclops.integrateddynamics.api.part.aspect.IAspectWrite;
29
import org.cyclops.integrateddynamics.api.part.read.IPartStateReader;
30
import org.cyclops.integrateddynamics.api.part.read.IPartTypeReader;
31
import org.cyclops.integrateddynamics.api.part.write.IPartStateWriter;
32
import org.cyclops.integrateddynamics.api.part.write.IPartTypeWriter;
33
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
34
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypes;
35
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
36
import org.cyclops.integrateddynamics.core.item.AspectVariableFacade;
37
import org.cyclops.integrateddynamics.core.logicprogrammer.OperatorLPElement;
38
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeLPElementBase;
39
import org.cyclops.integrateddynamics.part.PartTypePanelDisplay;
40
import org.cyclops.integrateddynamics.part.aspect.Aspects;
41

42
import javax.annotation.Nullable;
43
import java.util.Objects;
44
import java.util.function.Predicate;
45
import java.util.function.Supplier;
46

47
/**
48
 * @author rubensworks
49
 */
50
public class GameTestHelpersIntegratedDynamics {
×
51

52
    public static void assertValueEqual(IValue value1, IValue value2) {
53
        if (!Objects.equals(value1, value2)) {
4✔
54
            throw new GameTestAssertException(String.format("Value %s does not equal value %s", value1, value2));
16✔
55
        }
56
    }
1✔
57

58
    public static void assertValueEqual(@Nullable IVariable value1, IValue value2) {
59
        if (value1 == null) {
2!
60
            throw new GameTestAssertException("Variable is null");
×
61
        }
62
        try {
63
            assertValueEqual(value1.getValue(), value2);
4✔
64
        } catch (EvaluationException e) {
×
65
            throw new GameTestAssertException(e.getMessage());
×
66
        }
1✔
67
    }
1✔
68

69
    public static ItemStack createVariableForValue(Level level, IValueType valueType, IValue value) {
70
        IVariableFacadeHandlerRegistry registry = IntegratedDynamics._instance.getRegistryManager().getRegistry(IVariableFacadeHandlerRegistry.class);
×
71
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_VARIABLE);
×
72
        return registry.writeVariableFacadeItem(true, itemStack, ValueTypes.REGISTRY,
×
73
                new ValueTypeLPElementBase.ValueTypeVariableFacadeFactory(valueType, value), level, null, RegistryEntries.BLOCK_LOGIC_PROGRAMMER.get().defaultBlockState());
×
74
    }
75

76
    public static ItemStack createVariableForOperator(Level level, IOperator operator, int[] variableIds) {
77
        IVariableFacadeHandlerRegistry registry = IntegratedDynamics._instance.getRegistryManager().getRegistry(IVariableFacadeHandlerRegistry.class);
6✔
78
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_VARIABLE);
5✔
79
        return registry.writeVariableFacadeItem(true, itemStack, Operators.REGISTRY,
14✔
80
                new OperatorLPElement.OperatorVariableFacadeFactory(operator, variableIds), level, null, RegistryEntries.BLOCK_LOGIC_PROGRAMMER.get().defaultBlockState());
3✔
81
    }
82

83
    public static IVariableFacade getVariableFacade(Level level, ItemStack itemStack) {
84
        return RegistryEntries.ITEM_VARIABLE.get().getVariableFacade(ValueDeseralizationContext.of(level), itemStack);
8✔
85
    }
86

87
    public static ItemStack createVariableFromReader(Level level, PartPos partPos, final IAspect aspect) {
88
        return createVariableFromReader(level, aspect, PartHelpers.getPart(partPos).getState());
7✔
89
    }
90

91
    public static ItemStack createVariableFromReader(Level level, final IAspect aspect, IPartState partState) {
92
        IVariableFacadeHandlerRegistry registry = IntegratedDynamics._instance.getRegistryManager().getRegistry(IVariableFacadeHandlerRegistry.class);
6✔
93
        ItemStack itemStack = new ItemStack(RegistryEntries.ITEM_VARIABLE);
5✔
94
        return registry.writeVariableFacadeItem(true, itemStack, Aspects.REGISTRY, new IVariableFacadeHandlerRegistry.IVariableFacadeFactory<>() {
23✔
95
            @Override
96
            public IAspectVariableFacade create(boolean generateId) {
97
                return new AspectVariableFacade(generateId, partState.getId(), aspect);
10✔
98
            }
99

100
            @Override
101
            public IAspectVariableFacade create(int id) {
102
                return new AspectVariableFacade(id, partState.getId(), aspect);
×
103
            }
104
        }, level, null, null);
105
    }
106

107
    public static void placeVariableInWriter(Level level, PartPos partPos, final IAspectWrite<?, ?> aspect, ItemStack variableAspect) {
108
        PartHelpers.PartStateHolder<?, ?> partStateHolder = PartHelpers.getPart(partPos);
3✔
109
        IPartTypeWriter<?, ?> part = (IPartTypeWriter<?, ?>) partStateHolder.getPart();
4✔
110
        IPartStateWriter<?> state = (IPartStateWriter<?>) partStateHolder.getState();
4✔
111

112
        // Find aspect index
113
        int aspectIndex = -1;
2✔
114
        for (int i = 0; i < part.getWriteAspects().size(); i++) {
9✔
115
            if (part.getWriteAspects().get(i) == aspect) {
6✔
116
                aspectIndex = i;
2✔
117
            }
118
        }
119
        if (aspectIndex < 0) {
2!
120
            throw new GameTestAssertException("Aspect " + aspect + " not found");
×
121
        }
122

123
        // Insert variable
124
        state.getInventory().setItem(aspectIndex, variableAspect);
5✔
125

126
        // Activate aspect
127
        ((IPartTypeWriter) part).updateActivation(PartTarget.fromCenter(partPos), state, null);
6✔
128
    }
1✔
129

130
    public static Pair<PartTypePanelDisplay, PartTypePanelDisplay.State> placeVariableInDisplayPanel(Level level, PartPos partPos, ItemStack variableAspect) {
131
        PartHelpers.PartStateHolder<?, ?> partStateHolder = PartHelpers.getPart(partPos);
3✔
132
        PartTypePanelDisplay part = (PartTypePanelDisplay) partStateHolder.getPart();
4✔
133
        PartTypePanelDisplay.State state = (PartTypePanelDisplay.State) partStateHolder.getState();
4✔
134

135
        // Insert variable
136
        state.getInventory().setItem(0, variableAspect);
5✔
137

138
        return Pair.of(part, state);
4✔
139
    }
140

141
    public static Supplier<IAspectVariable> testReadAspectSetup(BlockPos pos, GameTestHelper helper, IPartType<?, ?> partType, IAspectRead<?, ?> aspectRead) {
142
        // Place cable
143
        helper.setBlock(pos, RegistryEntries.BLOCK_CABLE.value());
6✔
144

145
        // Place part
146
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(pos), Direction.WEST, partType, new ItemStack(partType.getItem()));
14✔
147
        PartPos partPos = PartPos.of(helper.getLevel(), helper.absolutePos(pos), Direction.WEST);
8✔
148
        PartHelpers.PartStateHolder<?, ?> partStateHolder = PartHelpers.getPart(partPos);
3✔
149
        IPartTypeReader partReader = (IPartTypeReader) partStateHolder.getPart();
4✔
150
        IPartStateReader partStateReader = (IPartStateReader) partStateHolder.getState();
4✔
151
        return () -> partReader.getVariable(PartTarget.fromCenter(partPos), partStateReader, aspectRead);
13✔
152
    }
153

154
    public static <V extends IValue> void testReadAspect(BlockPos pos, GameTestHelper helper, IPartType<?, ?> partType, IAspectRead<V, ?> aspectRead, V expectedValue) {
155
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
156
        helper.succeedWhen(() -> assertValueEqual(variableSupplier.get(), expectedValue));
11✔
157
    }
1✔
158

159
    public static <V extends IValue> void testReadAspectPredicate(BlockPos pos, GameTestHelper helper, IPartType<?, ?> partType, IAspectRead<V, ?> aspectRead, Predicate<V> asserter) {
160
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
161
        helper.succeedWhen(() -> {
6✔
162
            try {
163
                helper.assertTrue(asserter.test((V) variableSupplier.get().getValue()), "Value was not asserted correctly");
9✔
164
            } catch (EvaluationException e) {
×
165
                throw new RuntimeException(e);
×
166
            }
1✔
167
        });
1✔
168
    }
1✔
169

170
    public static <V extends IValue> void testReadAspectThrows(BlockPos pos, GameTestHelper helper, IPartType<?, ?> partType, IAspectRead<V, ?> aspectRead) {
171
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
172
        helper.succeedWhen(() -> {
5✔
173
            try {
174
                variableSupplier.get().getValue();
×
175
                helper.assertTrue(false, "The aspect did not throw");
×
176
            } catch (EvaluationException e) {
1✔
177
                helper.assertTrue(true, "The aspect did successfully throw");
4✔
178
            }
×
179
        });
1✔
180
    }
1✔
181

182
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc