diff --git a/Testing/SystemTests/tests/analysis/ValidateFacilitiesFile.py b/Testing/SystemTests/tests/analysis/ValidateFacilitiesFile.py deleted file mode 100644 index df511c193dada8a86ecc32843cacf87d58de6778..0000000000000000000000000000000000000000 --- a/Testing/SystemTests/tests/analysis/ValidateFacilitiesFile.py +++ /dev/null @@ -1,50 +0,0 @@ -# Mantid Repository : https://github.com/mantidproject/mantid -# -# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, -# NScD Oak Ridge National Laboratory, European Spallation Source -# & Institut Laue - Langevin -# SPDX - License - Identifier: GPL - 3.0 + -#pylint: disable=no-init,invalid-name -from __future__ import (absolute_import, division, print_function) -from mantid import config -import os -import systemtesting - - -EXPECTED_EXT = '.expected' - - -class ValidateFacilitiesFile(systemtesting.MantidSystemTest): - - def skipTests(self): - try: - import minixsv # noqa - except ImportError: - return True - return False - - def runTest(self): - """Main entry point for the test suite""" - from minixsv import pyxsval - direc = config['instrumentDefinition.directory'] - filename = os.path.join(direc,'Facilities.xml') - xsdFile = os.path.join(direc,'Schema/Facilities/1.0/','FacilitiesSchema.xsd') - - # run the tests - failed = [] - try: - print("----------------------------------------") - print("Validating Facilities.xml") - pyxsval.parseAndValidateXmlInput(filename, xsdFile=xsdFile, validateSchema=0) - except Exception as e: - print("VALIDATION OF Facilities.xml FAILED WITH ERROR:") - print(e) - failed.append(filename) - - # final say on whether or not it 'worked' - print("----------------------------------------") - if len(failed) != 0: - print("SUMMARY OF FAILED FILES") - raise RuntimeError("Failed Validation of Facilities.xml") - else: - print("Successfully Validated Facilities.xml") diff --git a/Testing/SystemTests/tests/analysis/ValidateGroupingFiles.py b/Testing/SystemTests/tests/analysis/ValidateGroupingFiles.py deleted file mode 100644 index c1e72fc4e27c3891c04fc6d52f3182ad51e889f8..0000000000000000000000000000000000000000 --- a/Testing/SystemTests/tests/analysis/ValidateGroupingFiles.py +++ /dev/null @@ -1,70 +0,0 @@ -# Mantid Repository : https://github.com/mantidproject/mantid -# -# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, -# NScD Oak Ridge National Laboratory, European Spallation Source -# & Institut Laue - Langevin -# SPDX - License - Identifier: GPL - 3.0 + -#pylint: disable=no-init -from __future__ import (absolute_import, division, print_function) -from mantid import config -import os -import systemtesting -import glob - -EXPECTED_EXT = '.expected' - - -class ValidateGroupingFiles(systemtesting.MantidSystemTest): - - xsdFile ='' - - def skipTests(self): - try: - import minixsv # noqa - except ImportError: - return True - return False - - def __getDataFileList__(self): - # get a list of directories to look in - direc = config['instrumentDefinition.directory'] - direc = os.path.join(direc,'Grouping') - print("Looking for Grouping files in: %s" % direc) - cwd = os.getcwd() - os.chdir(direc) - myFiles = glob.glob("*Grouping*.xml") - os.chdir(cwd) - files = [] - for filename in myFiles: - files.append(os.path.join(direc, filename)) - return files - - def runTest(self): - """Main entry point for the test suite""" - from minixsv import pyxsval - direc = config['instrumentDefinition.directory'] - self.xsdFile = os.path.join(direc,'Schema/Grouping/1.0/','GroupingSchema.xsd') - files = self.__getDataFileList__() - - # run the tests - failed = [] - for filename in files: - try: - print("----------------------------------------") - print("Validating '%s'" % filename) - pyxsval.parseAndValidateXmlInput(filename, xsdFile=self.xsdFile, validateSchema=0) - except Exception as err: - print("VALIDATION OF '%s' FAILED WITH ERROR:" % filename) - print(err) - failed.append(filename) - - # final say on whether or not it 'worked' - print("----------------------------------------") - if len(failed) != 0: - print("SUMMARY OF FAILED FILES") - for filename in failed: - print(filename) - raise RuntimeError("Failed Validation for %d of %d files" - % (len(failed), len(files))) - else: - print("Successfully Validated %d files" % len(files)) diff --git a/Testing/SystemTests/tests/analysis/ValidateInstrumentDefinitionFiles.py b/Testing/SystemTests/tests/analysis/ValidateInstrumentDefinitionFiles.py deleted file mode 100644 index 0f68e5f18086381b618323d457327c6a7b911992..0000000000000000000000000000000000000000 --- a/Testing/SystemTests/tests/analysis/ValidateInstrumentDefinitionFiles.py +++ /dev/null @@ -1,113 +0,0 @@ -# Mantid Repository : https://github.com/mantidproject/mantid -# -# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, -# NScD Oak Ridge National Laboratory, European Spallation Source -# & Institut Laue - Langevin -# SPDX - License - Identifier: GPL - 3.0 + -#pylint: disable=invalid-name -#pylint: disable=no-init -from __future__ import (absolute_import, division, print_function) -from mantid import config -import os -import systemtesting -import glob - - -EXPECTED_EXT = '.expected' - - -class ValidateInstrumentDefinitionFiles(systemtesting.MantidSystemTest): - - xsdFile='' - # Explicitly specify single file to test. If None, test all. - theFileToTest=None #"MARI_Definition.xml" - - def skipTests(self): - try: - from genxmlif import GenXmlIfError # noqa - from minixsv import pyxsval # noqa - except ImportError: - return True - return False - - def __getDataFileList__(self): - # get a list of directories to look in - direc = config['instrumentDefinition.directory'] - print("Looking for instrument definition files in: %s" % direc) - cwd = os.getcwd() - os.chdir(direc) - myFiles = glob.glob("*Definition*.xml") - os.chdir(cwd) - files = [] - for filename in myFiles: - files.append(os.path.join(direc, filename)) - return files - - def runTest(self): - """Main entry point for the test suite""" - from minixsv import pyxsval - # need to extend minixsv library to add method for that forces it to - # validate against local schema when the xml file itself has - # reference to schema online. The preference is to systemtest against - # a local schema file to avoid this systemtest failing is - # external url temporariliy not available. Secondary it also avoid - # having to worry about proxies. - - #pylint: disable=too-few-public-methods - class MyXsValidator(pyxsval.XsValidator): - ######################################## - # force validation of XML input against local file - # - def validateXmlInputForceReadFile (self, xmlInputFile, inputTreeWrapper, xsdFile): - xsdTreeWrapper = self.parse (xsdFile) - xsdTreeWrapperList = [] - xsdTreeWrapperList.append(xsdTreeWrapper) - self._validateXmlInput (xmlInputFile, inputTreeWrapper, xsdTreeWrapperList) - for xsdTreeWrapper in xsdTreeWrapperList: - xsdTreeWrapper.unlink() - return inputTreeWrapper - - def parseAndValidateXmlInputForceReadFile(inputFile, xsdFile=None, **kw): - myXsValidator = MyXsValidator(**kw) - # parse XML input file - inputTreeWrapper = myXsValidator.parse (inputFile) - # validate XML input file - return myXsValidator.validateXmlInputForceReadFile (inputFile, inputTreeWrapper, xsdFile) - - direc = config['instrumentDefinition.directory'] - self.xsdFile = os.path.join(direc,'Schema/IDF/1.0/','IDFSchema.xsd') - if self.theFileToTest is None: - files = self.__getDataFileList__() - else: - files = [os.path.join(direc,self.theFileToTest)] - - # run the tests - failed = [] - for filename in files: - try: - print("----------------------------------------") - print("Validating '%s'" % filename) - parseAndValidateXmlInputForceReadFile(filename, xsdFile=self.xsdFile) - except Exception as e: - print("VALIDATION OF '%s' FAILED WITH ERROR:" % filename) - print(e) - failed.append(filename) - - # final say on whether or not it 'worked' - print("----------------------------------------") - if len(failed) != 0: - print("SUMMARY OF FAILED FILES") - for filename in failed: - print(filename) - raise RuntimeError("Failed Validation for %d of %d files" - % (len(failed), len(files))) - else: - print("Successfully Validated %d files" % len(files)) - - -if __name__ == '__main__': - - valid = ValidateInstrumentDefinitionFiles() - # validate specific file - #valid.theFileToTest = "MARI_Definition.xml" - valid.runTest() diff --git a/Testing/SystemTests/tests/analysis/ValidateInstrumentDir.py b/Testing/SystemTests/tests/analysis/ValidateInstrumentDir.py new file mode 100644 index 0000000000000000000000000000000000000000..de86b57a08d5649d5b3fee3d0134587bae298235 --- /dev/null +++ b/Testing/SystemTests/tests/analysis/ValidateInstrumentDir.py @@ -0,0 +1,122 @@ +# Mantid Repository : https://github.com/mantidproject/mantid +# +# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, +# NScD Oak Ridge National Laboratory, European Spallation Source +# & Institut Laue - Langevin +# SPDX - License - Identifier: GPL - 3.0 + +#pylint: disable=invalid-name +#pylint: disable=no-init +from __future__ import (absolute_import, division, print_function) + +import glob +import os + +from mantid import config +import six +import systemtesting + +if six.PY2: + from io import open # noqa + +# Constants +FILE_TO_TEST = None # "MARI_Definition.xml" +INSTRUMENT_DIR = config['instrumentDefinition.directory'] + + +class ValidateXML(object): + + def skipTests(self): + try: + import lxml # noqa + except ImportError: + return True + + return False + + def runTest(self): + """Main entry point for the test suite""" + from lxml import etree + + # read local schema + xsd_file = open(self.xsdpath(), "r", encoding="utf-8") + xsd_doc = etree.parse(xsd_file) + + def validate_definition(filepath): + schema = etree.XMLSchema(xsd_doc) + with open(filepath, "r", encoding="utf-8") as xml_file: + is_valid = schema.validate(etree.XML(xml_file.read().encode("utf-8"))) + if is_valid: + return is_valid, None + else: + return is_valid, schema.error_log.filter_from_errors()[0] + + if FILE_TO_TEST is None: + files = self.filelist() + else: + files = [os.path.join(INSTRUMENT_DIR, FILE_TO_TEST)] + + # run the tests + failed = [] + for filename in files: + print("----------------------------------------") + print("Validating '%s'" % filename) + valid, errors = validate_definition(filename) + if not valid: + print("VALIDATION OF '%s' FAILED WITH ERROR:" % filename) + print(errors) + failed.append(filename) + + # final say on whether or not it 'worked' + print("----------------------------------------") + if len(failed) != 0: + print("SUMMARY OF FAILED FILES") + for filename in failed: + print(filename) + raise RuntimeError("Failed Validation for %d of %d files" + % (len(failed), len(files))) + else: + print("Successfully Validated %d files" % len(files)) + + +class ValidateInstrumentDefinitionFiles(ValidateXML, systemtesting.MantidSystemTest): + + def xsdpath(self): + return os.path.join(INSTRUMENT_DIR, "Schema", "IDF", "1.0", + "IDFSchema.xsd") + + def filelist(self): + print("Looking for instrument definition files in: %s" % INSTRUMENT_DIR) + return glob.glob("{}/*Definition*.xml".format(INSTRUMENT_DIR)) + + +class ValidateParameterFiles(ValidateXML, systemtesting.MantidSystemTest): + + def xsdpath(self): + return os.path.join(INSTRUMENT_DIR, "Schema", "ParameterFile", "1.0", + "ParameterFileSchema.xsd") + + def filelist(self): + print("Looking for instrument definition files in: %s" % INSTRUMENT_DIR) + return glob.glob("{}/*Parameters*.xml".format(INSTRUMENT_DIR)) + + +class ValidateFacilitiesFile(ValidateXML, systemtesting.MantidSystemTest): + + def xsdpath(self): + return os.path.join(INSTRUMENT_DIR, "Schema", "Facilities", "1.0", + "FacilitiesSchema.xsd") + + def filelist(self): + return [os.path.join(INSTRUMENT_DIR, 'Facilities.xml')] + + +class ValidateGroupingFiles(ValidateXML, systemtesting.MantidSystemTest): + + def xsdpath(self): + return os.path.join(INSTRUMENT_DIR, "Schema", "Grouping", "1.0", + "GroupingSchema.xsd") + + def filelist(self): + grouping_dir = os.path.join(INSTRUMENT_DIR, "Grouping") + print("Looking for grouping files in: %s" % grouping_dir) + return glob.glob("{}/*Grouping*.xml".format(grouping_dir)) diff --git a/Testing/SystemTests/tests/analysis/ValidateParameterFiles.py b/Testing/SystemTests/tests/analysis/ValidateParameterFiles.py deleted file mode 100644 index 016fb9400aad6fe04f402ace52bf34195c2482a2..0000000000000000000000000000000000000000 --- a/Testing/SystemTests/tests/analysis/ValidateParameterFiles.py +++ /dev/null @@ -1,76 +0,0 @@ -# Mantid Repository : https://github.com/mantidproject/mantid -# -# Copyright © 2018 ISIS Rutherford Appleton Laboratory UKRI, -# NScD Oak Ridge National Laboratory, European Spallation Source -# & Institut Laue - Langevin -# SPDX - License - Identifier: GPL - 3.0 + -#pylint: disable=no-init,invalid-name -from __future__ import (absolute_import, division, print_function) -from mantid import config -import os -import systemtesting -import glob - -EXPECTED_EXT = '.expected' - - -class ValidateParameterFiles(systemtesting.MantidSystemTest): - - xsdFile='' - - def skipTests(self): - try: - from genxmlif import GenXmlIfError # noqa - from minixsv import pyxsval # noqa - except ImportError: - return True - return False - - def __getDataFileList__(self): - # get a list of directories to look in - direc = config['instrumentDefinition.directory'] - print("Looking for instrument definition files in: %s" % direc) - cwd = os.getcwd() - os.chdir(direc) - myFiles = glob.glob("*Parameters*.xml") - os.chdir(cwd) - files = [] - for filename in myFiles: - files.append(os.path.join(direc, filename)) - return files - - def runTest(self): - """Main entry point for the test suite""" - from minixsv import pyxsval # noqa - direc = config['instrumentDefinition.directory'] - print(direc) - self.xsdFile = os.path.join(direc,'Schema/ParameterFile/1.0/','ParameterFileSchema.xsd') - files = self.__getDataFileList__() - - # run the tests - failed = [] - for filename in files: - try: - print("----------------------------------------") - print("Validating '%s'" % filename) - pyxsval.parseAndValidateXmlInput(filename, xsdFile=self.xsdFile, validateSchema=0) - except Exception as e: - print("VALIDATION OF '%s' FAILED WITH ERROR:" % filename) - print(e) - failed.append(filename) - - # final say on whether or not it 'worked' - print("----------------------------------------") - if len(failed) != 0: - print("SUMMARY OF FAILED FILES") - for filename in failed: - print(filename) - raise RuntimeError("Failed Validation for %d of %d files" - % (len(failed), len(files))) - else: - print("Successfully Validated %d files" % len(files)) - - -if __name__ == '__main__': - valid = ValidateParameterFiles() - valid.runTest() diff --git a/buildconfig/CMake/Bootstrap.cmake b/buildconfig/CMake/Bootstrap.cmake index 7040f71e3fbd9b60eac71053416e067796149808..d6787dabec28cd6be97f477d678649c7f47d2f4b 100644 --- a/buildconfig/CMake/Bootstrap.cmake +++ b/buildconfig/CMake/Bootstrap.cmake @@ -10,7 +10,7 @@ if( MSVC ) include ( ExternalProject ) set( EXTERNAL_ROOT ${PROJECT_SOURCE_DIR}/external CACHE PATH "Location to clone third party dependencies to" ) set( THIRD_PARTY_GIT_URL "https://github.com/mantidproject/thirdparty-msvc2015.git" ) - set ( THIRD_PARTY_GIT_SHA1 aa4f7615564fb9c73dbfce40d24330a955ffcfd4 ) + set ( THIRD_PARTY_GIT_SHA1 a7bd18f35c8d67e68c3a965a07057efa266fc7d7 ) set ( THIRD_PARTY_DIR ${EXTERNAL_ROOT}/src/ThirdParty ) # Generates a script to do the clone/update in tmp set ( _project_name ThirdParty ) diff --git a/instrument/Schema/IDF/1.0/IDFSchema.xsd b/instrument/Schema/IDF/1.0/IDFSchema.xsd index c4925ed070949d4fcf04c9ac557660c3b84105ba..4764bda76f826fd2ee68eac4498a97e785b87e0b 100644 --- a/instrument/Schema/IDF/1.0/IDFSchema.xsd +++ b/instrument/Schema/IDF/1.0/IDFSchema.xsd @@ -194,7 +194,9 @@ </xs:complexType> </xs:element> <xs:element name="description"> - <xs:attribute name="is"/> + <xs:complexType> + <xs:attribute name="is"/> + </xs:complexType> </xs:element> <xs:element name="fixed"/> <xs:element name="formula">