예제 #1
0
        void VerifyResult(string[] inputText, string expectedResult, CsdlTarget target, Action <IEdmModel> visitModel)
        {
            IEdmModel model;
            IEnumerable <EdmError> errors;
            List <XmlReader>       readers = new List <XmlReader>();

            foreach (string s in inputText)
            {
                readers.Add(XmlReader.Create(new StringReader(s)));
            }
            bool parsed = SchemaReader.TryParse(readers, out model, out errors);

            Assert.IsTrue(parsed, "Model Parsed");
            Assert.IsTrue(errors.Count() == 0, "No Errors");

            if (visitModel != null)
            {
                visitModel(model);
            }

            StringWriter      sw       = new StringWriter();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent   = true;
            settings.Encoding = System.Text.Encoding.UTF8;
            XmlWriter xw = XmlWriter.Create(sw, settings);

            CsdlWriter.TryWriteCsdl(model, xw, target, out errors);
            xw.Flush();
            xw.Close();
            string outputText = sw.ToString();

            Assert.AreEqual(expectedResult, outputText, "Expected Result = Output");
        }
예제 #2
0
        private void EdmxRoundTripCheck(string expectedEdmx, CsdlTarget target, IEdmModel model)
        {
            var errors = new EdmLibTestErrors();

            this.VerifySemanticValidation(model, Microsoft.Test.OData.Utils.Metadata.EdmVersion.V40, errors);

            string actualEdmx = GetEdmx(model, target);
            var    valid      = XElement.DeepEquals(XElement.Parse(expectedEdmx), XElement.Parse(actualEdmx));

            Assert.IsTrue(valid, "Invalid actual edmx.");
        }
예제 #3
0
        /// <summary>
        /// Initializes a new instance of <see cref="CsdlXmlWriter"/> class.
        /// </summary>
        /// <param name="model">The Edm model.</param>
        /// <param name="writer">The XML writer.</param>
        /// <param name="edmxVersion">The Edmx version.</param>
        /// <param name="target">The CSDL target.</param>
        public CsdlXmlWriter(IEdmModel model, XmlWriter writer, Version edmxVersion, CsdlTarget target)
            : base(model, edmxVersion)
        {
            EdmUtil.CheckArgumentNull(writer, "writer");

            this.writer = writer;
            this.target = target;

            Debug.Assert(CsdlConstants.SupportedEdmxVersions.ContainsKey(edmxVersion), "CsdlConstants.SupportedEdmxVersions.ContainsKey(edmxVersion)");
            this.edmxNamespace = CsdlConstants.SupportedEdmxVersions[edmxVersion];
        }
예제 #4
0
        private CsdlWriter(IEdmModel model, IEnumerable <EdmSchema> schemas, XmlWriter writer, Version edmxVersion, CsdlTarget target)
        {
            this.model       = model;
            this.schemas     = schemas;
            this.writer      = writer;
            this.edmxVersion = edmxVersion;
            this.target      = target;

            Debug.Assert(CsdlConstants.SupportedEdmxVersions.ContainsKey(edmxVersion), "CsdlConstants.SupportedEdmxVersions.ContainsKey(edmxVersion)");
            this.edmxNamespace = CsdlConstants.SupportedEdmxVersions[edmxVersion];
        }
예제 #5
0
        /// <summary>
        /// Outputs a CSDL XML artifact to the provided <see cref="XmlWriter"/>.
        /// </summary>
        /// <param name="model">Model to be written.</param>
        /// <param name="writer">XmlWriter the generated CSDL will be written to.</param>
        /// <param name="target">Target implementation of the CSDL being generated.</param>
        /// <param name="errors">Errors that prevented successful serialization, or no errors if serialization was successful. </param>
        /// <returns>A value indicating whether serialization was successful.</returns>
        public static bool TryWriteCsdl(IEdmModel model, XmlWriter writer, CsdlTarget target, out IEnumerable <EdmError> errors)
        {
            EdmUtil.CheckArgumentNull(model, "model");
            EdmUtil.CheckArgumentNull(writer, "writer");

            Version edmxVersion;

            if (!VerifyAndGetVersion(model, out edmxVersion, out errors))
            {
                return(false);
            }

            CsdlWriter csdlWriter = new CsdlXmlWriter(model, writer, edmxVersion, target);

            csdlWriter.WriteCsdl();

            errors = Enumerable.Empty <EdmError>();
            return(true);
        }
예제 #6
0
        private string GetCsdl(IEdmModel model, CsdlTarget target)
        {
            string edmx = string.Empty;

            using (StringWriter sw = new StringWriter())
            {
                XmlWriterSettings settings = new XmlWriterSettings();
                settings.Encoding = System.Text.Encoding.UTF8;

                using (XmlWriter xw = XmlWriter.Create(sw, settings))
                {
                    IEnumerable <EdmError> errors;
                    CsdlWriter.TryWriteCsdl(model, xw, target, out errors);
                    xw.Flush();
                }

                edmx = sw.ToString();
            }

            return(edmx);
        }
예제 #7
0
        void VerifyResult(string inputText, string expectedResult, CsdlTarget target)
        {
            IEdmModel model;
            IEnumerable <EdmError> errors;
            bool parsed = SchemaReader.TryParse(new XmlReader[] { XmlReader.Create(new StringReader(inputText)) }, out model, out errors);

            Assert.IsTrue(parsed, "Model Parsed");
            Assert.IsTrue(errors.Count() == 0, "No Errors");

            StringWriter      sw       = new StringWriter();
            XmlWriterSettings settings = new XmlWriterSettings();

            settings.Indent   = true;
            settings.Encoding = System.Text.Encoding.UTF8;
            XmlWriter xw = XmlWriter.Create(sw, settings);

            CsdlWriter.TryWriteCsdl(model, xw, target, out errors);
            xw.Flush();
            xw.Close();
            string outputText = sw.ToString();

            Assert.AreEqual(expectedResult, outputText, "Expected Result = Output");
        }
예제 #8
0
        /// <summary>
        /// Outputs a CSDL artifact to the provided XmlWriter.
        /// </summary>
        /// <param name="model">Model to be written.</param>
        /// <param name="writer">XmlWriter the generated CSDL will be written to.</param>
        /// <param name="target">Target implementation of the CSDL being generated.</param>
        /// <param name="errors">Errors that prevented successful serialization, or no errors if serialization was successful. </param>
        /// <returns>A value indicating whether serialization was successful.</returns>
        public static bool TryWriteCsdl(IEdmModel model, XmlWriter writer, CsdlTarget target, out IEnumerable <EdmError> errors)
        {
            EdmUtil.CheckArgumentNull(model, "model");
            EdmUtil.CheckArgumentNull(writer, "writer");

            errors = model.GetSerializationErrors();
            if (errors.FirstOrDefault() != null)
            {
                return(false);
            }

            Version edmxVersion = model.GetEdmxVersion();

            if (edmxVersion != null)
            {
                if (!CsdlConstants.SupportedEdmxVersions.ContainsKey(edmxVersion))
                {
                    errors = new EdmError[] { new EdmError(new CsdlLocation(0, 0), EdmErrorCode.UnknownEdmxVersion, Edm.Strings.Serializer_UnknownEdmxVersion) };
                    return(false);
                }
            }
            else if (!CsdlConstants.EdmToEdmxVersions.TryGetValue(model.GetEdmVersion() ?? EdmConstants.EdmVersionDefault, out edmxVersion))
            {
                errors = new EdmError[] { new EdmError(new CsdlLocation(0, 0), EdmErrorCode.UnknownEdmVersion, Edm.Strings.Serializer_UnknownEdmVersion) };
                return(false);
            }

            IEnumerable <EdmSchema> schemas = new EdmModelSchemaSeparationSerializationVisitor(model).GetSchemas();

            CsdlWriter edmxWriter = new CsdlWriter(model, schemas, writer, edmxVersion, target);

            edmxWriter.WriteCsdl();

            errors = Enumerable.Empty <EdmError>();
            return(true);
        }
예제 #9
0
        private void EdmxRoundTripCheck(string edmx, CsdlTarget target)
        {
            IEdmModel model = this.GetEdmxParserResult(edmx);

            this.EdmxRoundTripCheck(edmx, target, model);
        }
예제 #10
0
 void VerifyResult(string[] inputText, string expectedResult, CsdlTarget target)
 {
     VerifyResult(inputText, expectedResult, target, null);
 }