TestCenter Reference
TestHelper.py
Go to the documentation of this file.
1 #
2 # Copyright 2007, MeVis Medical Solutions AG
3 #
4 # The user may use this file in accordance with the license agreement provided with
5 # the Software or, alternatively, in accordance with the terms contained in a
6 # written agreement between the user and MeVis Medical Solutions AG.
7 #
8 # For further information use the contact form at https://www.mevislab.de/contact
9 #
10 
11 from future import standard_library
12 standard_library.install_aliases()
13 from builtins import str
14 from builtins import object
15 
16 # Already ported to Python 3
17 
22 
23 # -- system imports ----------------------------------------------------------------------------{{{-
24 import base64
25 import os
26 import sys
27 
28 import _thread
29 import traceback
30 # ----------------------------------------------------------------------------------------------}}}-
31 
32 # -- local imports -----------------------------------------------------------------------------{{{-
33 import mevis
34 
35 from TestSupport.ChangeSet import ChangeSet
36 from TestSupport.MessageFilters import MessageHandling, ErrorMessageFilter, WarningMessageFilter, InfoMessageFilter
37 # ----------------------------------------------------------------------------------------------}}}-
38 
39 _mlab_do_not_reload = True # exempt this module from Python module reloading, value is currently ignored
40 
41 gCurrentSpecialMessage = ""
42 gSpecialMessageMarker = "<MLAB TC=1/>"
43 gEnablePrettyLogging = False
44 gLogInfoMessages = True
45 
47  global gCurrentSpecialMessage
48  msg = gCurrentSpecialMessage
49  gCurrentSpecialMessage = ""
50  return msg
51 
52 def emitSpecialMessage(loggingMethod, file, line, type, message, escapeHtml=True, formattedStack=''):
53  global gCurrentSpecialMessage
54  if escapeHtml:
55  escapedMsg = mevis.MLAB.escapeString(message)
56  escapedMsg = escapedMsg.replace("\n", "<br>")
57  else:
58  escapedMsg = message
59 
60  if sys.version_info.major >= 3:
61  if isinstance(formattedStack, str):
62  formattedStack = formattedStack.encode()
63 
64  encodedStackTrace = str(base64.b64encode(formattedStack))
65  # store internal message to be used from LogHandler:
66  specialMessage = "##M[%s|%s|%s|%s]: %s" % (file, line, type, encodedStackTrace, escapedMsg)
67  if gEnablePrettyLogging:
68  gCurrentSpecialMessage = specialMessage
69  escapedMsg = "<font style='font-weight:normal'><font color=black>" + mevis.MLAB.createHyperLinkWithLine(file, line) + "(" + str(line) + "):</font></font> " + escapedMsg
70  escapedMsg += gSpecialMessageMarker
71  loggingMethod(escapedMsg)
72  else:
73  loggingMethod(specialMessage)
74 
75 def emitSpecialCommand(file, line, type, fileList, message, escapeHtml=True):
76  global gCurrentSpecialMessage
77  if escapeHtml:
78  escapedMsg = mevis.MLAB.escapeString(message)
79  else:
80  escapedMsg = message
81 
82  # store internal message to be used from LogHandler:
83  specialMessage = "##C[%s|%s|%s:%s] %s" % (file, line, type, ",".join(fileList), str(escapedMsg))
84  if gEnablePrettyLogging:
85  gCurrentSpecialMessage = specialMessage
86  escapedMsg = "<font style='font-weight:normal'><font color=black>" + mevis.MLAB.createHyperLinkWithLine(file, line) + "(" + str(line) + "):</font></font> " + escapedMsg
87  for fileInList in fileList:
88  if '|' in fileInList:
89  fileInList = fileInList[fileInList.index("|")+1:]
90  escapedMsg += " " + mevis.MLAB.createHyperLink(fileInList)
91  escapedMsg += gSpecialMessageMarker
92  mevis.MLAB.logHTML(escapedMsg)
93  else:
94  mevis.MLAB.logHTML(specialMessage)
95 
96 
98  """ This decorator is used to specify the stack frame that is used to detect the location while logging.
99  It uses the stack frame that calls the given function. Functions with this decorator can call each other
100  recursively. The first stack frame of such a recursion is then used. """
101  def setLoggingCallerStackFrameWrapper(*args, **kwargs):
103  return func(*args, **kwargs)
104  return setLoggingCallerStackFrameWrapper
105 
106 # Alias for backward compatibility of old TestCases
107 IncreaseLoggingStackDepthDecorator = UseStackFrameFromCallerForLogging
108 
109 
111  def __init__(self, stackDepth):
112  self.__testHelper__testHelper = TestHelper.getInstance()
113  self.__stackDepth__stackDepth = stackDepth
114  self.__hasSetStackFrame__hasSetStackFrame = False
115 
116  def __enter__(self):
117  if not self.__testHelper__testHelper.hasCallerStackFrame():
118  stackFrame = self.getCallingStackFramegetCallingStackFrame(self.__stackDepth__stackDepth+1)
119  self.__testHelper__testHelper.setCallerStackFrame(stackFrame)
120  self.__hasSetStackFrame__hasSetStackFrame = True
121 
122  def __exit__(self, *_):
123  if self.__hasSetStackFrame__hasSetStackFrame:
124  self.__testHelper__testHelper.resetCallerStackFrame()
125 
126  def getCallingStackFrame(self, stackDepth):
127  return sys._getframe(stackDepth+1)
128 
129 # Returns pattern attribute or repr(exp) if the object does not have a pattern
130 def regexpToString(exp):
131  try:
132  result = exp.pattern
133  except:
134  result = repr(exp)
135  return result
136 
137 
138 
139 # Helper object to supress errors,
140 # make sure that you call handleResult() in a finally: clause
141 # If no logErrorFunc it given, matching error will just be ignored, not expected, so no error will be logged if no match was found.
142 class SuppressedErrors(object):
143  def __init__(self, errorRegExp, logErrorFunc, preventReplacingMessageSeverity=False):
144  self.__logErrorFunc__logErrorFunc = logErrorFunc
145  self.__errorRegExp__errorRegExp = errorRegExp
146  handling = MessageHandling.EXPECT if logErrorFunc is not None else MessageHandling.IGNORE
147  self.__messageFilter__messageFilter = ErrorMessageFilter( handling, errorRegExp )
148  self.__preventReplacingMessageSeverity__preventReplacingMessageSeverity = preventReplacingMessageSeverity
149  self.__previousKeepMessageSeverity__previousKeepMessageSeverity = None
150  self.__enableErrorHandling__enableErrorHandling( True )
151 
152  def __enableErrorHandling( self, enable ):
153  logHandler = TestHelper.getInstance().getLogHandler()
154  logHandler.pushOrPopMessageFilter(enable, self.__messageFilter__messageFilter)
155  if self.__preventReplacingMessageSeverity__preventReplacingMessageSeverity:
156  if enable:
157  self.__previousKeepMessageSeverity__previousKeepMessageSeverity = logHandler.setKeepMessageSeverity(True)
158  else:
159  if self.__previousKeepMessageSeverity__previousKeepMessageSeverity != None:
160  logHandler.setKeepMessageSeverity(self.__previousKeepMessageSeverity__previousKeepMessageSeverity)
161  self.__previousKeepMessageSeverity__previousKeepMessageSeverity = None
162 
163  def handleResult(self):
164  mevis.MLAB.priv().flushPendingMessages()
165  hasCaughtError = self.__messageFilter__messageFilter.hadMatch
166  self.__enableErrorHandling__enableErrorHandling( False )
167  if self.__logErrorFunc__logErrorFunc and not hasCaughtError:
168  self.__logErrorFunc__logErrorFunc("Expected error did not occur: " + regexpToString(self.__errorRegExp__errorRegExp))
169  return hasCaughtError
170 
171 
173  """Helper object to supress warnings.
174  Make sure that you call handleResult() in a finally: clause.
175  If no logErrorFunc it given, matching warnings will just be ignored, not expected,
176  so no error will be logged if no match was found.
177  """
178  def __init__(self, warningRegExp, logErrorFunc=None, expectWarning=True):
179  self.__logErrorFunc__logErrorFunc = logErrorFunc
180  handling = MessageHandling.EXPECT if logErrorFunc is not None else MessageHandling.IGNORE
181  self.__warningRegExp__warningRegExp = warningRegExp
182  self.__expectWarning__expectWarning = expectWarning
183  self.__messageFilter__messageFilter = WarningMessageFilter( handling, warningRegExp )
184  self.__enableWarningHandling__enableWarningHandling( True )
185 
186  def __enableWarningHandling( self, enable ):
187  TestHelper.getInstance().getLogHandler().pushOrPopMessageFilter(enable, self.__messageFilter__messageFilter)
188 
189  def handleResult(self):
190  mevis.MLAB.priv().flushPendingMessages()
191  hasCaughtWarning = self.__messageFilter__messageFilter.hadMatch
192  self.__enableWarningHandling__enableWarningHandling(False)
193  if self.__logErrorFunc__logErrorFunc and hasCaughtWarning != self.__expectWarning__expectWarning:
194  if self.__expectWarning__expectWarning:
195  self.__logErrorFunc__logErrorFunc("Expected warning did not occur: " + regexpToString(self.__warningRegExp__warningRegExp))
196  else:
197  self.__logErrorFunc__logErrorFunc("Unexpected warning did occur: " + regexpToString(self.__warningRegExp__warningRegExp))
198 
199  return hasCaughtWarning == self.__expectWarning__expectWarning
200 
201 
202 # Helper object to expect infos,
203 # make sure that you call handleResult() in a finally: clause
204 class ExpectInfos(object):
205  def __init__(self, infoRegExp, allowUnexpectedMessages, logErrorFunc):
206  self.__infoRegExp__infoRegExp = infoRegExp
207  self.__allowUnexpectedMessages__allowUnexpectedMessages = allowUnexpectedMessages
208  self.__logErrorFunc__logErrorFunc = logErrorFunc
209  self.__messageFilter__messageFilter = InfoMessageFilter( MessageHandling.EXPECT, infoRegExp )
210  self.__enableInfoHandling__enableInfoHandling( True )
211 
212  def __enableInfoHandling( self, enable ):
213  TestHelper.getInstance().getLogHandler().pushOrPopMessageFilter(enable, self.__messageFilter__messageFilter)
214 
215  def handleResult(self):
216  mevis.MLAB.priv().flushPendingMessages()
217  hadUnexpectedInfo = self.__messageFilter__messageFilter.hadNonMatch
218  hadExpectedInfo = self.__messageFilter__messageFilter.hadMatch
219  self.__enableInfoHandling__enableInfoHandling( False )
220  if hadUnexpectedInfo:
221  if not self.__allowUnexpectedMessages__allowUnexpectedMessages:
222  self.__logErrorFunc__logErrorFunc("Unexpected info message occurred")
223  if not hadExpectedInfo:
224  self.__logErrorFunc__logErrorFunc("Expected info message did not occur: " + regexpToString(self.__infoRegExp__infoRegExp))
225 
226 # -- class TC_ChangeSet ------------------------------------------------------------------------{{{-
228  # -- def __init__ ----------------------------------------------------------------------------{{{-
229 
231  def __init__ (self, context):
232  ChangeSet.__init__(self, context)
233  # --------------------------------------------------------------------------------------------}}}-
234 
235  # -- def _logDecorator -----------------------------------------------------------------------{{{-
236  def _logDecorator (func):
237  def wrapper (*args, **kwds):
239  loggingMethod, message = func(*args, **kwds)
240  if gLogInfoMessages or (loggingMethod != mevis.MLAB.logHTML):
241  stackFrame = TestHelper.getInstance().getCallerStackFrame()
242  stackLine = traceback.extract_stack(stackFrame, 1)[0]
243  emitSpecialMessage(loggingMethod, stackLine[0], stackLine[1], "ChangeSet", message, escapeHtml=True)
244  return wrapper
245  # --------------------------------------------------------------------------------------------}}}-
246 
247  # -- def _logInfo ----------------------------------------------------------------------------{{{-
248  @_logDecorator
249  def _logInfo (self, message):
250  return mevis.MLAB.logHTML, message
251  # --------------------------------------------------------------------------------------------}}}-
252 
253  # -- def _logError ---------------------------------------------------------------------------{{{-
254  @_logDecorator
255  def _logError (self, message):
256  return mevis.MLAB.logErrorHTML, message
257  # --------------------------------------------------------------------------------------------}}}-
258 # ----------------------------------------------------------------------------------------------}}}-
259 
260 # Exception that is raised when a test execution is cancelled.
261 # This may happen because of the stop-on-first-error feature
262 # or because the user cancels a test run.
263 class CancelTestException(Exception):
264  pass
265 
266 # -- class TestHelper --------------------------------------------------------------------------{{{-
267 
271 class TestHelper (object):
272  # -- member variables ------------------------------------------------------------------------{{{-
273 
274  _mCtx = None
275 
276  _mTestCaseContext = None
277 
278  _mHelperModule = None
279 
280  _mResultDirectory = None
281 
282  _mPackageList = None
283 
284 
285  _mTestCaseName = None
286 
287  _mModuleName = None
288 
289 
290  _mTestCaseDataDirectory = None
291 
292  _mTestCaseResultDirectory = None
293 
294 
295  _mChangeSetStack = None
296 
297 
298  _mLogHandler = None
299 
300 
301  _mStackFrame = None
302 
303 
304  _mEnvironmentStack = None
305 
306 
307  _mExtraTestCaseResults = None
308 
309 
310  _mMacrosLogOnSuccess = True
311 
312 
313  __lockObj = _thread.allocate_lock()
314 
315  __instance = None
316  # --------------------------------------------------------------------------------------------}}}-
317 
318  # -- def __new__ -----------------------------------------------------------------------------{{{-
319 
320  def __new__ (self, *args, **kargs):
321  return self.getInstancegetInstance(*args, **kargs)
322  # --------------------------------------------------------------------------------------------}}}-
323 
324  # -- def __init__ ----------------------------------------------------------------------------{{{-
325 
328  def __init__ (self, *args, **kargs):
329  pass
330  # --------------------------------------------------------------------------------------------}}}-
331 
332  # -- def getInstance -------------------------------------------------------------------------{{{-
333 
334  @classmethod
335  def getInstance (self, *args, **kargs):
336  '''Static method to have a reference to **THE UNIQUE** instance'''
337  if len(kargs) not in (0, 2):
338  raise Exception("Singleton's getInstance must be called with context and result directory arguments or without any!")
339 
340  initialize = (len(kargs) == 2)
341  # Critical section start
342  self.__lockObj__lockObj.acquire()
343  try:
344  if self.__instance__instance is None:
345  # (Some exception may be thrown...)
346  if not "context" in kargs or not "resultDir" in kargs:
347  raise Exception("Singleton must be initialized with context and result directory!")
348  # Initialize **the unique** instance
349  self.__instance__instance = object.__new__(self)
350 
351  if initialize:
352  '''Initialize object **here**, as you would do in __init__()...'''
353  self._mResultDirectory_mResultDirectory = kargs["resultDir"]
354  self._mCtx_mCtx = kargs["context"]
355 
356  # The FunctionalTesting module contains some helpful modules that are used in the methods.
357  if self._mHelperModule_mHelperModule:
358  self._mHelperModule_mHelperModule.remove()
359  self._mHelperModule_mHelperModule = self._mCtx_mCtx.addModule(mevis.MLAB.moduleLiteral("TestCenterHelperModule"))
360 
361  self._mChangeSetStack_mChangeSetStack = []
362  self._mEnvironmentStack_mEnvironmentStack = []
363 
364  finally:
365  # Exit from critical section whatever happens
366  self.__lockObj__lockObj.release()
367  # Critical section end
368  return self.__instance__instance
369  # --------------------------------------------------------------------------------------------}}}-
370 
371  # -- def hasInstance -------------------------------------------------------------------------{{{-
372 
373  @classmethod
374  def hasInstance(self):
375  return self.__instance__instance is not None
376  # --------------------------------------------------------------------------------------------}}}-
377 
378  # -- def setPackageList ----------------------------------------------------------------------{{{-
379 
380  def setPackageList (self, packageList):
381  self._mPackageList_mPackageList = packageList
382  # --------------------------------------------------------------------------------------------}}}-
383 
384  # -- def getPackageList ----------------------------------------------------------------------{{{-
385 
386  def getPackageList (self):
387  return self._mPackageList_mPackageList
388  # --------------------------------------------------------------------------------------------}}}-
389 
390  # -- def getGlobalContext --------------------------------------------------------------------{{{-
391  def getGlobalContext (self):
392  return self._mCtx_mCtx
393  # --------------------------------------------------------------------------------------------}}}-
394 
395  # -- def setTestCaseContext ------------------------------------------------------------------{{{-
396 
397  def setTestCaseContext (self, ctx):
398  self._mTestCaseContext_mTestCaseContext = ctx
399  self._mChangeSet_mChangeSet = TC_ChangeSet(ctx)
400  self._mExtraTestCaseResults_mExtraTestCaseResults = []
401  # --------------------------------------------------------------------------------------------}}}-
402 
403  # -- def setMacrosLogOnSuccess ---------------------------------------------------------------{{{-
404  def setMacrosLogOnSuccess (self, macrosLogOnSuccess):
405  self._mMacrosLogOnSuccess_mMacrosLogOnSuccess_mMacrosLogOnSuccess = macrosLogOnSuccess
406  # --------------------------------------------------------------------------------------------}}}-
407 
408  # -- def getMacrosLogOnSuccess ---------------------------------------------------------------{{{-
410  return self._mMacrosLogOnSuccess_mMacrosLogOnSuccess_mMacrosLogOnSuccess
411  # --------------------------------------------------------------------------------------------}}}-
412 
413  # -- def getTestCaseContext ------------------------------------------------------------------{{{-
414 
415  def getTestCaseContext (self):
416  return self._mTestCaseContext_mTestCaseContext
417  # --------------------------------------------------------------------------------------------}}}-
418 
419  # -- def getHelperContext --------------------------------------------------------------------{{{-
420  def getHelperContext (self):
421  return self._mHelperModule_mHelperModule
422  # --------------------------------------------------------------------------------------------}}}-
423 
424  # -- def getResultDirectory ------------------------------------------------------------------{{{-
425  def getResultDirectory (self):
426  return self._mResultDirectory_mResultDirectory
427  # --------------------------------------------------------------------------------------------}}}-
428 
429  # -- def setModuleName -----------------------------------------------------------------------{{{-
430  def setModuleName (self, moduleName):
431  self._mModuleName_mModuleName = moduleName
432  # --------------------------------------------------------------------------------------------}}}-
433 
434  # -- def getModuleName -----------------------------------------------------------------------{{{-
435  def getModuleName (self):
436  return self._mModuleName_mModuleName
437  # --------------------------------------------------------------------------------------------}}}-
438 
439  # -- def setTestCaseName ---------------------------------------------------------------------{{{-
440  def setTestCaseName (self, testCaseName):
441  self._mTestCaseName_mTestCaseName = testCaseName
442  # --------------------------------------------------------------------------------------------}}}-
443 
444  # -- def getTestCaseName ---------------------------------------------------------------------{{{-
445  def getTestCaseName (self):
446  return self._mTestCaseName_mTestCaseName
447  # --------------------------------------------------------------------------------------------}}}-
448 
449  # -- def setTestCaseDataDirectory ------------------------------------------------------------{{{-
450  def setTestCaseDataDirectory (self, testCaseDataPath):
451  self._mTestCaseDataDirectory_mTestCaseDataDirectory = testCaseDataPath
452  # --------------------------------------------------------------------------------------------}}}-
453 
454  # -- def getTestCaseDataDirectory ------------------------------------------------------------{{{-
456  return self._mTestCaseDataDirectory_mTestCaseDataDirectory
457  # --------------------------------------------------------------------------------------------}}}-
458 
459  # -- def setTestCaseResultDirectory ------------------------------------------------------------{{{-
460  def setTestCaseResultDirectory (self, testCaseName, functionName):
461  self._mTestCaseResultDirectory_mTestCaseResultDirectory = os.path.join(self.getResultDirectorygetResultDirectory(), "files", testCaseName)
462  if functionName != None:
463  self._mTestCaseResultDirectory_mTestCaseResultDirectory = os.path.join(self._mTestCaseResultDirectory_mTestCaseResultDirectory, functionName)
464  # --------------------------------------------------------------------------------------------}}}-
465 
466  # -- def getTestCaseResultDirectory ------------------------------------------------------------{{{-
468  if self._mTestCaseResultDirectory_mTestCaseResultDirectory and not os.path.isdir(self._mTestCaseResultDirectory_mTestCaseResultDirectory):
469  os.makedirs(self._mTestCaseResultDirectory_mTestCaseResultDirectory)
470  return self._mTestCaseResultDirectory_mTestCaseResultDirectory
471  # --------------------------------------------------------------------------------------------}}}-
472 
473  # -- def pushChangeSet -----------------------------------------------------------------------{{{-
474 
476  def pushChangeSet (self):
477  self._mChangeSetStack_mChangeSetStack.append(TC_ChangeSet(self._mTestCaseContext_mTestCaseContext))
478  return len(self._mChangeSetStack_mChangeSetStack)-1
479  # --------------------------------------------------------------------------------------------}}}-
480 
481  # -- def popChangeSet ------------------------------------------------------------------------{{{-
482 
485  def popChangeSet (self):
486  retVal = True
487  if len(self._mChangeSetStack_mChangeSetStack) > 0:
488  cs = self._mChangeSetStack_mChangeSetStack.pop()
489  cs.autoRevert()
490  else:
491  retVal = False
492  return retVal
493  # --------------------------------------------------------------------------------------------}}}-
494 
495  # -- def popChangeSet ------------------------------------------------------------------------{{{-
496 
497  def clearChangeSet (self):
498  for changeSet in self._mChangeSetStack_mChangeSetStack:
499  changeSet.enableAutoRevert(False)
500  while self.popChangeSetpopChangeSet():
501  pass
502  # --------------------------------------------------------------------------------------------}}}-
503 
504 # -- def getChangeSet ------------------------------------------------------------------------{{{-
505 
506  def getChangeSet (self):
507  retVal = None
508  if len(self._mChangeSetStack_mChangeSetStack) > 0:
509  retVal = self._mChangeSetStack_mChangeSetStack[-1]
510  return retVal
511  # --------------------------------------------------------------------------------------------}}}-
512 
513  # -- def getChangeSetStackLength -------------------------------------------------------------{{{-
514 
517  return len(self._mChangeSetStack_mChangeSetStack)
518  # --------------------------------------------------------------------------------------------}}}-
519 
520  # -- def setLogHandler -----------------------------------------------------------------------{{{-
521 
523  def setLogHandler (self, logHandler):
524  self._mLogHandler_mLogHandler = logHandler
525  # --------------------------------------------------------------------------------------------}}}-
526 
527  # -- def unsetLogHandler ---------------------------------------------------------------------{{{-
528 
529  def unsetLogHandler (self):
530  self._mLogHandler_mLogHandler = None
531  # --------------------------------------------------------------------------------------------}}}-
532 
533  # -- def getLogHandler -----------------------------------------------------------------------{{{-
534 
537  def getLogHandler (self):
538  return self._mLogHandler_mLogHandler
539  # --------------------------------------------------------------------------------------------}}}-
540 
541  def setCallerStackFrame(self, stackFrame):
542  self._mStackFrame_mStackFrame = stackFrame
543 
545  return self._mStackFrame_mStackFrame
546 
548  return self._mStackFrame_mStackFrame != None
549 
551  self._mStackFrame_mStackFrame = None
552 
553  # -- def addExtraTestCaseResult --------------------------------------------------------------{{{-
554  def addExtraTestCaseResult (self, extraTestCaseResult):
555  self._mExtraTestCaseResults_mExtraTestCaseResults.append(extraTestCaseResult)
556  # --------------------------------------------------------------------------------------------}}}-
557 
558  # -- def takeExtraTestCaseResults ------------------------------------------------------------{{{-
560  l = self._mExtraTestCaseResults_mExtraTestCaseResults
561  self._mExtraTestCaseResults_mExtraTestCaseResults = []
562  return l
563  # --------------------------------------------------------------------------------------------}}}-
564 
565  # -- def pushEnvironment ---------------------------------------------------------------------{{{-
566 
567  def pushEnvironment (self):
568  self._mEnvironmentStack_mEnvironmentStack.append(os.environ)
569  os.environ = dict(os.environ)
570  # --------------------------------------------------------------------------------------------}}}-
571 
572  # -- def popEnvironment ----------------------------------------------------------------------{{{-
573 
575  def popEnvironment (self):
576  if len(self._mEnvironmentStack_mEnvironmentStack) > 0:
577  os.environ = self._mEnvironmentStack_mEnvironmentStack.pop()
578  return True
579  return False
580  # --------------------------------------------------------------------------------------------}}}-
581 
582 # ----------------------------------------------------------------------------------------------}}}-
583 
Class to handle field changes and make them revertable.
Definition: ChangeSet.py:35
def __init__(self, infoRegExp, allowUnexpectedMessages, logErrorFunc)
Definition: TestHelper.py:205
def __enableInfoHandling(self, enable)
Definition: TestHelper.py:212
def __init__(self, errorRegExp, logErrorFunc, preventReplacingMessageSeverity=False)
Definition: TestHelper.py:143
def __init__(self, warningRegExp, logErrorFunc=None, expectWarning=True)
Definition: TestHelper.py:178
def __init__(self, context)
The default constructor.
Definition: TestHelper.py:231
def getTestCaseContext(self)
Get the context of the test.
Definition: TestHelper.py:415
def addExtraTestCaseResult(self, extraTestCaseResult)
Definition: TestHelper.py:554
def setLogHandler(self, logHandler)
Set the current log handler.
Definition: TestHelper.py:523
def unsetLogHandler(self)
Unset the current log handler.
Definition: TestHelper.py:529
def getPackageList(self)
Return the list of available packages.
Definition: TestHelper.py:386
def getChangeSetStackLength(self)
Get the length of the ChangeSet stack.
Definition: TestHelper.py:516
def getChangeSet(self)
Return the ChangeSet on top of the stack.
Definition: TestHelper.py:506
def setModuleName(self, moduleName)
Definition: TestHelper.py:430
def setPackageList(self, packageList)
Set the list of available packages.
Definition: TestHelper.py:380
def setTestCaseName(self, testCaseName)
Definition: TestHelper.py:440
def getLogHandler(self)
Get the current log handler.
Definition: TestHelper.py:537
def clearChangeSet(self)
Clear the change set stakc without restoring the field values.
Definition: TestHelper.py:497
def setCallerStackFrame(self, stackFrame)
Definition: TestHelper.py:541
def hasInstance(self)
Check if an instance has been initialized.
Definition: TestHelper.py:374
def __new__(self, *args, **kargs)
The new method.
Definition: TestHelper.py:320
def setTestCaseContext(self, ctx)
Set the context of the test.
Definition: TestHelper.py:397
def popEnvironment(self)
Pops an environment dictionary from the stack and makes it the current environment.
Definition: TestHelper.py:575
def pushChangeSet(self)
Push a new ChangeSet to the stack.
Definition: TestHelper.py:476
def setMacrosLogOnSuccess(self, macrosLogOnSuccess)
Definition: TestHelper.py:404
def pushEnvironment(self)
Pushes the current environment to the stack.
Definition: TestHelper.py:567
def __init__(self, *args, **kargs)
The default constructor.
Definition: TestHelper.py:328
def getInstance(self, *args, **kargs)
The default constructor.
Definition: TestHelper.py:335
def setTestCaseDataDirectory(self, testCaseDataPath)
Definition: TestHelper.py:450
def popChangeSet(self)
Pop a ChangeSet from the stack and delete it.
Definition: TestHelper.py:485
def setTestCaseResultDirectory(self, testCaseName, functionName)
Definition: TestHelper.py:460
A singleton to provide important data for the testing process.
def emitSpecialCommand(file, line, type, fileList, message, escapeHtml=True)
Definition: TestHelper.py:75
def UseStackFrameFromCallerForLogging(func)
Definition: TestHelper.py:97
def takeCurrentSpecialMessage()
Definition: TestHelper.py:46
def emitSpecialMessage(loggingMethod, file, line, type, message, escapeHtml=True, formattedStack='')
Definition: TestHelper.py:52