org.obeonetwork.m2doc.util.test.TemplateConfigUtilTest.java Source code

Java tutorial

Introduction

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

import com.google.common.collect.ImmutableMap;

import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;

import org.apache.poi.POIXMLProperties.CustomProperties;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.eclipse.emf.ecore.EcorePackage;
import org.junit.Test;
import org.obeonetwork.m2doc.properties.TemplateInfo;
import org.obeonetwork.m2doc.tplconf.EPackageMapping;
import org.obeonetwork.m2doc.tplconf.ScalarType;
import org.obeonetwork.m2doc.tplconf.StructuredType;
import org.obeonetwork.m2doc.tplconf.TemplateConfig;
import org.obeonetwork.m2doc.tplconf.TemplateConfigUtil;
import org.obeonetwork.m2doc.tplconf.TemplateVariable;
import org.obeonetwork.m2doc.tplconf.TplconfFactory;
import org.openxmlformats.schemas.officeDocument.x2006.customProperties.CTProperty;

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

/**
 * Tests of {@link TemplateConfigUtil}.
 * 
 * @author ldelaigue
 */
public class TemplateConfigUtilTest {

    @Test
    public void testTypeNameForClassifier() {
        assertEquals("ecore::EDataType", TemplateConfigUtil.typeName(EcorePackage.eINSTANCE.getEDataType()));
    }

    @Test
    public void testTypeName() {
        assertEquals("test::SomeClass", TemplateConfigUtil.typeName("test", "SomeClass"));
    }

    @Test
    public void testLoad() {
        TemplateInfo info = new TemplateInfo(new XWPFDocument()) {
            @Override
            public List<String> getPackagesURIs() {
                return Arrays.asList(EcorePackage.eNS_URI);
            }

            @Override
            public Map<String, String> getVariables() {
                return ImmutableMap.of("v1", "string", "v2", "ecore::EPackage");
            }
        };
        TemplateConfig config = TemplateConfigUtil.load(info);

        assertEquals(1, config.getMappings().size());
        EPackageMapping mappingEcore = config.getMappings().get(0);
        assertEquals("ecore", mappingEcore.getName());
        assertEquals(EcorePackage.eNS_URI, mappingEcore.getUri());
        assertEquals(EcorePackage.eINSTANCE, mappingEcore.getEPackage());

        assertEquals(2, config.getTypesByName().size());
        ScalarType typeString = (ScalarType) config.getTypesByName().get("string");
        StructuredType typeEPackage = (StructuredType) config.getTypesByName().get("ecore::EPackage");
        assertEquals("string", typeString.getName());
        assertEquals("EPackage", typeEPackage.getName());
        assertEquals(EcorePackage.eINSTANCE.getEPackage(), typeEPackage.getEClassifier());
        assertEquals("ecore", typeEPackage.getMappingName());
        assertEquals(mappingEcore, typeEPackage.getMapping());

        assertEquals(2, config.getVariables().size());
        TemplateVariable v1 = config.getVariables().get(0);
        assertEquals("v1", v1.getName());
        assertEquals("string", v1.getTypeName());
        assertEquals(typeString, v1.getType());

        TemplateVariable v2 = config.getVariables().get(1);
        assertEquals("v2", v2.getName());
        assertEquals("ecore::EPackage", v2.getTypeName());
        assertEquals(typeEPackage, v2.getType());
    }

    @Test
    public void testLoadWithUnknownVariableType() {
        TemplateInfo info = new TemplateInfo(new XWPFDocument()) {
            @Override
            public List<String> getPackagesURIs() {
                return Arrays.asList(EcorePackage.eNS_URI);
            }

            @Override
            public Map<String, String> getVariables() {
                return ImmutableMap.of("v1", "string", "v2", "test::SomeClass");
            }
        };
        TemplateConfig config = TemplateConfigUtil.load(info);

        assertEquals(1, config.getMappings().size());
        EPackageMapping mappingEcore = config.getMappings().get(0);
        assertEquals("ecore", mappingEcore.getName());
        assertEquals(EcorePackage.eNS_URI, mappingEcore.getUri());
        assertEquals(EcorePackage.eINSTANCE, mappingEcore.getEPackage());

        assertEquals(2, config.getTypesByName().size());
        ScalarType typeString = (ScalarType) config.getTypesByName().get("string");
        assertEquals("string", typeString.getName());
        StructuredType typeSomeClass = (StructuredType) config.getTypesByName().get("test::SomeClass");
        assertEquals("SomeClass", typeSomeClass.getName());
        assertNull(typeSomeClass.getEClassifier());
        assertNull(typeSomeClass.getMapping());
        assertEquals("test", typeSomeClass.getMappingName());

        assertEquals(2, config.getVariables().size());
        TemplateVariable v1 = config.getVariables().get(0);
        assertEquals("v1", v1.getName());
        assertEquals("string", v1.getTypeName());
        assertEquals(typeString, v1.getType());

        TemplateVariable v2 = config.getVariables().get(1);
        assertEquals("v2", v2.getName());
        assertEquals("test::SomeClass", v2.getTypeName());
        assertEquals(typeSomeClass, v2.getType());
    }

    @Test
    public void testLoadWithUnknownUri() {
        TemplateInfo info = new TemplateInfo(new XWPFDocument()) {
            @Override
            public List<String> getPackagesURIs() {
                return Arrays.asList("http://www.test.com/some/test/uri");
            }

            @Override
            public Map<String, String> getVariables() {
                return ImmutableMap.of("v1", "string", "v2", "test::EPackage");
            }
        };
        TemplateConfig config = TemplateConfigUtil.load(info);

        assertEquals(1, config.getMappings().size());

        EPackageMapping mapping = config.getMappings().get(0);
        assertEquals("http://www.test.com/some/test/uri", mapping.getUri());
        assertNull(mapping.getName());

        assertEquals(2, config.getTypesByName().size());
        ScalarType typeString = (ScalarType) config.getTypesByName().get("string");
        assertEquals("string", typeString.getName());
        StructuredType typeUnknown = (StructuredType) config.getTypesByName().get("test::EPackage");
        assertEquals("EPackage", typeUnknown.getName());
        assertNull(typeUnknown.getEClassifier());
        assertNull(typeUnknown.getMapping());
        assertEquals("test", typeUnknown.getMappingName());

        assertEquals(2, config.getVariables().size());
        TemplateVariable v1 = config.getVariables().get(0);
        assertEquals("v1", v1.getName());
        assertEquals("string", v1.getTypeName());
        assertEquals(typeString, v1.getType());

        TemplateVariable v2 = config.getVariables().get(1);
        assertEquals("v2", v2.getName());
        assertEquals("test::EPackage", v2.getTypeName());
        assertEquals(typeUnknown, v2.getType());
    }

    /**
     * This test checks that even if the nsURI is not explicitly declared, a
     * variable type with a registered prefix will be recognized.
     */
    @Test
    public void testLoadVariableWithUndeclaredButRegisteredUri() {
        TemplateInfo info = new TemplateInfo(new XWPFDocument()) {
            @Override
            public List<String> getPackagesURIs() {
                return Collections.emptyList();
            }

            @Override
            public Map<String, String> getVariables() {
                return ImmutableMap.of("v1", "string", "v2", "ecore::EPackage");
            }
        };
        TemplateConfig config = TemplateConfigUtil.load(info);

        assertEquals(1, config.getMappings().size());
        EPackageMapping mappingEcore = config.getMappings().get(0);
        assertEquals("ecore", mappingEcore.getName());
        assertEquals(EcorePackage.eNS_URI, mappingEcore.getUri());
        assertEquals(EcorePackage.eINSTANCE, mappingEcore.getEPackage());

        assertEquals(2, config.getTypesByName().size());
        ScalarType typeString = (ScalarType) config.getTypesByName().get("string");
        StructuredType typeEPackage = (StructuredType) config.getTypesByName().get("ecore::EPackage");
        assertEquals("string", typeString.getName());
        assertEquals("EPackage", typeEPackage.getName());
        assertEquals(EcorePackage.eINSTANCE.getEPackage(), typeEPackage.getEClassifier());
        assertEquals("ecore", typeEPackage.getMappingName());
        assertEquals(mappingEcore, typeEPackage.getMapping());

        assertEquals(2, config.getVariables().size());
        TemplateVariable v1 = config.getVariables().get(0);
        assertEquals("v1", v1.getName());
        assertEquals("string", v1.getTypeName());
        assertEquals(typeString, v1.getType());

        TemplateVariable v2 = config.getVariables().get(1);
        assertEquals("v2", v2.getName());
        assertEquals("ecore::EPackage", v2.getTypeName());
        assertEquals(typeEPackage, v2.getType());
    }

    @Test
    public void testStore() {
        // given
        XWPFDocument doc = new XWPFDocument();
        TemplateConfig config = TplconfFactory.eINSTANCE.createTemplateConfig();
        EPackageMapping ecoreMapping = TplconfFactory.eINSTANCE.createEPackageMapping();
        ecoreMapping.setName(EcorePackage.eNAME);
        ecoreMapping.setUri(EcorePackage.eNS_URI);
        ecoreMapping.setEPackage(EcorePackage.eINSTANCE);
        config.getMappings().add(ecoreMapping);

        EPackageMapping testMapping = TplconfFactory.eINSTANCE.createEPackageMapping();
        testMapping.setUri("http://www.test.com/some/test/uri");
        config.getMappings().add(testMapping);

        TemplateVariable v1 = TplconfFactory.eINSTANCE.createTemplateVariable();
        v1.setName("v1");
        v1.setTypeName("string");
        config.getVariables().add(v1);

        StructuredType typeEClassifier = TplconfFactory.eINSTANCE.createStructuredType();
        typeEClassifier.setName("EClassifier");
        typeEClassifier.setEClassifier(EcorePackage.eINSTANCE.getEClassifier());
        typeEClassifier.setMappingName(EcorePackage.eNAME);
        typeEClassifier.setMapping(ecoreMapping);
        config.getTypesByName().put("ecore::EClassifier", typeEClassifier);

        TemplateVariable v2 = TplconfFactory.eINSTANCE.createTemplateVariable();
        v2.setName("v2");
        v2.setTypeName("ecore::EClassifier");
        v2.setType(typeEClassifier);
        config.getVariables().add(v2);

        TemplateVariable v3 = TplconfFactory.eINSTANCE.createTemplateVariable();
        v3.setName("v3");
        v3.setTypeName("test::UnboundType");
        config.getVariables().add(v3);

        // when
        TemplateConfigUtil.store(config, doc);

        // then
        CustomProperties props = doc.getProperties().getCustomProperties();
        assertEquals(4, props.getUnderlyingProperties().sizeOfPropertyArray());

        CTProperty propUri = props.getProperty("m:uri");
        String propUriValue = propUri.getLpwstr();
        assertTrue(propUriValue.indexOf(EcorePackage.eNS_URI) >= 0);
        assertTrue(propUriValue.indexOf("http://www.test.com/some/test/uri") >= 0);
        assertTrue(propUriValue.indexOf(",") > 0);

        CTProperty propV1 = props.getProperty("m:var:v1");
        assertEquals("string", propV1.getLpwstr());

        CTProperty propV2 = props.getProperty("m:var:v2");
        assertEquals("ecore::EClassifier", propV2.getLpwstr());

        CTProperty propV3 = props.getProperty("m:var:v3");
        assertEquals("test::UnboundType", propV3.getLpwstr());
    }

    @Test
    public void testIsValidVariableName() {
        assertTrue(TemplateConfigUtil.isValidVariableName("v"));
        assertTrue(TemplateConfigUtil.isValidVariableName("_valid"));
        assertTrue(TemplateConfigUtil.isValidVariableName("valid_"));
        assertTrue(TemplateConfigUtil.isValidVariableName("valid_123"));
        assertTrue(TemplateConfigUtil.isValidVariableName("_VALID_1354"));

        assertFalse(TemplateConfigUtil.isValidVariableName(null));
        assertFalse(TemplateConfigUtil.isValidVariableName(""));
        assertFalse(TemplateConfigUtil.isValidVariableName("not valid"));
        assertFalse(TemplateConfigUtil.isValidVariableName(""));
        assertFalse(TemplateConfigUtil.isValidVariableName("3invalid"));
        assertFalse(TemplateConfigUtil.isValidVariableName("-inv"));
        assertFalse(TemplateConfigUtil.isValidVariableName("not-valid"));
        assertFalse(TemplateConfigUtil.isValidVariableName("dfg$fsd"));
    }

    @Test
    public void testIsValidTypeName() {
        assertTrue(TemplateConfigUtil.isValidTypeName("string"));
        assertTrue(TemplateConfigUtil.isValidTypeName("a::v"));
        assertTrue(TemplateConfigUtil.isValidTypeName("_valid::Abc"));
        assertTrue(TemplateConfigUtil.isValidTypeName("valid_::abc"));
        assertTrue(TemplateConfigUtil.isValidTypeName("valid_123::abc"));
        assertTrue(TemplateConfigUtil.isValidTypeName("_VALID_1354::_Type_Name_with_ccnts"));
        assertTrue(TemplateConfigUtil.isValidTypeName("_accented_chars_ok::_34"));

        assertFalse(TemplateConfigUtil.isValidTypeName(null));
        assertFalse(TemplateConfigUtil.isValidTypeName(""));
        assertFalse(TemplateConfigUtil.isValidTypeName("int"));
        assertFalse(TemplateConfigUtil.isValidTypeName("real"));
        assertFalse(TemplateConfigUtil.isValidTypeName("boolean"));
        assertFalse(TemplateConfigUtil.isValidTypeName("object"));
        assertFalse(TemplateConfigUtil.isValidTypeName("date"));
        assertFalse(TemplateConfigUtil.isValidTypeName("not valid::fds"));
        assertFalse(TemplateConfigUtil.isValidTypeName("3invalid::fds"));
        assertFalse(TemplateConfigUtil.isValidTypeName("-inv::fds"));
        assertFalse(TemplateConfigUtil.isValidTypeName("not-valid::fds"));
    }

}