14710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# Copyright (C) 2003 Python Software Foundation
24710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
34710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport unittest
44710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport os
54710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmfrom test import test_support
64710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport struct
74710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
84710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmMacOS = test_support.import_module('MacOS')
94710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm# The following should exist if MacOS does.
104710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmimport applesingle
114710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
124710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmAS_MAGIC=0x00051600
134710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmAS_VERSION=0x00020000
144710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdataforkdata = 'hello\r\0world\n'
154710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmresourceforkdata = 'goodbye\ncruel\0world\r'
164710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
174710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmapplesingledata = struct.pack(">ll16sh", AS_MAGIC, AS_VERSION, "foo", 2) + \
184710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    struct.pack(">llllll", 1, 50, len(dataforkdata),
194710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        2, 50+len(dataforkdata), len(resourceforkdata)) + \
204710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    dataforkdata + \
214710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    resourceforkdata
224710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmTESTFN2 = test_support.TESTFN + '2'
234710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
244710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmclass TestApplesingle(unittest.TestCase):
254710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
264710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def setUp(self):
274710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        fp = open(test_support.TESTFN, 'w')
284710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        fp.write(applesingledata)
294710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        fp.close()
304710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
314710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def tearDown(self):
324710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
334710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            os.unlink(test_support.TESTFN)
344710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        except:
354710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
364710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
374710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            os.unlink(TESTFN2)
384710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        except:
394710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
404710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
414710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def compareData(self, isrf, data):
424710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        if isrf:
434710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            fp = MacOS.openrf(TESTFN2, '*rb')
444710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        else:
454710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            fp = open(TESTFN2, 'rb')
464710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        filedata = fp.read(1000)
474710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.assertEqual(data, filedata)
484710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
494710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_applesingle(self):
504710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
514710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            os.unlink(TESTFN2)
524710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        except:
534710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
544710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        applesingle.decode(test_support.TESTFN, TESTFN2)
554710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.compareData(False, dataforkdata)
564710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.compareData(True, resourceforkdata)
574710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
584710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    def test_applesingle_resonly(self):
594710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        try:
604710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            os.unlink(TESTFN2)
614710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        except:
624710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm            pass
634710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        applesingle.decode(test_support.TESTFN, TESTFN2, resonly=True)
644710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm        self.compareData(False, resourceforkdata)
654710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
664710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmdef test_main():
674710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    test_support.run_unittest(TestApplesingle)
684710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
694710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm
704710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylmif __name__ == '__main__':
714710c53dcad1ebf3755f3efb9e80ac24bd72a9b2darylm    test_main()
72