Example #1
0
    def gatherTests(self, dir):
        dirName = os.path.basename(dir)
        if (dirName in self.skipDirs):
            return

        self.ui.note("Scanning directory: ", dir, "\n")
        suiteFileNames = defaultdict(set)
        for fileName in Utils.listfiles(dir):
            filePath = os.path.join(dir, fileName)
            if not self.sourceTree.isTestCase(filePath):
                continue

            source = self.sourceCache.generateSource(filePath, fileName)
            if not source.isTest():
                continue

            metaData = source.getMetadata(True)
            if not metaData:
                if (source.errors):
                    self.ui.warn("Error parsing '", filePath, "': ", ' '.join(source.errors), "\n")
                else:
                    self.ui.warn("No metadata available for '", filePath, "'\n")
                continue

            for specURL in metaData['links']:
                specName, anchorURL = self.getSpecName(specURL)
                if not specName:
                    self.ui.note("Unknown specification URL: ", specURL, "\n  in: ", filePath, "\n")
                    continue

                if not specName in self.buildSpecNames:
                    continue

                if not anchorURL:
                    self.ui.warn("Test links to unknown specification anchor: ", specURL, "\n  in: ", filePath, "\n")
                    continue

                for testSuiteName in self.buildSpecNames[specName]:
                    formats = self.testSuiteData[testSuiteName].get('formats')
                    if (formats):
                        for formatName in formats:
                            if (((formatName) in self.formatData) and
                                (self.formatData[formatName].get('mime_type') == source.mimetype)):
                                suiteFileNames[testSuiteName].add(fileName)
                                break
                        else:
                            self.ui.note("Test not in acceptable format: ", source.mimetype, "\n for: ", filePath, "\n")

        for testSuiteName in suiteFileNames:
            if (dirName in self.rawDirs):
                self.testSuites[testSuiteName].addRaw(dir, self.rawDirs[dirName])
            else:
                self.testSuites[testSuiteName].addTestsByList(dir, suiteFileNames[testSuiteName])

        for subDir in Utils.listdirs(dir):
            subDirPath = os.path.join(dir, subDir)
            if (not (self.sourceTree.isIgnoredDir(subDirPath) or (subDirPath in self.ignorePaths))):
                self.gatherTests(subDirPath)
Example #2
0
    def gatherTests(self, dir):
        dirName = os.path.basename(dir)
        if (dirName in self.skipDirs):
            return

        self.ui.note("Scanning directory: ", dir, "\n")
        suiteFileNames = {}
        for fileName in Utils.listfiles(dir):
            filePath = os.path.join(dir, fileName)
            if (self.sourceTree.isTestCase(filePath)):
                source = self.sourceCache.generateSource(filePath, fileName)
                if (source.isTest()):
                    metaData = source.getMetadata(True)
                    if (metaData):
                        for specURL in metaData['links']:
                            specName, anchorURL = self.getSpecName(specURL)
                            if (specName):
                                if (specName in self.buildSpecNames):
                                    if (anchorURL):
                                        for testSuiteName in self.buildSpecNames[specName]:
                                            formats = self.testSuiteData[testSuiteName].get('formats')
                                            if (formats):
                                                for formatName in formats:
                                                    if (((formatName) in self.formatData) and
                                                        (self.formatData[formatName].get('mime_type') == source.mimetype)):
                                                        if (testSuiteName not in suiteFileNames):
                                                            suiteFileNames[testSuiteName] = set()
                                                        suiteFileNames[testSuiteName].add(fileName)
                                                        break
                                                else:
                                                    self.ui.note("Test not in acceptable format: ", source.mimetype, "\n for: ", filePath, "\n")
                                    else:
                                        self.ui.warn("Test links to unknown specification anchor: ", specURL, "\n  in: ", filePath, "\n")
                            else:
                                self.ui.note("Unknown specification URL: ", specURL, "\n  in: ", filePath, "\n")
                    else:
                        if (source.errors):
                            self.ui.warn("Error parsing '", filePath, "': ", ' '.join(source.errors), "\n")
                        else:
                            self.ui.warn("No metadata available for '", filePath, "'\n")


        for testSuiteName in suiteFileNames:
            if (dirName in self.rawDirs):
                self.testSuites[testSuiteName].addRaw(dir, self.rawDirs[dirName])
            else:
                self.testSuites[testSuiteName].addTestsByList(dir, suiteFileNames[testSuiteName])

        for subDir in Utils.listdirs(dir):
            subDirPath = os.path.join(dir, subDir)
            if (not (self.sourceTree.isIgnoredDir(subDirPath) or (subDirPath in self.ignorePaths))):
                self.gatherTests(subDirPath)
Example #3
0
    def gatherTests(self, dir):
        dirName = os.path.basename(dir)
        if (dirName in self.skipDirs):
            return

        self.ui.note("Scanning directory: ", dir, "\n")
        suiteFileNames = {}
        for fileName in Utils.listfiles(dir):
            filePath = os.path.join(dir, fileName)
            if (self.sourceTree.isTestCase(filePath)):
                source = self.sourceCache.generateSource(filePath, fileName)
                if (source.isTest()):
                    metaData = source.getMetadata(True)
                    if (metaData):
                        for specURL in metaData['links']:
                            specName, anchorURL = self.getSpecName(specURL)
                            if (specName):
                                if (specName in self.buildSpecNames):
                                    if (anchorURL):
                                        for testSuiteName in self.buildSpecNames[specName]:
                                            if (testSuiteName not in suiteFileNames):
                                                suiteFileNames[testSuiteName] = set()
                                            suiteFileNames[testSuiteName].add(fileName)
                                    else:
                                        self.ui.warn("Test links to unknown specification anchor: ", specURL, "\n  in: ", filePath, "\n")
                            else:
                                self.ui.note("Unknown specification URL: ", specURL, "\n  in: ", filePath, "\n")
                    else:
                        if (source.errors):
                            self.ui.warn("Error parsing '", filePath, "': ", ' '.join(source.errors), "\n")
                        else:
                            self.ui.warn("No metadata available for '", filePath, "'\n")


        for testSuiteName in suiteFileNames:
            if (dirName in self.rawDirs):
                self.testSuites[testSuiteName].addRaw(dir, self.rawDirs[dirName])
            else:
                self.testSuites[testSuiteName].addTestsByList(dir, suiteFileNames[testSuiteName])

        for subDir in Utils.listdirs(dir):
            subDirPath = os.path.join(dir, subDir)
            if (not (self.sourceTree.isIgnoredDir(subDirPath) or (subDirPath in self.ignorePaths))):
                self.gatherTests(subDirPath)
Example #4
0
    def build(self, testSuiteNames):
        try:
            os.makedirs(self.cacheDir)
        except:
            pass
        self.testSuiteData = self._loadShepherdData('test_suites', 'test suite', repo = 'css')
        if (not self.testSuiteData):
            self.ui.warn("ERROR: Unable to load test suite information.\n")
            return -1
        if (testSuiteNames):
            self.buildSuiteNames = []
            for testSuiteName in testSuiteNames:
                if (testSuiteName in self.testSuiteData):
                    self.buildSuiteNames.append(testSuiteName)
                else:
                    self.ui.status("Unknown test suite: ", testSuiteName, "\n")
        else:
            self.buildSuiteNames = [testSuiteName for testSuiteName in self.testSuiteData if self.testSuiteData[testSuiteName].get('build')]

        self.buildSpecNames = {}
        if (self.buildSuiteNames):
            self.specificationData = self._loadShepherdData('specifications', 'specification', anchors = True, draft = True)
            if (not self.specificationData):
                self.ui.warn("ERROR: Unable to load specification information.\n")
                return -2
            for testSuiteName in self.buildSuiteNames:
                specNames = self.testSuiteData[testSuiteName].get('specs')
                if (specNames):
                    for specName in specNames:
                        if (specName in self.specificationData):
                            if (specName in self.buildSpecNames):
                                self.buildSpecNames[specName].append(testSuiteName)
                            else:
                                self.buildSpecNames[specName] = [testSuiteName]
                        else:
                            self.ui.warn("WARNING: Test suite '", testSuiteName, "' references unknown specification: '", specName, "'.\n")
                else:
                    self.ui.warn("ERROR: Test suite '", testSuiteName, "' does not have target specifications.\n")
        else:
            self.ui.status("No test suites identified\n")
            return 0

        if (not self.buildSpecNames):
            self.ui.status("No target specifications identified\n")
            return -3

        self.flagData = self._loadShepherdData('test_flags', 'test flag')
        if (not self.flagData):
            self.ui.warn("ERROR: Unable to load flag information\n")
            return -4

        self.formatData = self._loadShepherdData('test_formats', 'test format')
        if (not self.formatData):
            self.ui.warn("ERROR: Unable to load format information\n")
            return -5


        self.buildSuiteNames.sort()

        for testSuiteName in self.buildSuiteNames:
            data = self.testSuiteData[testSuiteName]
            specData = self.specificationData[data['specs'][0]]
            specURL = specData['base_uri'] if ('base_uri' in specData) else specData.get('draft_uri')
            draftURL = specData['draft_uri'] if ('draft_uri' in specData) else specData.get('base_uri')
            self.testSuites[testSuiteName] = Suite.TestSuite(testSuiteName, data['title'], specURL, draftURL, self.sourceCache, self.ui) # XXX need to support multiple specs
            if ('formats' in data):
                self.testSuites[testSuiteName].setFormats(data['formats'])

        self.ui.status("Scanning test files\n")

        for dir in Utils.listdirs('.'):
            if (not (self.sourceTree.isIgnoredDir(dir) or (dir in self.ignorePaths))):
                self.gatherTests(dir)


        if (os.path.exists(self.workPath)):
            self.ui.note("Clearing work path: ", self.workPath, "\n")
            shutil.rmtree(self.workPath)

        suiteData = self.getSuiteData()
        flagData = self.getFlags()
        templatePath = os.path.join('tools', 'templates')
        for testSuiteName in self.buildSuiteNames:
            testSuite = self.testSuites[testSuiteName]
            self.ui.status("Building ", testSuiteName, "\n")
            specSections = self.getSections(self.testSuiteData[testSuiteName]['specs'][0])
            indexer = Indexer.Indexer(testSuite, specSections, suiteData, flagData, True,
                                      templatePathList = [templatePath],
                                      extraData = {'devel' : False, 'official' : True })
            workPath = os.path.join(self.workPath, testSuiteName)
            testSuite.buildInto(workPath, indexer)

        # move from work path to output path
        for testSuiteName in self.buildSuiteNames:
            workPath = os.path.join(self.workPath, testSuiteName)
            outputPath = os.path.join(self.outputPath, testSuiteName)
            backupPath = os.path.join(self.backupPath, testSuiteName) if (self.backupPath) else None
            if (os.path.exists(workPath)):
                if (os.path.exists(outputPath)):
                    if (backupPath):
                        if (os.path.exists(backupPath)):
                            self.ui.note("Removing ", backupPath, "\n")
                            shutil.rmtree(backupPath)       # delete old backup
                        self.ui.note("Backing up ", outputPath, " to ", backupPath, "\n")
                        shutil.move(outputPath, backupPath) # backup old output
                    else:
                        self.ui.note("Removing ", outputPath, "\n")
                        shutil.rmtree(outputPath)           # no backups, delete old output
                self.ui.note("Moving ", workPath, " to ", outputPath, "\n")
                shutil.move(workPath, outputPath)
        if (os.path.exists(self.workPath)):
            shutil.rmtree(self.workPath)
        return 0