package org.shedlang.compiler.shidtopatio; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.shedlang.compiler.shid.instructions.Shid; import org.shedlang.compiler.testing.snapshots.SnapshotResolver; import org.shedlang.compiler.testing.snapshots.Snapshotter; import org.shedlang.compiler.typechecker.TypeInfos; import org.shedlang.compiler.types.*; import java.io.IOException; import static org.shedlang.compiler.shidtopatio.ShidToPatioTesting.serialize; @ExtendWith({SnapshotResolver.class}) public class ShidToPatioDefineEffectTests { @Test public void canGenerateCodeForDefineEffect(Snapshotter snapshotter) throws IOException { var effect = Effects.userDefined(NamespaceName.of("Example", "Project"), "State"); var instruction = Shid.defineEffect(effect); var typeInfos = TypeInfos.EMPTY .addUserDefinedEffectInfo( effect, UserDefinedEffectInfo.builder() .addMethod( "read", FunctionType.builder() .addNamedParam("fence", Types.BOOL) .withReturnType(Types.INT) .build() ) .addMethod( "write", FunctionType.builder() .addPositionalParam(Types.INT) .withReturnType(Types.UNIT) .build() ) .build() ); var context = ShidToPatioTesting.createContext(typeInfos); var result = ShidToPatio.generateInstruction(instruction, context); snapshotter.assertSnapshot(serialize(result)); } }