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)
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)
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)
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