Exemplo n.º 1
0
        /*
         * TODO (mristin, 2020-10-05): This test has been temporary disabled so that we can merge in the branch
         * MIHO/EnhanceDocumentShelf. The test should be fixed in a future pull request and we will then re-enable it
         * again.
         *
         * Please do not forget to remove the Resharper directive at the top of this class.
         *
         * [Test]
         *
         * dead-csharp ignore this comment
         */
        public void TestLoadSaveXmlValidate()
        {
            var validator = AasSchemaValidation.NewXmlValidator();

            List <string> aasxPaths = SamplesAasxDir.ListAasxPaths();

            using (var tmpDir = new TemporaryDirectory())
            {
                string tmpDirPath = tmpDir.Path;

                foreach (string aasxPath in aasxPaths)
                {
                    using (var package = new AdminShellPackageEnv(aasxPath))
                    {
                        /*
                         * TODO (mristin, 2020-09-17): Remove autofix once XSD and Aasx library in sync
                         *
                         * Package has been loaded, now we need to do an automatic check & fix.
                         *
                         * This is necessary as Aasx library is still not conform with the XSD AASX schema and breaks
                         * certain constraints (*e.g.*, the cardinality of langString = 1..*).
                         */
                        var recs = package.AasEnv.ValidateAll();
                        if (recs != null)
                        {
                            package.AasEnv.AutoFix(recs);
                        }

                        // Save as XML
                        string name    = Path.GetFileName(aasxPath);
                        string outPath = System.IO.Path.Combine(tmpDirPath, $"{name}.converted.xml");
                        package.SaveAs(outPath, writeFreshly: true);

                        using (var fileStream = System.IO.File.OpenRead(outPath))
                        {
                            var records = new AasValidationRecordList();
                            validator.Validate(records, fileStream);
                            if (records.Count != 0)
                            {
                                var parts = new List <string>
                                {
                                    $"Failed to validate XML file exported from {aasxPath} to {outPath}:"
                                };
                                parts.AddRange(records.Select((r) => r.Message));
                                throw new AssertionException(string.Join(Environment.NewLine, parts));
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void TestSuccess()
        {
            string successDir = Path.Combine(
                TestContext.CurrentContext.TestDirectory,
                "TestResources\\XmlValidation\\expectedOk");

            if (!System.IO.Directory.Exists(successDir))
            {
                throw new InvalidOperationException(
                          $"The directory containing the valid AAS XML files does not exist or is not a directory: " +
                          successDir);
            }

            var paths = System.IO.Directory.GetFiles(successDir)
                        .Where(p => System.IO.Path.GetExtension(p) == ".xml")
                        .ToList();

            if (paths.Count == 0)
            {
                throw new InvalidOperationException(
                          $"No *.xml files were found in the directory expected to contain the valid XML files: " +
                          successDir);
            }

            var validator = AasSchemaValidation.NewXmlValidator();

            foreach (string path in paths)
            {
                using (var fileStream = System.IO.File.OpenRead(path))
                {
                    var records = new AasValidationRecordList();
                    validator.Validate(records, fileStream);
                    if (records.Count != 0)
                    {
                        var parts = new List <string>
                        {
                            $"Failed to validate XML file {path}:"
                        };
                        parts.AddRange(records.Select((r) => r.Message));
                        throw new AssertionException(string.Join(Environment.NewLine, parts));
                    }
                }
            }
        }