def testInvalidUTF8(self): b = FakeWorkerForBuilder(self.basedir) b.unicode_encoding = "utf-8" s = runprocess.RunProcess( b, stderrCommand("hello"), self.basedir, sendStderr=True) pp = runprocess.RunProcessPP(s) INVALID_UTF8 = b"\xff" with self.assertRaises(UnicodeDecodeError): INVALID_UTF8.decode('utf-8') pp.outReceived(INVALID_UTF8) yield s.start() stdout = [up['stdout'] for up in b.updates if 'stdout' in up][0] # On Python < 2.7 bytes is used, on Python >= 2.7 unicode self.assertIn(stdout, (b'\xef\xbf\xbd', u'\ufffd')) self.assertTrue({'rc': 0} in b.updates, b.show())
def test_incrementalDecoder(self): b = FakeWorkerForBuilder(self.basedir) b.unicode_encoding = "utf-8" s = runprocess.RunProcess( b, stderrCommand("hello"), self.basedir, sendStderr=True) pp = runprocess.RunProcessPP(s) # u"\N{SNOWMAN} when encoded to utf-8 bytes is b"\xe2\x98\x83" pp.outReceived(b"\xe2") pp.outReceived(b"\x98\x83") pp.errReceived(b"\xe2") pp.errReceived(b"\x98\x83") yield s.start() self.assertTrue({'stderr': u"\N{SNOWMAN}"} in b.updates) self.assertTrue({'stdout': u"\N{SNOWMAN}"} in b.updates) self.assertTrue({'rc': 0} in b.updates, b.show())