private static void GenericTest(string inputFile, IDictionary <string, string> dependencies, string outputPackageId)
        {
            string projectFolder = VariousUtil.GetProjectFolder();
            string ecorePath     = Path.Combine(projectFolder, inputFile);

            if (dependencies != null)
            {
                foreach (KeyValuePair <string, string> dependency in dependencies)
                {
                    // Load dependency using NMF, with a specific URI
                    string          dependencyPath = Path.Combine(projectFolder, dependency.Value);
                    ModelRepository repository     = (ModelRepository)EcoreInterop.Repository;
                    FileStream      depFileStream  = new FileInfo(dependencyPath).Open(FileMode.Open);
                    repository.Serializer.Deserialize(depFileStream,
                                                      new Uri(dependency.Key, UriKind.Absolute), repository, true);
                    depFileStream.Close();
                }
            }

            // Load ecore using NMF
            IEPackage        package   = EcoreInterop.LoadPackageFromFile(ecorePath);
            ISet <IEPackage> epackages = new HashSet <IEPackage>()
            {
                package
            };

            // Load output EnAr project
            Package outputContainerPackage = Ecore2EnArTestSetUp.Loader.GetEnAarPackage(outputPackageId);

            // Prepare transformation and start
            XsdImport.Ecore2EnAr.Ecore2EnAr importer = new XsdImport.Ecore2EnAr.Ecore2EnAr(outputContainerPackage, Ecore2EnArTestSetUp.Loader.Explorer);
            importer.ConstructMetamodel(epackages);
        }
Пример #2
0
        public void LoadXMLType()
        {
            EPackage package = EcoreInterop.LoadPackageFromFile("XMLTypeTest.ecore");

            Assert.IsNotNull(package);

            var xmlTypeNamespace = EcoreInterop.Transform2Meta(package);

            Assert.IsNotNull(xmlTypeNamespace);

            var DataTypes = xmlTypeNamespace.Types.OfType <IClass>().FirstOrDefault(t => t.Name == "DataTypes");

            Assert.IsNotNull(DataTypes);

            AssertAttribute(DataTypes, "AnySimpleType", typeof(object));
            AssertAttribute(DataTypes, "AnyURI", typeof(string));
            AssertAttribute(DataTypes, "Base64Binary", typeof(byte[]));
            AssertAttribute(DataTypes, "Boolean", typeof(bool));
            AssertAttribute(DataTypes, "Byte", typeof(byte));
            AssertAttribute(DataTypes, "Date", typeof(object));
            AssertAttribute(DataTypes, "DateTime", typeof(object));
            //AssertAttribute(DataTypes, "Decimal", typeof(java.math.BigDecimal));
            AssertAttribute(DataTypes, "Double", typeof(double));
            AssertAttribute(DataTypes, "Duration", typeof(object));
            //AssertAttribute(DataTypes, "ENTITIES", typeof(java.util.List));
            AssertAttribute(DataTypes, "ENTITY", typeof(string));
            AssertAttribute(DataTypes, "Float", typeof(float));
            AssertAttribute(DataTypes, "GDay", typeof(object));
            AssertAttribute(DataTypes, "GMonth", typeof(object));
            AssertAttribute(DataTypes, "GMonthDay", typeof(object));
            AssertAttribute(DataTypes, "GYear", typeof(object));
            AssertAttribute(DataTypes, "GYearMonth", typeof(object));
            AssertAttribute(DataTypes, "HexBinary", typeof(byte[]));
            AssertAttribute(DataTypes, "ID", typeof(string));
            AssertAttribute(DataTypes, "IDREF", typeof(string));
            //AssertAttribute(DataTypes, "IDREFS", typeof(java.util.List));
            AssertAttribute(DataTypes, "Int", typeof(int));
            //AssertAttribute(DataTypes, "Integer", typeof(java.math.BigInteger));
            AssertAttribute(DataTypes, "Language", typeof(string));
            AssertAttribute(DataTypes, "Long", typeof(long));
            AssertAttribute(DataTypes, "Name", typeof(string));
            AssertAttribute(DataTypes, "NCName", typeof(string));
            //AssertAttribute(DataTypes, "NegativeInteger", typeof(java.math.BigInteger));
            AssertAttribute(DataTypes, "NMToken", typeof(string));
            //AssertAttribute(DataTypes, "NMTOKENS", typeof(java.util.List));
            //AssertAttribute(DataTypes, "NonNegativeInteger", typeof(java.math.BigInteger));
            //AssertAttribute(DataTypes, "NonPositiveInteger", typeof(java.math.BigInteger));
            AssertAttribute(DataTypes, "NormalizedString", typeof(string));
            AssertAttribute(DataTypes, "NOTATION", typeof(object));
            //AssertAttribute(DataTypes, "PositiveInteger", typeof(java.math.BigInteger));
            AssertAttribute(DataTypes, "QName", typeof(object));
            AssertAttribute(DataTypes, "Short", typeof(short));
            AssertAttribute(DataTypes, "String", typeof(string));
            AssertAttribute(DataTypes, "Time", typeof(object));
            AssertAttribute(DataTypes, "Token", typeof(string));
            AssertAttribute(DataTypes, "UnsignedByte", typeof(short));
            AssertAttribute(DataTypes, "UnsignedInt", typeof(long));
            //AssertAttribute(DataTypes, "UnsignedLong", typeof(java.math.BigInteger));
            AssertAttribute(DataTypes, "UnsignedShort", typeof(int));
        }
Пример #3
0
        private static void GenerateCodeFor(string input, string output, string name)
        {
            EPackage        package = EcoreInterop.LoadPackageFromFile(input);
            INamespace      nMeta   = EcoreInterop.Transform2Meta(package);
            CodeCompileUnit code    = MetaFacade.CreateCode(nMeta, name);

            MetaFacade.GenerateCode(code, new CSharpCodeProvider(), output, true);
        }
Пример #4
0
        private void GenerateAndAssertEcore(string modelPath)
        {
            string log;
            string errorLog;
            var    package = EcoreInterop.LoadPackageFromFile(modelPath);
            var    ns      = EcoreInterop.Transform2Meta(package);
            var    result  = CodeGenerationTest.GenerateAndCompile(ns, null, out errorLog, out log);

            Assert.AreEqual(0, result, log + errorLog);
        }
Пример #5
0
        public void LoadNMeta()
        {
            EPackage package;

            package = EcoreInterop.LoadPackageFromFile("NMeta.ecore");

            Assert.IsNotNull(package);

            metaNamespace = EcoreInterop.Transform2Meta(package);

            var boolean     = metaNamespace.Resolve(new Uri("Boolean", UriKind.Relative));
            var isInterface = metaNamespace.Resolve(new Uri("Class/IsInterface", UriKind.Relative)) as IAttribute;

            Assert.IsNotNull(metaNamespace);

            Assert.AreEqual(20, metaNamespace.Types.OfType <IClass>().Count());

            type           = GetClass("Type");
            @class         = GetClass("Class");
            structuredType = GetClass("StructuredType");
            typedElement   = GetClass("ITypedElement");
            metaElement    = GetClass("MetaElement");
            attribute      = GetClass("Attribute");
            reference      = GetClass("Reference");
            referenceType  = GetClass("ReferenceType");
            dataType       = GetClass("DataType");
            primitiveType  = GetClass("PrimitiveType");
            @namespace     = GetClass("Namespace");
            extension      = GetClass("Extension");
            @event         = GetClass("Event");
            operation      = GetClass("Operation");
            parameter      = GetClass("Parameter");
            enumeration    = GetClass("Enumeration");
            literal        = GetClass("Literal");
            modelElement   = GetClass("ModelElement");

            direction = metaNamespace.Types.OfType <IEnumeration>().FirstOrDefault(en => en.Name == "Direction");
            Assert.IsNotNull(direction);
            direction.Literals.Select(l => l.Name).AssertSequence("In", "Out", "InOut");

            AssertBaseTypes();
            AssertProperties();

            var model = metaNamespace.Model;

            Assert.IsNotNull(model);

            Assert.AreSame(type, model.Resolve("#//Type"));
            Assert.AreSame(@class, model.Resolve("#//Class"));
            Assert.AreSame(structuredType, model.Resolve("#//StructuredType"));
        }
Пример #6
0
        public void TestSerializedName()
        {
            EPackage package = EcoreInterop.LoadPackageFromFile("EcoreXMLSchemaTest.ecore");

            Assert.IsNotNull(package);

            ns = EcoreInterop.Transform2Meta(package);
            Assert.IsNotNull(ns);

            /* Check Types */
            var AnnotationDefaultsType = ns.Types.OfType <IClass>().FirstOrDefault(t => t.Name == "AnnotationDefaultsType");

            AssertSerializationName(AnnotationDefaultsType, "AnnotationDefaults");

            var PType = ns.Types.OfType <IClass>().FirstOrDefault(t => t.Name == "PType");

            AssertSerializationName(PType, "P");

            var ModelInformation = ns.Types.OfType <IClass>().FirstOrDefault(t => t.Name == "ModelInformation");

            AssertNoSerializationName(ModelInformation);

            /* Check References */
            var pRef = AnnotationDefaultsType.References.FirstOrDefault(r => r.Name == "p");

            AssertSerializationName(pRef, "P");

            /* Check Attributes */
            var valueAttr = PType.Attributes.FirstOrDefault(a => a.Name == "value");

            AssertDefaultProperty(valueAttr);

            var sizeAttr = PType.Attributes.FirstOrDefault(a => a.Name == "size");

            AssertSerializationName(sizeAttr, "size");

            var mixedAttr = ModelInformation.Attributes.FirstOrDefault(a => a.Name == "mixed");

            AssertNoSerializationName(mixedAttr);
        }
Пример #7
0
        private void GenerateAndLoadModel(string metamodelPath, string modelPath)
        {
            string log;
            string errorLog;
            var    package = EcoreInterop.LoadPackageFromFile(metamodelPath);
            var    ns      = EcoreInterop.Transform2Meta(package);

            var loadModel = new Action <string, int>((path, buildExit) =>
            {
                if (buildExit != 0)
                {
                    return;
                }
                var repository   = new ModelRepository();
                var assemblyPath = System.IO.Path.Combine(path, "bin", "project.dll");
                Assembly.LoadFile(assemblyPath);
                repository.Resolve(modelPath);
            });

            var result = CodeGenerationTest.GenerateAndCompile(ns, loadModel, out errorLog, out log);

            Assert.AreEqual(0, result, log + errorLog);
        }
Пример #8
0
        public static INamespace LoadPackageFromFiles(IList <string> files, string overallName, IDictionary <Uri, string> resolveMappings)
        {
            if (files == null || files.Count == 0)
            {
                return(null);
            }

            var packages   = new List <INamespace>();
            var repository = new ModelRepository(EcoreInterop.Repository);

            if (resolveMappings != null)
            {
                repository.Locators.Add(new FileMapLocator(resolveMappings));
            }

            foreach (var ecoreFile in files)
            {
                if (Path.GetExtension(ecoreFile) == ".ecore")
                {
#if DEBUG
                    var model     = repository.Resolve(ecoreFile);
                    var ePackages = model.RootElements.OfType <EPackage>();
                    foreach (var ePackage in ePackages)
                    {
                        packages.Add(EcoreInterop.Transform2Meta(ePackage));
                    }
#else
                    try
                    {
                        var ePackages = repository.Resolve(ecoreFile).RootElements.OfType <EPackage>();
                        foreach (var ePackage in ePackages)
                        {
                            packages.Add(EcoreInterop.Transform2Meta(ePackage));
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("An error occurred reading the Ecore file. The error message was: " + ex.Message);
                        Environment.ExitCode = 1;
                    }
#endif
                }
                else if (Path.GetExtension(ecoreFile) == ".nmf" || Path.GetExtension(ecoreFile) == ".nmeta")
                {
#if DEBUG
                    packages.AddRange(repository.Resolve(ecoreFile).RootElements.OfType <INamespace>());
#else
                    try
                    {
                        packages.AddRange(repository.Resolve(ecoreFile).RootElements.OfType <INamespace>());
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine("An error occurred reading the NMeta file. The error message was: " + ex.Message);
                        Environment.ExitCode = 1;
                    }
#endif
                }
            }

            if (packages.Count == 0)
            {
                throw new InvalidOperationException("No package could be found.");
            }
            else if (packages.Count == 1)
            {
                return(packages.First());
            }
            else
            {
                var package = new Namespace()
                {
                    Name = overallName
                };
                package.ChildNamespaces.AddRange(packages);
                return(package);
            }
        }