def __init__(self, test, stem, standardFile, tmpFile, testInProgress=False, **kw): self.stdFile = standardFile self.stdCmpFile = self.stdFile self.tmpFile = tmpFile self.tmpCmpFile = tmpFile self.stem = stem self.differenceCache = self.SAME self.recalculationTime = None self.diag = logging.getLogger("FileComparison") self.severity = test.getCompositeConfigValue("failure_severity", self.stem) self.displayPriority = test.getCompositeConfigValue("failure_display_priority", self.stem) maxLength = test.getConfigValue("lines_of_text_difference") maxWidth = test.getConfigValue("max_width_text_difference") # It would be nice if this could be replaced by some automagic file type detection # mechanism, such as the *nix 'file' command, but as the first implementation I've # chosen to use a manually created list instead. self.binaryFile = test.configValueMatches("binary_file", self.stem) self.previewGenerator = plugins.PreviewGenerator(maxWidth, maxLength) self.textDiffTool = test.getConfigValue("text_diff_program") self.textDiffToolMaxSize = plugins.parseBytes(test.getCompositeConfigValue("max_file_size", self.textDiffTool)) self.freeTextBody = None # subclasses may override if they don't want to store in this way self.cacheDifferences(test, testInProgress) self.diag.info("Created file comparison std: " + repr(self.stdFile) + " tmp: " + repr(self.tmpFile) + " diff: " + repr(self.differenceCache))
def getConfMessageForFile(self, fileName, associatedObject): fileToView = self.getFileToView(fileName, associatedObject) if os.path.isfile(fileToView) or os.path.islink(fileToView): viewTool = self.getViewToolName(fileToView) if viewTool: args = (viewTool, fileToView, associatedObject) maxFileSize = plugins.parseBytes(self.getConfigValue("max_file_size", viewTool)) if maxFileSize >= 0: largestFileSize = self.getLargestFileSize(fileToView, associatedObject) if largestFileSize > maxFileSize: message = ( "You are trying to view a file of size " + str(largestFileSize) + " bytes, while a limit of " + str(maxFileSize) + " bytes is set for the tool '" + viewTool + "'. Are you sure you wish to continue?" ) return message, args return "", args else: raise plugins.TextTestError, "No " + self.getToolDescription() + " is defined for files of type '" + os.path.basename( fileToView ).split( "." )[ 0 ] + "'.\nPlease point the configuration entry '" + self.getToolConfigEntry() + "' at a valid program to view the file." else: raise plugins.TextTestError, "File '" + os.path.basename( fileName ) + "' cannot be viewed as it has been removed in the file system." + self.noFileAdvice()