package com.serliunx.statemanagement;
import com.serliunx.statemanagement.machine.StateMachine;
import com.serliunx.statemanagement.machine.StateMachineBuilder;
import com.serliunx.statemanagement.support.PrinterState;
import lombok.extern.slf4j.Slf4j;
import org.junit.Test;
import java.util.concurrent.Executors;
/**
* 状态机测试
*
* @author SerLiunx
* @version 1.0.0
* @since 2024/12/28
*/
@Slf4j
public class MachineTest {
@Test
public void testStandardStateMachine() throws Exception {
StateMachine stateMachine = StateMachineBuilder.from(PrinterState.values())
.async()
.standard()
.executor(Executors.newFixedThreadPool(16))
.whenLeave(PrinterState.IDLE, h -> {
System.out.println(Thread.currentThread().getName() + ": leave IDLE");
})
.whenEntry(PrinterState.STOPPING, h -> {
System.out.println(Thread.currentThread().getName() + ": entry STOPPING, from " + h.getFrom());
})
.whenEntry(PrinterState.STOPPED, h -> {
System.out.println(Thread.currentThread().getName() + ": entry STOPPED, from " + h.getFrom());
})
.build();
stateMachine.switchNext(false);
stateMachine.close();
}
}