org.obeonetwork.m2doc.generator.test.TemplateParsingValidatorTest.java Source code

Java tutorial

Introduction

Here is the source code for org.obeonetwork.m2doc.generator.test.TemplateParsingValidatorTest.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.generator.test;

//CHECKSTYLE:OFF
import java.io.FileInputStream;
import java.io.FileOutputStream;
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.generator.DocumentGenerationException;
import org.obeonetwork.m2doc.generator.TemplateValidationGenerator;
import org.obeonetwork.m2doc.parser.BodyParser;
import org.obeonetwork.m2doc.parser.DocumentParserException;
import org.obeonetwork.m2doc.template.Template;
import org.openxmlformats.schemas.wordprocessingml.x2006.main.STHighlightColor;

import static org.junit.Assert.assertEquals;

public class TemplateParsingValidatorTest {
    /**
     * Query environment.
     */
    private IQueryEnvironment env = org.eclipse.acceleo.query.runtime.Query.newEnvironmentWithDefaultServices(null);

    /**
     * Creates a WORD document at the given path and returns the memory representation.
     * 
     * @param theDocument
     * @param inputDocumentFilePath
     * @return
     * @throws IOException
     * @throws InvalidFormatException
     */
    private void createDestinationDocument(XWPFDocument theDocument, String inputDocumentFilePath)
            throws IOException, InvalidFormatException {
        FileOutputStream os = new FileOutputStream(inputDocumentFilePath);
        theDocument.write(os);
    }

    /**
     * Tests that parsing errors from AQL template tag (conditional here) are placed next to the start tag.
     * The tested tag is <{m:wrong->.}ajout de value1{m:endif}>
     * The expected tag is : <{m:wrong->.} Expression wrong->. is invalid ajout de value1{m:endif}>
     * After the run with the end '}' char, the following runs must be present :
     * A run must contains blanks char.
     * The next one must contains the error message.
     * The next one must contains blank char and the next one the static content of the conditional.
     * 
     * @throws InvalidFormatException
     * @throws IOException
     * @throws DocumentParserException
     * @throws DocumentGenerationException
     */
    @Test
    public void testErrorInStartTag()
            throws InvalidFormatException, IOException, DocumentParserException, DocumentGenerationException {
        FileInputStream is = new FileInputStream("templates/testParsingErrorStartTag.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        TemplateValidationGenerator validator = new TemplateValidationGenerator();
        validator.doSwitch(template);
        createDestinationDocument(document, "results/testParsingErrorStartTag.docx");

        // scan the destination document
        assertEquals(2, document.getParagraphs().size());
        assertEquals(16, document.getParagraphs().get(0).getRuns().size());
        assertEquals(1, document.getParagraphs().get(1).getRuns().size());
        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(5).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(6).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(6).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(6).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(7).getCTR().getRPr().getHighlight().getVal());
        assertEquals("Expression \"wrong->.\" is invalid: missing collection service call",
                document.getParagraphs().get(0).getRuns().get(7).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(7).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(7).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(7).getCTR().getRPr().getHighlight().getVal());
        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(8).getText(0));
        assertEquals("ajout de value1", document.getParagraphs().get(0).getRuns().get(9).getText(0));
        assertEquals("Unexpected tag m:endif at this location",
                document.getParagraphs().get(0).getRuns().get(13).getText(0));
    }

    /**
     * Tests that parsing errors from AQL template tag (conditional here) are placed next to the start tag.
     * The tested tag is <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}Some text>
     * The expected tag is : <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}<---The image
     * tag is referencing an unknown diagram provider : 'noExistingProvider' Some text>
     * After the run with the end '}' char, the following runs must be present :
     * A run must contains blanks char.
     * The next one must contains the error message.
     * The next one is a blank separator.
     * The next one must contains the other error message.
     * The next one must contains blank char and the next one the static content after the tag in the original template.
     * 
     * @throws InvalidFormatException
     * @throws IOException
     * @throws DocumentParserException
     * @throws DocumentGenerationException
     */
    @Test
    public void testErrorInSimpleTag()
            throws InvalidFormatException, IOException, DocumentParserException, DocumentGenerationException {
        FileInputStream is = new FileInputStream("templates/testParsingErrorSimpleTag.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        TemplateValidationGenerator validator = new TemplateValidationGenerator();
        validator.doSwitch(template);
        createDestinationDocument(document, "results/testParsingErrorSimpleTag.docx");
        // scan the destination document
        assertEquals(2, document.getParagraphs().size());
        assertEquals(11, document.getParagraphs().get(0).getRuns().size());
        assertEquals(1, document.getParagraphs().get(1).getRuns().size());
        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(2).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(3).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(3).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(3).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(5).getCTR().getRPr().getHighlight().getVal());
        assertEquals("The image tag is referencing an unknown diagram provider : 'noExistingProvider'",
                document.getParagraphs().get(0).getRuns().get(5).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(5).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(5).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(5).getCTR().getRPr().getHighlight().getVal());
        assertEquals("Some text", document.getParagraphs().get(0).getRuns().get(10).getText(0));
    }

    /**
     * Tests that parsing errors from AQL template tag (conditional here) are placed next to the start tag.
     * The tested tag is <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}Some text>
     * The expected tag is : <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}<---The image
     * tag is referencing an unknown diagram provider : 'noExistingProvider' <---The start of an option's key has been read but the end of
     * it and the value were missing : ' title="representationTitle"'. Some text>
     * After the run with the end '}' char, the following runs must be present :
     * A run must contains blanks char.
     * The next one must contains the error message.
     * The next one is a blank separator.
     * The next one must contains the other error message.
     * The next one must contains blank char and the next one the static content after the tag in the original template.
     * 
     * @throws InvalidFormatException
     * @throws IOException
     * @throws DocumentParserException
     * @throws DocumentGenerationException
     */
    @Test
    public void testMultiErrorInSimpleTag()
            throws InvalidFormatException, IOException, DocumentParserException, DocumentGenerationException {
        FileInputStream is = new FileInputStream("templates/testMultiParsingErrorSimpleTag.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        TemplateValidationGenerator validator = new TemplateValidationGenerator();
        validator.doSwitch(template);
        createDestinationDocument(document, "results/testMultiParsingErrorSimpleTag.docx");
        // scan the destination document
        assertEquals(1, document.getParagraphs().size());
        assertEquals(14, document.getParagraphs().get(0).getRuns().size());
        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(2).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(3).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(3).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(3).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(3).getCTR().getRPr().getHighlight().getVal());
        assertEquals("The image tag is referencing an unknown diagram provider : 'noExistingProvider'",
                document.getParagraphs().get(0).getRuns().get(6).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(6).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(6).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(6).getCTR().getRPr().getHighlight().getVal());

        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(10).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(11).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(11).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(11).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(11).getCTR().getRPr().getHighlight().getVal());
        assertEquals(
                "The start of an option's key has been read but the end of it and the value were missing : ' title=\"representationTitle\"'.",
                document.getParagraphs().get(0).getRuns().get(12).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(12).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(12).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(11).getCTR().getRPr().getHighlight().getVal());

        assertEquals("Some text", document.getParagraphs().get(0).getRuns().get(13).getText(0));
    }

    /**
     * Tests that parsing errors from AQL template tag (conditional here) are placed next to the start tag.
     * The tested tag is <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}Some text>
     * The expected tag is : <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}<---The image
     * tag is referencing an unknown diagram provider : 'noExistingProvider' Some text>
     * After the run with the end '}' char, the following runs must be present :
     * A run must contains blanks char.
     * The next one must contains the error message.
     * The next one is a blank separator.
     * The next one must contains the other error message.
     * The next one must contains blank char and the next one the static content after the tag in the original template.
     * 
     * @throws InvalidFormatException
     * @throws IOException
     * @throws DocumentParserException
     * @throws DocumentGenerationException
     */
    @Test
    public void testErrorInEndTag()
            throws InvalidFormatException, IOException, DocumentParserException, DocumentGenerationException {
        FileInputStream is = new FileInputStream("templates/testParsingErrorEndTag.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        TemplateValidationGenerator validator = new TemplateValidationGenerator();
        validator.doSwitch(template);
        createDestinationDocument(document, "results/testParsingErrorEndTag.docx");
        // scan the destination document
        assertEquals(1, document.getParagraphs().size());
        assertEquals(24, document.getParagraphs().get(0).getRuns().size());
        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(9).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(10).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(10).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(10).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(10).getCTR().getRPr().getHighlight().getVal());
        assertEquals("Unexpected tag m:endlet at this location",
                document.getParagraphs().get(0).getRuns().get(11).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(11).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(11).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(11).getCTR().getRPr().getHighlight().getVal());

        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(10).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(10).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(10).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(10).getCTR().getRPr().getHighlight().getVal());
        assertEquals("Unexpected tag m:endlet at this location",
                document.getParagraphs().get(0).getRuns().get(11).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(11).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(11).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(11).getCTR().getRPr().getHighlight().getVal());

        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(15).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(16).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(16).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(16).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(16).getCTR().getRPr().getHighlight().getVal());
        assertEquals("gd:elseif, gd:else or gd:endif expected here.",
                document.getParagraphs().get(0).getRuns().get(17).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(17).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(17).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(17).getCTR().getRPr().getHighlight().getVal());

        assertEquals("Some", document.getParagraphs().get(0).getRuns().get(18).getText(0));
        assertEquals(" t", document.getParagraphs().get(0).getRuns().get(19).getText(0));
        assertEquals("ext", document.getParagraphs().get(0).getRuns().get(20).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(22).getText(0));
        assertEquals("Unexpected tag EOF at this location",
                document.getParagraphs().get(0).getRuns().get(23).getText(0));
    }

    /**
     * Tests that parsing errors from AQL template tag (conditional here) are placed next to the start tag when no following text exists.
     * The tested tag is <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}>
     * The expected tag is : <{m:diagram provider:"noExistingProvider" width:"500" height:"500" title="representationTitle"}<---The image
     * tag is referencing an unknown diagram provider : 'noExistingProvider' >
     * After the run with the end '}' char, the following runs must be present :
     * A run must contains blanks char.
     * The next one must contains the error message.
     * The next one is a blank separator.
     * The next one must contains the other error message.
     * The next one must contains blank char and the next one the static content after the tag in the original template.
     * 
     * @throws InvalidFormatException
     * @throws IOException
     * @throws DocumentParserException
     * @throws DocumentGenerationException
     */
    @Test
    public void testErrorInSimpleTagWithoutFollowing()
            throws InvalidFormatException, IOException, DocumentParserException, DocumentGenerationException {
        FileInputStream is = new FileInputStream("templates/testParsingErrorSimpleTagWithoutFollowingText.docx");
        OPCPackage oPackage = OPCPackage.open(is);
        XWPFDocument document = new XWPFDocument(oPackage);
        BodyParser parser = new BodyParser(document, env);
        Template template = parser.parseTemplate();
        TemplateValidationGenerator validator = new TemplateValidationGenerator();
        validator.doSwitch(template);
        createDestinationDocument(document, "results/testParsingErrorSimpleTagWithoutFollowingText.docx");
        // scan the destination document
        assertEquals(1, document.getParagraphs().size());
        assertEquals(11, document.getParagraphs().get(0).getRuns().size());
        assertEquals("    ", document.getParagraphs().get(0).getRuns().get(2).getText(0));
        assertEquals("<---", document.getParagraphs().get(0).getRuns().get(3).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(3).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(3).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(5).getCTR().getRPr().getHighlight().getVal());
        assertEquals("The image tag is referencing an unknown diagram provider : 'noExistingProvider'",
                document.getParagraphs().get(0).getRuns().get(5).getText(0));
        assertEquals("FF0000", document.getParagraphs().get(0).getRuns().get(5).getColor());
        assertEquals(16, document.getParagraphs().get(0).getRuns().get(5).getFontSize());
        assertEquals(STHighlightColor.LIGHT_GRAY,
                document.getParagraphs().get(0).getRuns().get(5).getCTR().getRPr().getHighlight().getVal());
    }

}