#! /usr/bin/env python
"""Test script for the binhex C module

   Uses the mechanism of the python binhex module
   Based on an original test by Roger E. Masse.
"""
import binhex
import os
import unittest
from test import test_support


class BinHexTestCase(unittest.TestCase):

    def setUp(self):
        self.fname1 = test_support.TESTFN + "1"
        self.fname2 = test_support.TESTFN + "2"

    def tearDown(self):
        try: os.unlink(self.fname1)
        except OSError: pass

        try: os.unlink(self.fname2)
        except OSError: pass

    DATA = 'Jack is my hero'

    def test_binhex(self):
        f = open(self.fname1, 'w')
        f.write(self.DATA)
        f.close()

        binhex.binhex(self.fname1, self.fname2)

        binhex.hexbin(self.fname2, self.fname1)

        f = open(self.fname1, 'r')
        finish = f.readline()
        f.close()

        self.assertEqual(self.DATA, finish)


def test_main():
    test_support.run_unittest(BinHexTestCase)


if __name__ == "__main__":
    test_main()
