Package org.milyn.ect.ecore

Source Code of org.milyn.ect.ecore.ECoreGenerationTest

package org.milyn.ect.ecore;

import static org.milyn.ect.ecore.ECoreConversionUtils.toJavaName;

import java.io.InputStream;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.ZipInputStream;

import junit.framework.TestCase;

import org.eclipse.emf.common.util.EList;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EClassifier;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.util.ExtendedMetaData;
import org.milyn.ect.formats.unedifact.UnEdifactSpecificationReader;

public class ECoreGenerationTest extends TestCase {

  private static final ExtendedMetaData metadata = ExtendedMetaData.INSTANCE;

  public void testECoreGeneration() throws Exception {
    InputStream inputStream = getClass().getResourceAsStream("/D99A.zip");
    ZipInputStream zipInputStream = new ZipInputStream(inputStream);

    UnEdifactSpecificationReader ediSpecificationReader = new UnEdifactSpecificationReader(
        zipInputStream, false, false);
    ECoreGenerator generator = new ECoreGenerator();
    Set<EPackage> packages = generator
        .generatePackages(ediSpecificationReader.getEdiDirectory());
    for (EPackage pkg : packages) {
      validatePackage(pkg);
      if ("cuscar".equals(pkg.getName())) {
        checkCUSCAR(pkg);
      }
      if ("common".equals(pkg.getName())) {
        assertEquals("Common namespace don't match", "urn:org.milyn.edi.unedifact:un:d99a:common", pkg.getNsURI());
      }
    }
  }

  private void checkCUSCAR(EPackage pkg) {
    assertEquals("Namespace don't match", "urn:org.milyn.edi.unedifact:un:d99a:cuscar", pkg.getNsURI());
    EClass clazz = (EClass) pkg.getEClassifier("CUSCAR");
    assertNotNull(clazz);
    assertEquals(13, clazz.getEStructuralFeatures().size());
    assertEquals(13, clazz.getEAllContainments().size());
    assertEquals("CUSCAR", metadata.getName(clazz));
  }

  private void validatePackage(EPackage pkg) {
    assertNotNull(pkg.getName() + " has document root",
        metadata.getDocumentRoot(pkg));
    EList<EClassifier> classifiers = pkg.getEClassifiers();
    Set<String> names = new HashSet<String>();
    for (EClassifier classifier : classifiers) {
      if (classifier instanceof EClass) {
        EClass clazz = (EClass) classifier;
        String location = pkg.getName() + "#" + clazz.getName();
        if (!"DocumentRoot".equals(clazz.getName())) {
          String metadataName = metadata.getName(clazz);
          boolean same = clazz.getName().equals(metadataName)
              || clazz.getName().equals(
                  toJavaName(metadataName, true));
          assertTrue(
              location + " metadata missmatch " + clazz.getName()
                  + "<>" + metadataName, same);
          assertTrue(location + " duplicate",
              names.add(clazz.getName()));
        }
      }
    }
  }
 
  public void testMissingSegmentNames() throws Exception {
    InputStream inputStream = getClass().getResourceAsStream("/d96b.zip");
    ZipInputStream zipInputStream = new ZipInputStream(inputStream);

    UnEdifactSpecificationReader ediSpecificationReader = new UnEdifactSpecificationReader(
        zipInputStream, false);
    ECoreGenerator generator = new ECoreGenerator();
    Set<EPackage> packages = generator
        .generatePackages(ediSpecificationReader.getEdiDirectory());
    boolean found = false;
    for (EPackage pkg : packages) {
      validatePackage(pkg);
      if ("cusdec".equals(pkg.getName())) {
        checkCUSDEC(pkg);
        found = true;
      }
    }
    assertTrue("Can't find cusdec package", found);
  }

  private void checkCUSDEC(EPackage pkg) {
    EClass root = (EClass) pkg.getEClassifier("CUSDEC");
    assertNotNull(root);
    assertEquals(23, root.getEStructuralFeatures().size());
    assertNotNull(root.getEStructuralFeature("UNS1"));
    assertNotNull(root.getEStructuralFeature("UNS2"));
    assertNull(root.getEStructuralFeature("UNS"));
  }

}
TOP

Related Classes of org.milyn.ect.ecore.ECoreGenerationTest

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.