package com.htmlhifive.h5.tools.codeassist.core.test.xml;
import java.io.FileInputStream;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import com.htmlhifive.tools.codeassist.core.config.ConfigFileParser;
import com.htmlhifive.tools.codeassist.core.config.ConfigFileParserFactory;
import com.htmlhifive.tools.codeassist.core.config.bean.AllBean;
import com.htmlhifive.tools.codeassist.core.config.bean.ControllerBean;
import com.htmlhifive.tools.codeassist.core.config.bean.EventContextBean;
import com.htmlhifive.tools.codeassist.core.config.bean.FunctionBean;
import com.htmlhifive.tools.codeassist.core.config.bean.InitializationContextBean;
import com.htmlhifive.tools.codeassist.core.config.bean.LogicBean;
import com.htmlhifive.tools.codeassist.core.config.bean.RootChildrenElem;
import com.htmlhifive.tools.codeassist.core.config.bean.VarReferenceBean;
import com.htmlhifive.tools.codeassist.core.config.bean.VariableBean;
import com.htmlhifive.tools.codeassist.core.exception.ParseException;
public class XmlConfigCodeAssistParserTest {
private static String DIRECTORY = "./testPlugin/testjs/configTest/";
private static String CONTROLLER = DIRECTORY + "h5-code-assist-controller.xml";
private static String LOGIC = DIRECTORY + "h5-code-assist-logic.xml";
private static String EVENTCONTEXT = DIRECTORY + "h5-code-assist-eventContext.xml";
private static String INITIALCONTEXT = DIRECTORY + "h5-code-assist-initContext.xml";
private static String ALL = DIRECTORY + "h5-code-assist-all.xml";
private static ConfigFileParser parserController;
private static ConfigFileParser parserLogic;
private static ConfigFileParser parserEventContext;
private static ConfigFileParser parserInitContext;
private static ConfigFileParser parserAll;
@BeforeClass
public static void setUpBeforeClass() throws Exception {
parserController = ConfigFileParserFactory.createParser(new FileInputStream(CONTROLLER), "xml");
parserLogic = ConfigFileParserFactory.createParser(new FileInputStream(LOGIC), "xml");
parserEventContext = ConfigFileParserFactory.createParser(new FileInputStream(EVENTCONTEXT), "xml");
parserInitContext = ConfigFileParserFactory.createParser(new FileInputStream(INITIALCONTEXT), "xml");
parserAll = ConfigFileParserFactory.createParser(new FileInputStream(ALL), "xml");
}
@AfterClass
public static void tearDownAfterClass() throws Exception {
}
@Before
public void setUp() throws Exception {
}
@After
public void tearDown() throws Exception {
}
@Test
public void testController() throws ParseException {
AllBean allbean = parserController.getCodeAssistBean();
RootChildrenElem[] elems = allbean.getElemList();
Assert.assertEquals(1, elems.length);
ControllerBean bean = (ControllerBean) elems[0];
rootControllerBeanCheck(bean);
}
@Test
public void testLogic() throws ParseException {
AllBean allbean = parserLogic.getCodeAssistBean();
RootChildrenElem[] elems = allbean.getElemList();
Assert.assertEquals(1, elems.length);
LogicBean bean = (LogicBean) elems[0];
rootLogicBeanCheck(bean);
}
@Test
public void testEventContext() throws ParseException {
AllBean allbean = parserEventContext.getCodeAssistBean();
RootChildrenElem[] elems = allbean.getElemList();
Assert.assertEquals(1, elems.length);
EventContextBean bean = (EventContextBean) elems[0];
rootEventContextBeanCheck(bean);
}
@Test
public void testInitContext() throws ParseException {
AllBean allbean = parserInitContext.getCodeAssistBean();
RootChildrenElem[] elems = allbean.getElemList();
Assert.assertEquals(1, elems.length);
InitializationContextBean bean = (InitializationContextBean) elems[0];
rootInitContextBeanCheck(bean);
}
@Test
public void testAll() throws ParseException {
AllBean allbean = parserAll.getCodeAssistBean();
RootChildrenElem[] elems = allbean.getElemList();
Assert.assertEquals(4, elems.length);
for (RootChildrenElem elem : elems) {
rootChildrenCheck(elem);
}
}
private void rootInitContextBeanCheck(InitializationContextBean bean) {
Assert.assertEquals(".*Controller", bean.getRegExPattern().pattern());
objectLiteralCheck(bean.getFunctions(), bean.getVarRefs());
}
private void rootEventContextBeanCheck(EventContextBean bean) {
Assert.assertEquals(".*Controller", bean.getRegExPattern().pattern());
objectLiteralCheck(bean.getFunctions(), bean.getVarRefs());
}
private void rootControllerBeanCheck(ControllerBean bean) {
Assert.assertEquals(".*Controller", bean.getRegExPattern().pattern());
objectLiteralCheck(bean.getFunctions(), bean.getVarRefs());
}
private void objectLiteralCheck(FunctionBean[] functions, VarReferenceBean[] varRefs) {
varRefCheck(varRefs);
test1FunctionCheck(functions);
}
private void rootLogicBeanCheck(LogicBean bean) {
Assert.assertEquals(".*Logic", bean.getRegExPattern().pattern());
objectLiteralCheck(bean.getFunctions(), bean.getVarRefs());
}
private void rootChildrenCheck(RootChildrenElem elem) {
if (elem instanceof LogicBean) {
rootLogicBeanCheck((LogicBean) elem);
}
if (elem instanceof ControllerBean) {
rootControllerBeanCheck((ControllerBean) elem);
}
if (elem instanceof EventContextBean) {
rootEventContextBeanCheck((EventContextBean) elem);
}
if (elem instanceof InitializationContextBean) {
rootInitContextBeanCheck((InitializationContextBean) elem);
}
}
private void varRefCheck(VarReferenceBean[] varRefs) {
Assert.assertEquals(1, varRefs.length);
Assert.assertEquals("varRef", varRefs[0].getKey());
Assert.assertEquals("String", varRefs[0].getClassName());
}
private void test1FunctionCheck(FunctionBean[] functions) {
Assert.assertEquals(1, functions.length);
FunctionBean bean = functions[0];
functionCheck(bean, "test1", "arg1", "arg2", "ReturnType1", "<b>テスト1テスト1</b>");
}
private void functionCheck(FunctionBean bean, String name, String arg1Name, String arg2Name, String returnType,
String helpDoc) {
Assert.assertEquals(name, bean.getName());
VariableBean[] args = bean.getArgments();
Assert.assertEquals(2, args.length);
Assert.assertEquals(arg1Name, args[0].getName());
Assert.assertEquals(arg2Name, args[1].getName());
Assert.assertEquals("Object", args[0].getType());
Assert.assertEquals("Object", args[1].getType());
Assert.assertEquals(helpDoc, bean.getDescription());
Assert.assertEquals(returnType, bean.getReturnType());
}
}