def testSetFlushConsole(self):
     flush = {'count': 0}
     def f():
         flush['count'] = flush['count'] + 1
         
     rinterface.setFlushConsole(f)
     self.assertEquals(rinterface.getFlushConsole(), f)
     rinterface.baseNameSpaceEnv.get("flush.console")()
     self.assertEquals(1, flush['count'])
     rinterface.setWriteConsole(rinterface.consoleFlush)
    def testSetWriteConsole(self):
        buf = []
        def f(x):
            buf.append(x)

        rinterface.setWriteConsole(f)
        self.assertEquals(rinterface.getWriteConsole(), f)
        code = rinterface.SexpVector(["3", ], rinterface.STRSXP)
        rinterface.baseNameSpaceEnv["print"](code)
        self.assertEquals('[1] "3"\n', str.join('', buf))
    def testWriteConsoleWithError(self):
        def f(x):
            raise Exception("Doesn't work.")
        rinterface.setWriteConsole(f)

        tmp_file = tempfile.NamedTemporaryFile()
        stderr = sys.stderr
        sys.stderr = tmp_file
        try:
            code = rinterface.SexpVector(["3", ], rinterface.STRSXP)
            rinterface.baseNameSpaceEnv["print"](code)
        except Exception, e:
            sys.stderr = stderr
            raise e
 def tearDown(self):
     rinterface.setWriteConsole(rinterface.consolePrint)
     rinterface.setReadConsole(rinterface.consoleRead)
     rinterface.setReadConsole(rinterface.consoleFlush)