Package org.eclipse.xtext.xdoc.tests

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

package org.eclipse.xtext.xdoc.tests;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.net.URL;
import java.net.URLConnection;
import java.util.List;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.EObject;
import org.eclipse.xtext.junit.AbstractXtextTests;
import org.eclipse.xtext.util.StringInputStream;
import org.eclipse.xtext.xdoc.XdocStandaloneSetup;
import org.eclipse.xtext.xdoc.xdoc.AbstractSection;
import org.eclipse.xtext.xdoc.xdoc.Anchor;
import org.eclipse.xtext.xdoc.xdoc.Chapter;
import org.eclipse.xtext.xdoc.xdoc.Code;
import org.eclipse.xtext.xdoc.xdoc.CodeBlock;
import org.eclipse.xtext.xdoc.xdoc.Document;
import org.eclipse.xtext.xdoc.xdoc.Emphasize;
import org.eclipse.xtext.xdoc.xdoc.Item;
import org.eclipse.xtext.xdoc.xdoc.LangDef;
import org.eclipse.xtext.xdoc.xdoc.Link;
import org.eclipse.xtext.xdoc.xdoc.OrderedList;
import org.eclipse.xtext.xdoc.xdoc.Ref;
import org.eclipse.xtext.xdoc.xdoc.Section;
import org.eclipse.xtext.xdoc.xdoc.Section2;
import org.eclipse.xtext.xdoc.xdoc.Section3;
import org.eclipse.xtext.xdoc.xdoc.Section4;
import org.eclipse.xtext.xdoc.xdoc.Table;
import org.eclipse.xtext.xdoc.xdoc.TableData;
import org.eclipse.xtext.xdoc.xdoc.TextOrMarkup;
import org.eclipse.xtext.xdoc.xdoc.TextPart;
import org.eclipse.xtext.xdoc.xdoc.UnorderedList;
import org.eclipse.xtext.xdoc.xdoc.XdocFile;

public class ParserTest extends AbstractXtextTests {

  public static final String TEST_FILE_DIR = "testfiles"
      + File.separatorChar;
  private static final String DNL = "\n\n";
  private static final String CHAPTER_HEAD = "chapter[foo]\n\n";
  private static final String DOC_HEAD = "document[foo]\n\n";
  private static final String CLOSE_BRACKET = "]";

  @Override
  protected void setUp() throws Exception {
    super.setUp();
    with(new XdocStandaloneSetup());
  }

  public void testSimple() throws Exception {
    String title = "Title vom Kapitel";
    String firstPart = "Hier kommt dann mal text ";
    String emphasized = "manchmal fett";
    String secondPart = " und manchmal nicht.\nNewlines und so gibt es auch.";
    String text = "chapter[" + title + "]\r\n\r\n" + firstPart + "e["
        + emphasized + "]" + secondPart + "\n\n";
    //System.out.println(text);
    XdocFile model = getDoc(text);
    Chapter chapter = (Chapter) model.getMainSection();
    assertEquals(title,
        ((TextPart) ((chapter.getTitle()).getContents()
            .get(0))).getText());
    assertEquals(1, chapter.getContents().size());
    TextOrMarkup p = chapter.getContents().get(0);
    assertEquals(firstPart, ((TextPart) p.getContents().get(0)).getText());
    assertEquals(emphasized,
        ((TextPart) ((((Emphasize) p.getContents()
            .get(1)).getContents().get(0)).getContents().get(0)))
            .getText());
    assertEquals(secondPart, ((TextPart) p.getContents().get(2)).getText());
  }

  public void testsmallestDoc() throws Exception {
    getDoc("chapter[foo]\n\n bar");
    getDoc("section[foo]\n\n bar");
    getDoc("section2[foo]\n\n bar");
  }

  public void testAnchoredReference() throws Exception {
    String anchor = " a[refName]";
    String fill = " Jump ";
    String refText = " to ";
    String ref = " ref:refName[" + refText + "]";
    XdocFile file = getDoc(CHAPTER_HEAD + anchor + fill + ref);
    TextOrMarkup textOrMarkup = file.getMainSection()
        .getContents().get(0);
    assertEquals(4, textOrMarkup.getContents().size());
    Anchor a = (Anchor) textOrMarkup.getContents().get(1);
    Ref r = (Ref) textOrMarkup.getContents().get(3);
    assertEquals(a, r.getRef());
    assertEquals(refText, ((TextPart) (r.getContents()
        .get(0)).getContents().get(0)).getText());
  }

  // FIXME
  // public void testCodeRef() throws Exception {
  // getDocFromFile(TEST_FILE_DIR + "codeRef.xdoc");
  // }

  public void testCode() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "codeTest.xdoc");
    Document doc = (Document) file.getMainSection();
    EList<TextOrMarkup> contents = doc.getChapters().get(0)
        .getContents();
    TextOrMarkup textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    CodeBlock cb = (CodeBlock) textOrMarkup.getContents().get(0);
    Code code = (Code) cb.getContents().get(0);
    assertEquals("\nclass Foo {\n"
        + "public static void main(String\\[\\] args){\n"
        + "System.out.println(\"Hello World\\n\");\n" + "}\n" + "}\n",
        code.getContents());
    textOrMarkup = contents.get(1);
    cb = (CodeBlock) textOrMarkup.getContents().get(0);
    assertEquals(0, cb.getContents().size());
  }

  public void testCodeWithLanguage() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR
        + "codeWithLanguageTest.xdoc");
    Document abstractSection = (Document) file.getMainSection();
    TextOrMarkup textOrMarkup = abstractSection.getChapters().get(0).getContents().get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    CodeBlock cb = (CodeBlock) textOrMarkup.getContents().get(0);
    assertEquals("\n\t/* a testclass */\n"
        + "\tclass Foo {\n"
        + "\t\tpublic static void main(String\\[\\] args){\n"
        + "\t\t\tSystem.out.println(\"Hello World\"+'\\n'); // say \"hello\"\n"
        + "\t\t}\n"
        + "\t}\n",
        ((Code) cb.getContents().get(0)).getContents());
    assertEquals("Java", cb.getLanguage().getName());
  }

  public void testComment() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "commentTest.xdoc");
    assertEquals(1, file.getMainSection().getContents().size());
  }

  public void testLink() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "linkTest.xdoc");
    Link link = (Link) (file.getMainSection()
        .getContents().get(0)).getContents().get(0);
    URL url;
    url = new URL(link.getUrl());
    URLConnection c = url.openConnection();
    assertNotNull(c);
  }

  public void testNamedReference() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR
        + "namedRefAndTextTest.xdoc");
    Ref r = (Ref) (file.getMainSection().getContents()
        .get(0)).getContents().get(0);
    assertEquals(file.getMainSection(), r.getRef());
    assertEquals("a Chapter", ((TextPart) r.getContents().get(0)
        .getContents().get(0)).getText());
  }

  public void testNestedList() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "nestedListTest.xdoc");
    UnorderedList outer = (UnorderedList) (file.getMainSection().getContents().get(0)).getContents().get(0);
    List<Item> items = outer.getItems();
    assertEquals(1, items.size());
    List<TextOrMarkup> itemContents = items.get(0).getContents();
    assertEquals(1, itemContents.size());
    List<EObject> contents = itemContents.get(0).getContents();
    // we have text parts for indentations
    assertEquals(3, contents.size());
    assertTrue(((TextPart)contents.get(0)).getText().matches("\\s+"));
    assertTrue(((TextPart)contents.get(2)).getText().matches("\\s+"));
    UnorderedList inner = (UnorderedList) contents.get(1);
    items = inner.getItems();
    assertEquals(1, items.size());
    itemContents = items.get(0).getContents();
    assertEquals(1, itemContents.size());
    assertEquals(1, itemContents.get(0).getContents().size());
    assertEquals("some item", ((TextPart)itemContents.get(0).getContents().get(0)).getText());
  }

  public void testSimpleRef() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "simpleRefTest.xdoc");
    AbstractSection section = file.getMainSection();
    List<TextOrMarkup> contents = section.getContents();
    assertEquals(1, contents.size());
    TextOrMarkup textOrMarkup = contents.get(0);
    assertEquals(2, textOrMarkup.getContents().size());
    assertEquals("This is ", ((TextPart)textOrMarkup.getContents().get(0)).getText());
    assertEquals(section, ((Ref)textOrMarkup.getContents().get(1)).getRef());
  }

  public void testEscape() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "testEscape.xdoc");
    TextOrMarkup textOrMarkup = file.getMainSection()
        .getContents().get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    TextPart p = (TextPart) textOrMarkup.getContents().get(0);
    assertEquals("\\\\ \\[ \\]", p.getText());
  }

  public void testImg() throws Exception {
    getDocFromFile(TEST_FILE_DIR + "imgTest.xdoc");
  }

  public void testUL() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "ulTest.xdoc");
    Chapter chapter = (Chapter) file.getMainSection();
    List<TextOrMarkup> contents = chapter.getContents();
    assertEquals(1, contents.size());
    TextOrMarkup textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    UnorderedList list = (UnorderedList) textOrMarkup.getContents().get(0);
    assertEquals(2, list.getItems().size());
    //test first item
    contents = list.getItems().get(0).getContents();
    assertEquals(1, contents.size());
    textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    assertEquals("An item", ((TextPart)textOrMarkup.getContents().get(0)).getText());
    // test second item
    contents = list.getItems().get(1).getContents();
    assertEquals(2, contents.size());
    textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    assertEquals("A paragraph", ((TextPart)textOrMarkup.getContents().get(0)).getText());
    textOrMarkup = contents.get(1);
    assertEquals(1, textOrMarkup.getContents().size());
    assertEquals("\titem", ((TextPart)textOrMarkup.getContents().get(0)).getText());
  }

  public void testOL() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "olTest.xdoc");
    Chapter chapter = (Chapter) file.getMainSection();
    List<TextOrMarkup> contents = chapter.getContents();
    assertEquals(1, contents.size());
    TextOrMarkup textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    OrderedList list = (OrderedList) textOrMarkup.getContents().get(0);
    assertEquals(2, list.getItems().size());
    //test first item
    contents = list.getItems().get(0).getContents();
    assertEquals(1, contents.size());
    textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    assertEquals("An item", ((TextPart)textOrMarkup.getContents().get(0)).getText());
    // test second item
    contents = list.getItems().get(1).getContents();
    assertEquals(2, contents.size());
    textOrMarkup = contents.get(0);
    assertEquals(1, textOrMarkup.getContents().size());
    assertEquals("A paragraph", ((TextPart)textOrMarkup.getContents().get(0)).getText());
    textOrMarkup = contents.get(1);
    assertEquals(1, textOrMarkup.getContents().size());
    assertEquals("\titem", ((TextPart)textOrMarkup.getContents().get(0)).getText());
  }

  public void testTable() throws Exception{
    String tableStart = "table[";
    String row = "tr[";
    String dataString = "this is";
      String dataString2 = "a two paragraph table entry";
    String d = CHAPTER_HEAD + tableStart + row +"td["+ dataString + DNL+dataString2+
      CLOSE_BRACKET + "td[]" + CLOSE_BRACKET + CLOSE_BRACKET;
    XdocFile file = getDoc(d);
    EList<TextOrMarkup> textOrMarkup = file.getMainSection().getContents();
    assertEquals(1, textOrMarkup.size());
    Table t = (Table)textOrMarkup.get(0).getContents().get(0);
    assertEquals(1, t.getRows().size());
    EList<TableData> data = t.getRows().get(0).getData();
    assertEquals(2, data.size());
    TableData td = data.get(0);
    EList<TextOrMarkup> contents = td.getContents();
    assertEquals(2, contents.size());
    TextPart text = (TextPart)contents.get(0).getContents().get(0);
    assertEquals(dataString, text.getText());
    text = (TextPart)contents.get(1).getContents().get(0);
    assertEquals(dataString2, text.getText());
    td = data.get(1);
    assertEquals(0, td.getContents().size());
  }

  public void testCodeLangDef() throws Exception {
    String name = "Java";
    String[] expectedKeywords = {"final", "const", "goto", "strictfp"};
    String d = DOC_HEAD + "codelanguage-def[" + name + "]["+ expectedKeywords[0] + "," + expectedKeywords[1] + " , " + expectedKeywords[2] +", " + expectedKeywords[3]+"]\n\nchapter[foo]\n\n";
    XdocFile file = getDoc(d);
    Document doc = (Document) file.getMainSection();
    List<LangDef> defs = doc.getLangDefs();
    assertEquals(1, defs.size());
    LangDef def = defs.get(0);
    assertEquals(name, def.getName());
    List<String> keywords = def.getKeywords();
    assertEquals(expectedKeywords.length, keywords.size());
    for (int i = 0; i < expectedKeywords.length; i++) {
      assertEquals(expectedKeywords[i], keywords.get(i));
    }
  }

  public void testFullSectionHirarchy() throws Exception {
    XdocFile file = getDocFromFile(TEST_FILE_DIR + "downToSection4Test.xdoc");
    Document doc = (Document) file.getMainSection();
    assertEquals(1, doc.getTitle().getContents().size());
    TextPart textPart = (TextPart)(doc.getTitle().getContents().get(0));
    assertEquals("foo", textPart.getText());
    assertEquals(1, doc.getChapters().size());
    Chapter chapter = doc.getChapters().get(0);
    assertEquals(1, chapter.getTitle().getContents().size());
    textPart = (TextPart)(chapter.getTitle().getContents().get(0));
    assertEquals("bar", textPart.getText());
    assertEquals(1, chapter.getSubSections().size());
    Section section = chapter.getSubSections().get(0);
    assertEquals(1, section.getTitle().getContents().size());
    textPart = (TextPart) section.getTitle().getContents().get(0);
    assertEquals("foo�", textPart.getText());
    assertEquals(1, section.getSubSections().size());
    Section2 section2 = section.getSubSections().get(0);
    assertEquals(1, section2.getTitle().getContents().size());
    textPart = (TextPart) section2.getTitle().getContents().get(0);
    assertEquals("pilz", textPart.getText());
    assertEquals(1, section2.getSubSections().size());
    Section3 section3 = section2.getSubSections().get(0);
    assertEquals(1, section3.getTitle().getContents().size());
    textPart = (TextPart) section3.getTitle().getContents().get(0);
    assertEquals("sna", textPart.getText());
    assertEquals(1, section3.getSubSections().size());
    Section4 section4 = section3.getSubSections().get(0);
    assertEquals(1, section4.getTitle().getContents().size());
    textPart = (TextPart) section4.getTitle().getContents().get(0);
    assertEquals("fu", textPart.getText());
  }

  protected XdocFile getDoc(String string) throws Exception {
    return (XdocFile) doGetResource(new StringInputStream(string),
        URI.createFileURI("mytestmodel.xdoc")).getContents().get(0);
  }

  protected XdocFile getDocFromFile(String fileName)
      throws FileNotFoundException, Exception {
    return (XdocFile) doGetResource(new FileInputStream(fileName),
        URI.createFileURI(fileName)).getContents().get(0);
  }
}
TOP

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

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.