package com.alibaba.pokemon.bulbasaur;

import com.alibaba.pokemon.bulbasaur.persist.DefinitionHelper;
import com.alibaba.pokemon.bulbasaur.schedule.ScheduleMachine;
import com.alibaba.pokemon.bulbasaur.schedule.ScheduleMachineFactory;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.io.SAXReader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;

import java.net.URL;
import java.util.concurrent.atomic.AtomicLong;

/**
 * @author yunche.ch@taobao.com
 * @since 2013-11-12 下午02:14:30
 */
@RunWith(JUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:/taskMachineTest.xml"})
public class TaskTest {
    @Autowired
    ScheduleMachineFactory scheduleMachineFactory;
    private AtomicLong count = new AtomicLong(0);

    private String getBizId() {
        return String.valueOf(System.currentTimeMillis()) + count.getAndAdd(1L);
    }

    @Test
    public void testdeployDefinition() {
        // 初始化

        SAXReader reader = new SAXReader();
        // 拿不到信息
        //URL url = this.getClass().getResource("/multipleTask.xml");
        URL url = this.getClass().getResource("/singleTask.xml");
        Document document = null;
        try {
            document = reader.read(url);
        } catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        String definitionContent = document.asXML();
        // deploy first time
        DefinitionHelper.getInstance().deployDefinition("singleTask", "测试单人任务流程", definitionContent, true);
        //DefinitionHelper.getInstance().deployDefinition("multipleTask", "测试多人任务流程", definitionContent, true);
    }

    @Test
    public void testMachineRun() {
        String bizId = getBizId();
        System.out.println("bizId:" + bizId);

        ScheduleMachine m = scheduleMachineFactory.newInstance(bizId, "singleTask");
        m.addContext("goto", 2);
        m.addContext("_i", 3);
        m.run();
        //        for(int i = 0; i < 5 ; i++){
        //            System.out.println(m.getCurrentStateName());
        //            m.run(m.getCurrentStateName());
        //            System.out.println(m.getCurrentStateName());
        //
        //        }

    }

}
