import codetable
import unittest


class TestCodetable(unittest.TestCase):

   def setUp(self):
       self.debug = True
       print("")
       print("---------------------------")
       print("test method: %s" % self._testMethodName)

   def test_scr2chr_ok1(self):
       """ Screencodes 0 bis 63 mit Zeichensatz 1 """
       # Grossbuchstaben: SCRCODE 0-31 -> ASCII 64-95
       for i in range(32):
           if i in (28, 31): # Pfundzeichen und Pfeil links ueberspringen
               continue
           res = codetable.scr2chr(i, 1)
           if self.debug:
               print(res, end='')
           self.assertEqual(res, chr(64+i))
       if self.debug:
           print('')
       # Ziffern usw.: SCRCODE 32-63 -> ASCII 32-63
       for i in range(32, 64):
           res = codetable.scr2chr(i, 1)
           if self.debug:
               print(res, end='')
           self.assertEqual(res, chr(i))
       if self.debug:
           print('')

   def test_scr2chr_ok2(self):
       """ Screencodes 0 bis 91 mit Zeichensatz 2 """
       # AT-Zeichen: SCRCODE 0 -> ASCII 64
       res = codetable.scr2chr(0, 2)
       if self.debug:
           print(res)
       self.assertEqual(res, chr(64))
       # Kleinbuchstaben: SCRCODE 1-26 -> ASCII 97-122
       for i in range(1, 27):
           res = codetable.scr2chr(i, 2)
           if self.debug:
               print(res, end='')
           self.assertEqual(res, chr(i+96))
       if self.debug:
           print('')
       # []^: SCRCODE 27-31 (ohne 28 und 31) -> ASCII 91-95
       for i in (27, 29, 30):
           res = codetable.scr2chr(i, 2)
           if self.debug:
               print(res, end='')
           self.assertEqual(res, chr(i+64))
       if self.debug:
           print('')
       # Ziffern usw.: SCRCODE 32-63 -> ASCII 32-63
       for i in range(32, 64):
           res = codetable.scr2chr(i, 1)
           if self.debug:
               print(res, end='')
           self.assertEqual(res, chr(i))
       if self.debug:
           print('')
       # Grossbuchstaben: SCRCODE 65-90 -> ASCII 65-90
       for i in range(65, 91):
           res = codetable.scr2chr(i, 2)
           if self.debug:
               print(res, end='')
           self.assertEqual(res, chr(i))
       if self.debug:
           print('')

   def test_scr2chr_err1(self):
       """ Nicht unterstuetzte Zeichen """
       errch = chr(27)+"[7m"+"?"+chr(27)+"[m"
       res = codetable.scr2chr(64, 1)
       self.assertEqual(res, errch)
       res = codetable.scr2chr(96, 2)
       self.assertEqual(res, errch)

   def test_scr2chr_err2(self):
       """ Unzulaessiger font-Parameter """
       self.assertRaises(ValueError, codetable.scr2chr, 0, 3)

   def test_chr2scr_ok1(self):
       """ ASCII-Codes 32-95 mit Zeichensatz 1, ohne
           Backslash und Unterstrich, da es fuer diese
           beiden Zeichen keine passenden Bildschirmcodes
           gibt.
       """
       # Ziffern usw.: ASCII 32-63 -> SCRCODE 32-63
       for i in range(32, 64):
           res = codetable.chr2scr(chr(i), 1)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i)
       if self.debug:
           print('')
       # Grossbuchstaben: ASCII 64-90 -> SCRCODE 0-26
       for i in range(64, 91):
           res = codetable.chr2scr(chr(i), 1)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i-64)
       if self.debug:
           print('')
       # []^: ASCII 91, 93, 94 -> SCRCODE 27, 29, 30
       for i in [91, 93, 94]:
           res = codetable.chr2scr(chr(i), 1)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i-64)
       if self.debug:
           print('')

   def test_chr2scr_ok2(self):
       """ ASCII-Codes 32-122 mit Zeichensatz 2, ohne
           Backslash, Unterstrich und Aszent, da es fuer
           diese drei Zeichen keine passenden Bildschirmcodes
           gibt.
       """
       # Ziffern usw.: ASCII 32-63 -> SCRCODE 32-63
       for i in range(32,64):
           res = codetable.chr2scr(chr(i), 2)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i)
       if self.debug:
           print('')
       # AT-Zeichen: ASCII 64 -> SCRCODE 0
       res = codetable.chr2scr(chr(64), 2)
       if self.debug:
           print(res)
       self.assertEqual(res, 0)
       # Grossbuchstaben: ASCII 65-90 -> SCRCODE 65-90
       for i in range(65, 91):
           res = codetable.chr2scr(chr(i), 2)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i)
       if self.debug:
           print('')
       # []^: ASCII 91, 93, 94 -> SCRCODE 27, 29, 30
       for i in [91, 93, 94]:
           res = codetable.chr2scr(chr(i), 2)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i-64)
       if self.debug:
           print('')
       # Kleinbuchstaben: ASCII 97-122 -> SCRCODE 1-26
       for i in range(97, 123):
           res = codetable.chr2scr(chr(i), 2)
           if self.debug:
               print(res, end=',')
           self.assertEqual(res, i-96)
       if self.debug:
           print('')

   def test_chr2scr_err1(self):
       """ Unzulaessiges Zeichen """
       for i in range(32):
           res = codetable.chr2scr(chr(i), 1)
           self.assertEqual(res, 255)
       for i in [92, 95, 96]:
           res = codetable.chr2scr(chr(i), 2)
           self.assertEqual(res, 255)

   def test_chr2scr_err2(self):
       """ Unzulaessiger font-Parameter """
       self.assertRaises(ValueError, codetable.chr2scr, 'a', 3)


if __name__ == '__main__':
   unittest.main()