def checkDependencies(self): """ Check that all the dependencies of the test are satisfied. @raise NotSupported: If any one of the dependencies is not satisfied. """ js = findJavascriptInterpreter() if js is None: raise NotSupported("Could not find JavaScript interpreter") if subunit is None: raise NotSupported("Could not import 'subunit'")
def setJavascriptInterpreterOrSkip(testCase): """ If we're unable to find a javascript interpreter (currently we only look for smjs or js) then set the C{skip} attribute on C{testCase}. Otherwise assign the path to the interpreter executable to C{testCase.javascriptInterpreter} """ script = findJavascriptInterpreter() if script is None: testCase.skip = "No JavaScript interpreter available." else: testCase.javascriptInterpreter = script
def findJavascriptInterpreter(self): """ @see L{nevow.jsutil.findJavascriptInterpreter} """ return findJavascriptInterpreter()
def findJavascriptInterpreter(self): """ @see: L{nevow.jsutil.findJavascriptInterpreter} """ return findJavascriptInterpreter()
class JavaScriptTestCase(TrialTestCase): def __init__(self, methodName='runTest'): TrialTestCase.__init__(self, methodName) self.testMethod = getattr(self, methodName) def checkDependencies(self): """ Check that all the dependencies of the test are satisfied. @raise NotSupported: If any one of the dependencies is not satisfied. """ js = findJavascriptInterpreter() if js is None: raise NotSupported("Could not find JavaScript interpreter") if subunit is None: raise NotSupported("Could not import 'subunit'") def _writeToTemp(self, contents): fname = self.mktemp() fd = file(fname, 'w') try: fd.write(contents) finally: fd.close() return fname def makeScript(self, testModule): js = """ // import Divmod.UnitTest // import %(module)s Divmod.UnitTest.runRemote(Divmod.UnitTest.loadFromModule(%(module)s)); """ % { 'module': testModule } jsfile = self._writeToTemp(js) scriptFile = self._writeToTemp(generateTestScript(jsfile)) return scriptFile def _runWithSigchild(self, f, *a, **kw): """ Run the given function with an alternative SIGCHLD handler. """ oldHandler = signal.signal(signal.SIGCHLD, signal.SIG_DFL) try: return f(*a, **kw) finally: signal.signal(signal.SIGCHLD, oldHandler) def run(self, result): try: self.checkDependencies() except NotSupported, e: result.startTest(self) result.addSkip(self, str(e)) result.stopTest(self) return js = findJavascriptInterpreter() script = self.makeScript(self.testMethod()) server = subunit.TestProtocolServer(result) protocol = TestProtocolLineReceiverServer(server) # What this *SHOULD BE* # spawnProcess(protocol, js, (script,)) # return protocol.someDisconnectCallback() # However, *run cannot return a Deferred profanity profanity profanity # profanity*, so instead it is *profanity* this: def run(): r, w = popen2([js, script]) while True: bytes = r.read(4096) if bytes: protocol.dataReceived(bytes) else: break self._runWithSigchild(run)