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

CyclopsMC / IntegratedDynamics / 14560624137

20 Apr 2025 02:54PM UTC coverage: 45.387% (+6.3%) from 39.062%
14560624137

push

github

rubensworks
Fix failing CI build

2549 of 8393 branches covered (30.37%)

Branch coverage included in aggregate %.

11778 of 23173 relevant lines covered (50.83%)

2.42 hits per line

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

82.2
/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.PartPos;
23
import org.cyclops.integrateddynamics.api.part.PartTarget;
24
import org.cyclops.integrateddynamics.api.part.aspect.IAspect;
25
import org.cyclops.integrateddynamics.api.part.aspect.IAspectRead;
26
import org.cyclops.integrateddynamics.api.part.aspect.IAspectVariable;
27
import org.cyclops.integrateddynamics.api.part.aspect.IAspectWrite;
28
import org.cyclops.integrateddynamics.api.part.read.IPartStateReader;
29
import org.cyclops.integrateddynamics.api.part.read.IPartTypeReader;
30
import org.cyclops.integrateddynamics.api.part.write.IPartStateWriter;
31
import org.cyclops.integrateddynamics.api.part.write.IPartTypeWriter;
32
import org.cyclops.integrateddynamics.core.evaluate.operator.Operators;
33
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypeOperator;
34
import org.cyclops.integrateddynamics.core.evaluate.variable.ValueTypes;
35
import org.cyclops.integrateddynamics.core.evaluate.variable.Variable;
36
import org.cyclops.integrateddynamics.core.helper.PartHelpers;
37
import org.cyclops.integrateddynamics.core.item.AspectVariableFacade;
38
import org.cyclops.integrateddynamics.core.logicprogrammer.OperatorLPElement;
39
import org.cyclops.integrateddynamics.core.logicprogrammer.ValueTypeLPElementBase;
40
import org.cyclops.integrateddynamics.part.PartTypePanelDisplay;
41
import org.cyclops.integrateddynamics.part.aspect.Aspects;
42

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

49
/**
50
 * @author rubensworks
51
 */
52
public class GameTestHelpersIntegratedDynamics {
×
53

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

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

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

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

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

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

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

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

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

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

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

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

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

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

140
        return Pair.of(part, state);
4✔
141
    }
142

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

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

156
    public static <V extends IValue> void testReadAspectThrows(BlockPos pos, GameTestHelper helper, IPartTypeReader<?, ?> partType, IAspectRead<V, ?> aspectRead) {
157
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
158
        helper.succeedWhen(() -> {
5✔
159
            try {
160
                variableSupplier.get().getValue();
×
161
                helper.assertTrue(false, "The aspect did not throw");
×
162
            } catch (EvaluationException e) {
1✔
163
                helper.assertTrue(true, "The aspect did successfully throw");
4✔
164
            }
×
165
        });
1✔
166
    }
1✔
167

168
    public static <V extends IValue> void testReadAspect(BlockPos pos, GameTestHelper helper, IPartTypeReader<?, ?> partType, IAspectRead<V, ?> aspectRead, V expectedValue) {
169
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
170
        helper.succeedWhen(() -> assertValueEqual(variableSupplier.get(), expectedValue));
11✔
171
    }
1✔
172

173
    public static <V extends IValue> void testReadAspectPredicate(BlockPos pos, GameTestHelper helper, IPartTypeReader<?, ?> partType, IAspectRead<V, ?> aspectRead, Predicate<V> asserter) {
174
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
175
        helper.succeedWhen(() -> {
6✔
176
            try {
177
                helper.assertTrue(asserter.test((V) variableSupplier.get().getValue()), "Value was not asserted correctly");
9✔
178
            } catch (EvaluationException e) {
×
179
                throw new RuntimeException(e);
×
180
            }
1✔
181
        });
1✔
182
    }
1✔
183

184
    public static <V extends IValue> void testReadAspectOperator(BlockPos pos, GameTestHelper helper, IPartTypeReader<?, ?> partType, IAspectRead<V, ?> aspectRead, List<IValue> operatorInputs, IValue expectedOperatorOutput) {
185
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
186
        helper.succeedWhen(() -> {
6✔
187
            try {
188
                IValue operatorValue = variableSupplier.get().getValue();
5✔
189
                if (!(operatorValue instanceof ValueTypeOperator.ValueOperator operator)) {
7!
190
                    throw new GameTestAssertException("Return value is not an operator");
×
191
                }
192
                IValue output = operator.getRawValue().evaluate(operatorInputs.stream().map(Variable::new).toArray(Variable[]::new));
14✔
193
                assertValueEqual(output, expectedOperatorOutput);
3✔
194
            } catch (EvaluationException e) {
×
195
                throw new GameTestAssertException(e.getMessage());
×
196
            }
1✔
197
        });
1✔
198
    }
1✔
199

200
    public static <V extends IValue> void testReadAspectOperatorPredicate(BlockPos pos, GameTestHelper helper, IPartTypeReader<?, ?> partType, IAspectRead<V, ?> aspectRead, List<IValue> operatorInputs, Predicate<IValue> asserter) {
201
        Supplier<IAspectVariable> variableSupplier = testReadAspectSetup(pos, helper, partType, aspectRead);
6✔
202
        helper.succeedWhen(() -> {
7✔
203
            try {
204
                IValue operatorValue = variableSupplier.get().getValue();
5✔
205
                if (!(operatorValue instanceof ValueTypeOperator.ValueOperator operator)) {
7!
206
                    throw new GameTestAssertException("Return value is not an operator");
×
207
                }
208
                IValue output = operator.getRawValue().evaluate(operatorInputs.stream().map(Variable::new).toArray(Variable[]::new));
14✔
209
                helper.assertTrue(asserter.test(output), "Value was not asserted correctly");
6✔
210
            } catch (EvaluationException e) {
×
211
                throw new GameTestAssertException(e.getMessage());
×
212
            }
1✔
213
        });
1✔
214
    }
1✔
215

216
    public static <V extends IValue> void testWriteAspectSetup(BlockPos pos, GameTestHelper helper, IPartTypeWriter<?, ?> partType, IAspectWrite<V, ?> aspectWrite, ItemStack variableAspect) {
217
        // Place cable
218
        if (helper.getLevel().isEmptyBlock(helper.absolutePos(pos))) {
7✔
219
            helper.setBlock(pos, RegistryEntries.BLOCK_CABLE.value());
6✔
220
        }
221

222
        // Place part
223
        PartHelpers.addPart(helper.getLevel(), helper.absolutePos(pos), Direction.WEST, partType, new ItemStack(partType.getItem()));
14✔
224
        PartPos partPos = PartPos.of(helper.getLevel(), helper.absolutePos(pos), Direction.WEST);
8✔
225
        placeVariableInWriter(helper.getLevel(), partPos, aspectWrite, variableAspect);
6✔
226
    }
1✔
227

228
    public static <V extends IValue> void testWriteAspectSetup(BlockPos pos, GameTestHelper helper, IPartTypeWriter<?, ?> partType, IAspectWrite<V, ?> aspectWrite, V value) {
229
        testWriteAspectSetup(pos, helper, partType, aspectWrite, createVariableForValue(helper.getLevel(), value.getType(), value));
11✔
230
    }
1✔
231

232
}
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