Package org.eclipse.xtext.xdoc.tests

Source Code of org.eclipse.xtext.xdoc.tests.AbstractXdocGeneratorTest

package org.eclipse.xtext.xdoc.tests;

import java.io.File;
import java.io.FileInputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.util.Map;

import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.mwe.core.resources.ResourceLoaderFactory;
import org.eclipse.emf.mwe.core.resources.ResourceLoaderImpl;
import org.eclipse.xpand2.XpandExecutionContext;
import org.eclipse.xpand2.XpandExecutionContextImpl;
import org.eclipse.xpand2.output.Outlet;
import org.eclipse.xpand2.output.Output;
import org.eclipse.xpand2.output.OutputImpl;
import org.eclipse.xtend.expression.Variable;
import org.eclipse.xtend.type.impl.java.JavaBeansMetaModel;
import org.eclipse.xtext.junit.AbstractXtextTests;
import org.eclipse.xtext.resource.XtextResource;
import org.eclipse.xtext.resource.XtextResourceSet;
import org.eclipse.xtext.xdoc.XdocStandaloneSetup;
import org.eclipse.xtext.xdoc.generator.Outlets;
import org.eclipse.xtext.xdoc.xdoc.AbstractSection;
import org.eclipse.xtext.xdoc.xdoc.Chapter;
import org.eclipse.xtext.xdoc.xdoc.Document;
import org.eclipse.xtext.xdoc.xdoc.TextOrMarkup;
import org.eclipse.xtext.xdoc.xdoc.TextPart;
import org.eclipse.xtext.xdoc.xdoc.XdocFactory;
import org.eclipse.xtext.xdoc.xdoc.XdocFile;

public abstract class AbstractXdocGeneratorTest extends AbstractXtextTests {

  protected static final String RESULT_DIR = "test-gen/";
  public static String EXPECTATION_DIR = Outlets.WEB_SITE_PATH_NAME + "/";
  public static String SRC_DIR = "testfiles/";
  protected ParserTest pTest;
  private XpandExecutionContextImpl xpandCtx;

  public AbstractXdocGeneratorTest() {
    super();
    File f = new File(RESULT_DIR);
    if(f.exists()) {
      deleteRecursive(f.listFiles());
    } else {
      f.mkdir();
    }
  }

  @Override
  protected void setUp() throws Exception {
    super.setUp();
    with(new XdocStandaloneSetup());
    getInjector().injectMembers(this);
    this.pTest = new ParserTest();
    this.pTest.setUp();

    Output output = new OutputImpl();
    Outlet outlet = new Outlet(RESULT_DIR);
    output.addOutlet(outlet);

    ResourceLoaderFactory.setCurrentThreadResourceLoader(new ResourceLoaderImpl(getClass().getClassLoader()));
    xpandCtx = new XpandExecutionContextImpl(output, null);
    Map<String, Variable> variables = xpandCtx.getGlobalVariables();
    Variable srcDir = new Variable("srcDir", SRC_DIR);
    variables.put("srcDir", srcDir);
    Variable dir = new Variable("dir", RESULT_DIR);
    variables.put("dir", dir);
    xpandCtx.registerMetaModel(new JavaBeansMetaModel());
    ResourceLoaderFactory.setCurrentThreadResourceLoader(null);
  }

  abstract protected void generate(EObject eObject);

  protected void validate(String expected, String result) throws Exception {
    FileChannel expF = new FileInputStream(expected).getChannel();
    FileChannel resultF = new FileInputStream(result).getChannel();
    ByteBuffer bExp = ByteBuffer.allocateDirect((int) expF.size());
    ByteBuffer bResult = ByteBuffer.allocateDirect((int) resultF.size());
    assertEquals(bExp.capacity(), bResult.capacity());
    expF.read(bExp);
    bExp.rewind();
    resultF.read(bResult);
    bResult.rewind();
    if(bExp.compareTo(bResult) != 0){
      for (int i = 0; bExp.hasRemaining() || bResult.hasRemaining(); i++) {
        char a = (char) bExp.get();
        char b = (char) bResult.get();
        if (a != b) {
          fail("Expected " + a +" but was " + b+ " at position " + bExp.position());
        }
      }
    }
  }

  protected XpandExecutionContext getXpandCtx() {
    return xpandCtx;
  }

  private void deleteRecursive(File... files) {
    for (File file : files) {
      if(file.isDirectory()) {
        deleteRecursive(file.listFiles());
        file.delete();
      }
      file.delete();
    }
  }


  protected Document initDocFromFile(String string, String filename) throws Exception {
    XdocFile file = pTest.getDocFromFile(SRC_DIR + filename);
    AbstractSection mainSection = file.getMainSection();
    if(mainSection instanceof Document) {
      return (Document) mainSection;
    } else if(mainSection instanceof Chapter) {
      Document doc = initDoc(string);
      doc.getChapters().add((Chapter) mainSection);
      return doc;
    }
    return null;
  }

  protected Document initDoc(String name) {
    Document result = XdocFactory.eINSTANCE.createDocument();
    TextOrMarkup tomTitle = XdocFactory.eINSTANCE.createTextOrMarkup();
    TextPart title = XdocFactory.eINSTANCE.createTextPart();
    title.setText(name);
    tomTitle.getContents().add(title);
    result.setTitle(tomTitle);
    return result;
  }

  protected Document createDocumentFrom(String mainDocument, String... docs) {
    XtextResourceSet set = get(XtextResourceSet.class);
    Resource ret = set.getResource(URI.createURI(SRC_DIR + mainDocument), true);
    for(String doc: docs) {
      set.getResource(URI.createURI(SRC_DIR + doc), true);
    }
    return (Document) ((XdocFile) getModel((XtextResource)ret)).getMainSection();
  }

  protected Chapter createChapterFrom(String file) {
    XtextResourceSet set = get(XtextResourceSet.class);
    Resource ret = set.getResource(URI.createURI(SRC_DIR + file), true);
    return (Chapter) ((XdocFile) getModel((XtextResource)ret)).getMainSection();
  }

  public abstract void testGenCodeWithLanguage() throws Exception;

  public abstract void testGenCode() throws Exception;

  public abstract void testARef() throws Exception;

  public abstract void testCodeRef() throws Exception;

  public abstract void testComment() throws Exception;

  public abstract void testImg() throws Exception;

  public abstract void testLink() throws Exception;

  public abstract void testRefText() throws Exception;

  public abstract void testNestedList() throws Exception;

  public abstract void testSimpleRef() throws Exception;

  public abstract void testEscape() throws Exception;

  public abstract void testTable() throws Exception;

  public abstract void testTwoChapters() throws Exception;

  public abstract void testFullHirarchy() throws Exception;
}
TOP

Related Classes of org.eclipse.xtext.xdoc.tests.AbstractXdocGeneratorTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.