home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2011 July / maximum-cd-2011-07.iso / DiscContents / LibO_3.3.2_Win_x86_install_multi.exe / libreoffice1.cab / test_uu.py < prev    next >
Encoding:
Python Source  |  2011-03-15  |  5.2 KB  |  185 lines

  1. """
  2. Tests for uu module.
  3. Nick Mathewson
  4. """
  5.  
  6. import unittest
  7. from test import test_support
  8.  
  9. import sys, os, uu, cStringIO
  10. import uu
  11.  
  12. plaintext = "The smooth-scaled python crept over the sleeping dog\n"
  13.  
  14. encodedtext = """\
  15. M5&AE('-M;V]T:\"US8V%L960@<'ET:&]N(&-R97!T(&]V97(@=&AE('-L965P
  16. (:6YG(&1O9PH """
  17.  
  18. encodedtextwrapped = "begin %03o %s\n" + encodedtext.replace("%", "%%") + "\n \nend\n"
  19.  
  20. class UUTest(unittest.TestCase):
  21.  
  22.     def test_encode(self):
  23.         inp = cStringIO.StringIO(plaintext)
  24.         out = cStringIO.StringIO()
  25.         uu.encode(inp, out, "t1")
  26.         self.assertEqual(out.getvalue(), encodedtextwrapped % (0666, "t1"))
  27.         inp = cStringIO.StringIO(plaintext)
  28.         out = cStringIO.StringIO()
  29.         uu.encode(inp, out, "t1", 0644)
  30.         self.assertEqual(out.getvalue(), encodedtextwrapped % (0644, "t1"))
  31.  
  32.     def test_decode(self):
  33.         inp = cStringIO.StringIO(encodedtextwrapped % (0666, "t1"))
  34.         out = cStringIO.StringIO()
  35.         uu.decode(inp, out)
  36.         self.assertEqual(out.getvalue(), plaintext)
  37.         inp = cStringIO.StringIO(
  38.             "UUencoded files may contain many lines,\n" +
  39.             "even some that have 'begin' in them.\n" +
  40.             encodedtextwrapped % (0666, "t1")
  41.         )
  42.         out = cStringIO.StringIO()
  43.         uu.decode(inp, out)
  44.         self.assertEqual(out.getvalue(), plaintext)
  45.  
  46.     def test_truncatedinput(self):
  47.         inp = cStringIO.StringIO("begin 644 t1\n" + encodedtext)
  48.         out = cStringIO.StringIO()
  49.         try:
  50.             uu.decode(inp, out)
  51.             self.fail("No exception thrown")
  52.         except uu.Error, e:
  53.             self.assertEqual(str(e), "Truncated input file")
  54.  
  55.     def test_missingbegin(self):
  56.         inp = cStringIO.StringIO("")
  57.         out = cStringIO.StringIO()
  58.         try:
  59.             uu.decode(inp, out)
  60.             self.fail("No exception thrown")
  61.         except uu.Error, e:
  62.             self.assertEqual(str(e), "No valid begin line found in input file")
  63.  
  64. class UUStdIOTest(unittest.TestCase):
  65.  
  66.     def setUp(self):
  67.         self.stdin = sys.stdin
  68.         self.stdout = sys.stdout
  69.  
  70.     def tearDown(self):
  71.         sys.stdin = self.stdin
  72.         sys.stdout = self.stdout
  73.  
  74.     def test_encode(self):
  75.         sys.stdin = cStringIO.StringIO(plaintext)
  76.         sys.stdout = cStringIO.StringIO()
  77.         uu.encode("-", "-", "t1", 0666)
  78.         self.assertEqual(
  79.             sys.stdout.getvalue(),
  80.             encodedtextwrapped % (0666, "t1")
  81.         )
  82.  
  83.     def test_decode(self):
  84.         sys.stdin = cStringIO.StringIO(encodedtextwrapped % (0666, "t1"))
  85.         sys.stdout = cStringIO.StringIO()
  86.         uu.decode("-", "-")
  87.         self.assertEqual(sys.stdout.getvalue(), plaintext)
  88.  
  89. class UUFileTest(unittest.TestCase):
  90.  
  91.     def _kill(self, f):
  92.         # close and remove file
  93.         try:
  94.             f.close()
  95.         except (SystemExit, KeyboardInterrupt):
  96.             raise
  97.         except:
  98.             pass
  99.         try:
  100.             os.unlink(f.name)
  101.         except (SystemExit, KeyboardInterrupt):
  102.             raise
  103.         except:
  104.             pass
  105.  
  106.     def setUp(self):
  107.         self.tmpin  = test_support.TESTFN + "i"
  108.         self.tmpout = test_support.TESTFN + "o"
  109.  
  110.     def tearDown(self):
  111.         del self.tmpin
  112.         del self.tmpout
  113.  
  114.     def test_encode(self):
  115.         fin = fout = None
  116.         try:
  117.             test_support.unlink(self.tmpin)
  118.             fin = open(self.tmpin, 'wb')
  119.             fin.write(plaintext)
  120.             fin.close()
  121.  
  122.             fin = open(self.tmpin, 'rb')
  123.             fout = open(self.tmpout, 'w')
  124.             uu.encode(fin, fout, self.tmpin, mode=0644)
  125.             fin.close()
  126.             fout.close()
  127.  
  128.             fout = open(self.tmpout, 'r')
  129.             s = fout.read()
  130.             fout.close()
  131.             self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin))
  132.  
  133.             # in_file and out_file as filenames
  134.             uu.encode(self.tmpin, self.tmpout, self.tmpin, mode=0644)
  135.             fout = open(self.tmpout, 'r')
  136.             s = fout.read()
  137.             fout.close()
  138.             self.assertEqual(s, encodedtextwrapped % (0644, self.tmpin))
  139.  
  140.         finally:
  141.             self._kill(fin)
  142.             self._kill(fout)
  143.  
  144.     def test_decode(self):
  145.         f = None
  146.         try:
  147.             test_support.unlink(self.tmpin)
  148.             f = open(self.tmpin, 'w')
  149.             f.write(encodedtextwrapped % (0644, self.tmpout))
  150.             f.close()
  151.  
  152.             f = open(self.tmpin, 'r')
  153.             uu.decode(f)
  154.             f.close()
  155.  
  156.             f = open(self.tmpout, 'r')
  157.             s = f.read()
  158.             f.close()
  159.             self.assertEqual(s, plaintext)
  160.             # XXX is there an xp way to verify the mode?
  161.         finally:
  162.             self._kill(f)
  163.  
  164.     def test_decodetwice(self):
  165.         # Verify that decode() will refuse to overwrite an existing file
  166.         f = None
  167.         try:
  168.             f = cStringIO.StringIO(encodedtextwrapped % (0644, self.tmpout))
  169.  
  170.             f = open(self.tmpin, 'r')
  171.             uu.decode(f)
  172.             f.close()
  173.  
  174.             f = open(self.tmpin, 'r')
  175.             self.assertRaises(uu.Error, uu.decode, f)
  176.             f.close()
  177.         finally:
  178.             self._kill(f)
  179.  
  180. def test_main():
  181.     test_support.run_unittest(UUTest, UUStdIOTest, UUFileTest)
  182.  
  183. if __name__=="__main__":
  184.     test_main()
  185.