org.obeonetwork.m2doc.parser.test.DocumentParserTest.java Source code

Java tutorial

Introduction

Here is the source code for org.obeonetwork.m2doc.parser.test.DocumentParserTest.java

Source

/*******************************************************************************
 *  Copyright (c) 2016 Obeo. 
 *  All rights reserved. This program and the accompanying materials
 *  are made available under the terms of the Eclipse Public License v1.0
 *  which accompanies this distribution, and is available at
 *  http://www.eclipse.org/legal/epl-v10.html
 *   
 *   Contributors:
 *       Obeo - initial API and implementation
 *  
 *******************************************************************************/
package org.obeonetwork.m2doc.parser.test;

import java.io.FileInputStream;
import java.io.IOException;

import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.eclipse.acceleo.query.runtime.IQueryEnvironment;
import org.junit.Test;
import org.obeonetwork.m2doc.parser.BodyParser;
import org.obeonetwork.m2doc.parser.DocumentParserException;
import org.obeonetwork.m2doc.template.Conditionnal;
import org.obeonetwork.m2doc.template.Default;
import org.obeonetwork.m2doc.template.Image;
import org.obeonetwork.m2doc.template.POSITION;
import org.obeonetwork.m2doc.template.Query;
import org.obeonetwork.m2doc.template.Repetition;
import org.obeonetwork.m2doc.template.Row;
import org.obeonetwork.m2doc.template.StaticFragment;
import org.obeonetwork.m2doc.template.Table;
import org.obeonetwork.m2doc.template.Template;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;

public class DocumentParserTest {
    private IQueryEnvironment env = org.eclipse.acceleo.query.runtime.Query.newEnvironmentWithDefaultServices(null);

    @Test
    public void testTemplateParsing() throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testTemplate.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(1, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertEquals(2, ((StaticFragment) template.getSubConstructs().get(0)).getRuns().size());
    }

    @Test
    public void testVarParsing() throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testVar.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Query);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Query varRef = (Query) template.getSubConstructs().get(1);
        assertNotNull(varRef.getQuery());
    }

    @Test
    public void testQueryParsing() throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testAQL.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Query);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Query query = (Query) template.getSubConstructs().get(1);
        assertNotNull(query.getQuery());
    }

    @Test
    public void testRepetitionParsing() throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testGDFOR.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Repetition);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Repetition repetition = (Repetition) template.getSubConstructs().get(1);
        assertNotNull(repetition.getQuery());
        assertEquals("v", repetition.getIterationVar());
        assertTrue(repetition.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(repetition.getSubConstructs().get(1) instanceof Query);
        assertTrue(repetition.getSubConstructs().get(0) instanceof StaticFragment);
    }

    @Test
    public void testSimpleConditionnalParsing()
            throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testConditionnal1.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Conditionnal);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Conditionnal conditionnal = (Conditionnal) template.getSubConstructs().get(1);
        assertNotNull(conditionnal.getQuery());
        assertTrue(conditionnal.getSubConstructs().get(0) instanceof StaticFragment);
        assertNull(conditionnal.getElse());
        assertNull(conditionnal.getAlternative());
    }

    @Test
    public void testConditionnalWithElseParsing()
            throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testConditionnal2.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Conditionnal);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Conditionnal conditionnal = (Conditionnal) template.getSubConstructs().get(1);
        assertNotNull(conditionnal.getQuery());
        assertTrue(conditionnal.getSubConstructs().get(0) instanceof StaticFragment);
        assertNull(conditionnal.getAlternative());
        assertEquals(1, conditionnal.getElse().getSubConstructs().size());
        assertTrue(conditionnal.getElse().getSubConstructs().get(0) instanceof StaticFragment);
    }

    @Test
    public void testConditionnalWithElseIfParsing()
            throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testConditionnal3.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Conditionnal);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Conditionnal conditionnal = (Conditionnal) template.getSubConstructs().get(1);
        assertNotNull(conditionnal.getQuery());
        assertTrue(conditionnal.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(conditionnal.getAlternative() instanceof Conditionnal);
        assertNull(conditionnal.getElse());
        assertTrue(conditionnal.getAlternative().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(conditionnal.getAlternative().getQuery());
        assertNull(conditionnal.getAlternative().getAlternative());
        assertNull(conditionnal.getAlternative().getElse());
    }

    @Test
    public void testConditionnalWith2ElseIfParsing()
            throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testConditionnal4.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Conditionnal);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Conditionnal conditionnal = (Conditionnal) template.getSubConstructs().get(1);
        assertNotNull(conditionnal.getQuery());
        assertTrue(conditionnal.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(conditionnal.getAlternative() instanceof Conditionnal);
        assertNull(conditionnal.getElse());
        assertTrue(conditionnal.getAlternative().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(conditionnal.getAlternative().getQuery());
        assertNotNull(conditionnal.getAlternative().getAlternative());
        assertNull(conditionnal.getAlternative().getElse());
        assertTrue(
                conditionnal.getAlternative().getAlternative().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(conditionnal.getAlternative().getAlternative().getQuery());
        assertNull(conditionnal.getAlternative().getAlternative().getAlternative());
        assertNull(conditionnal.getAlternative().getAlternative().getElse());
    }

    @Test
    public void testConditionnalWith2ElseIfAndElseParsing()
            throws InvalidFormatException, IOException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testConditionnal5.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(document, template.getDocument());
        assertEquals(3, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(template.getSubConstructs().get(1) instanceof Conditionnal);
        assertTrue(template.getSubConstructs().get(2) instanceof StaticFragment);
        Conditionnal conditionnal = (Conditionnal) template.getSubConstructs().get(1);
        assertNotNull(conditionnal.getQuery());
        assertTrue(conditionnal.getSubConstructs().get(0) instanceof StaticFragment);
        assertTrue(conditionnal.getAlternative() instanceof Conditionnal);
        assertNull(conditionnal.getElse());
        assertTrue(conditionnal.getAlternative().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(conditionnal.getAlternative().getQuery());
        assertNotNull(conditionnal.getAlternative().getAlternative());
        assertNull(conditionnal.getAlternative().getElse());
        assertTrue(
                conditionnal.getAlternative().getAlternative().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(conditionnal.getAlternative().getAlternative().getQuery());
        assertNull(conditionnal.getAlternative().getAlternative().getAlternative());
        assertNotNull(conditionnal.getAlternative().getAlternative().getElse());
        assertTrue(conditionnal.getAlternative().getAlternative().getElse() instanceof Default);
        assertTrue(conditionnal.getAlternative().getAlternative().getElse().getSubConstructs()
                .get(0) instanceof StaticFragment);
    }

    @Test
    public void tableParsingTest() throws IOException, InvalidFormatException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testTable.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(2, template.getSubConstructs().size());
        assertTrue(template.getSubConstructs().get(0) instanceof Table);
        Table table = (Table) template.getSubConstructs().get(0);
        assertEquals(2, table.getRows().size());
        // First row testing.
        Row row = table.getRows().get(0);
        assertEquals(2, row.getCells().size());
        assertTrue(row.getCells().get(0).getTemplate().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(row.getCells().get(0).getTableCell());
        assertTrue(row.getCells().get(1).getTemplate().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(row.getCells().get(1).getTableCell());
        // Second row testing.
        row = table.getRows().get(1);
        assertEquals(2, row.getCells().size());
        assertTrue(row.getCells().get(0).getTemplate().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(row.getCells().get(0).getTableCell());
        assertTrue(row.getCells().get(1).getTemplate().getSubConstructs().get(0) instanceof Query);
        assertNotNull(row.getCells().get(1).getTableCell());
        assertNotNull(((Query) row.getCells().get(1).getTemplate().getSubConstructs().get(0)).getQuery());

    }

    @Test
    public void forWithtableParsingTest() throws IOException, InvalidFormatException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testGDFORWithTable.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(6, template.getSubConstructs().size());
        Repetition rep = (Repetition) template.getSubConstructs().get(4);
        Table table = (Table) rep.getSubConstructs().get(0);
        assertEquals(1, table.getRows().size());
        // First row testing.
        Row row = table.getRows().get(0);
        assertEquals(2, row.getCells().size());
        assertTrue(row.getCells().get(0).getTemplate().getSubConstructs().get(0) instanceof StaticFragment);
        assertNotNull(row.getCells().get(0).getTableCell());
        assertTrue(row.getCells().get(1).getTemplate().getSubConstructs().get(0) instanceof Query);
        assertNotNull(((Query) row.getCells().get(1).getTemplate().getSubConstructs().get(0)).getQuery());
    }

    @Test
    public void imageParsingTest() throws IOException, InvalidFormatException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testImageTag.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(1, template.getSubConstructs().size());
        Image im = (Image) template.getSubConstructs().get(0);
        assertEquals("images/dh1.gif", im.getFileName());
        assertEquals(100, im.getHeight());
        assertEquals(100, im.getWidth());
        assertEquals("plan de forme du dingy herbulot", im.getLegend());
        assertEquals(POSITION.BELOW, im.getLegendPOS());
    }

    @Test
    public void imageParsingTestWithoutFiledirective()
            throws IOException, InvalidFormatException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testImageTag2.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(1, template.getSubConstructs().size());
        Image im = (Image) template.getSubConstructs().get(0);
        assertEquals("Invalid image directive : no file name provided.", im.getParsingErrors().get(0).getMessage());
    }

    @Test
    public void imageParsingTestWithBadOptionName()
            throws IOException, InvalidFormatException, DocumentParserException {
        FileInputStream is = new FileInputStream("templates/testImageTag3.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        assertEquals(1, template.getSubConstructs().size());
        Image im = (Image) template.getSubConstructs().get(0);
        assertEquals("Invalid image option (leg): unknown option name.", im.getParsingErrors().get(0).getMessage());
    }

}