]> Cypherpunks.ru repositories - pyderasn.git/blobdiff - tests/test_pyderasn.py
README update and CER/BER mentioning
[pyderasn.git] / tests / test_pyderasn.py
index 0489afdbbbe9e4538fe980b29f883959f2f8e761..9fae13ea1eae16653d587bea0d038d472b6ba719 100644 (file)
@@ -1,5 +1,5 @@
 # coding: utf-8
-# PyDERASN -- Python ASN.1 DER/BER codec with abstract structures
+# PyDERASN -- Python ASN.1 DER/CER/BER codec with abstract structures
 # Copyright (C) 2017-2020 Sergey Matveev <stargrave@stargrave.org>
 #
 # This program is free software: you can redistribute it and/or modify
@@ -3737,10 +3737,6 @@ class StringMixin(object):
         list(obj.pps())
 
 
-class TestUTF8String(StringMixin, CommonMixin, TestCase):
-    base_klass = UTF8String
-
-
 cyrillic_letters = text(
     alphabet="".join(six_unichr(i) for i in list(range(0x0410, 0x044f + 1))),
     min_size=1,
@@ -3748,6 +3744,26 @@ cyrillic_letters = text(
 )
 
 
+class TestUTF8String(StringMixin, CommonMixin, TestCase):
+    base_klass = UTF8String
+
+    @given(cyrillic_letters)
+    def test_byte_per_primitive(self, chars):
+        char = chars[0]
+        char_raw = char.encode("utf-8")
+        encoded = b"".join((
+            self.base_klass().tag_constructed,
+            LENINDEF,
+            OctetString(char_raw[:1]).encode(),
+            OctetString(char_raw[1:2]).encode(),
+            EOC,
+        ))
+        self.assertEqual(
+            self.base_klass().decod(encoded, ctx={"bered": True}),
+            char,
+        )
+
+
 class UnicodeDecodeErrorMixin(object):
     @given(cyrillic_letters)
     def test_unicode_decode_error(self, cyrillic_text):
@@ -3786,6 +3802,19 @@ class TestNumericString(StringMixin, CommonMixin, TestCase):
         self.assertEqual(err.exception.offset, offset)
         self.assertEqual(err.exception.decode_path, decode_path)
 
+    def test_byte_per_primitive(self):
+        encoded = b"".join((
+            self.base_klass().tag_constructed,
+            LENINDEF,
+            OctetString(b"1").encode(),
+            OctetString(b"2").encode(),
+            EOC,
+        ))
+        self.assertEqual(
+            self.base_klass().decod(encoded, ctx={"bered": True}),
+            "12",
+        )
+
 
 class TestPrintableString(
         UnicodeDecodeErrorMixin,
@@ -7565,11 +7594,13 @@ class TestStrictDefaultExistence(TestCase):
 
 
 class TestX690PrefixedType(TestCase):
-    def runTest(self):
+    def test_1(self):
         self.assertSequenceEqual(
             VisibleString("Jones").encode(),
             hexdec("1A054A6F6E6573"),
         )
+
+    def test_2(self):
         self.assertSequenceEqual(
             VisibleString(
                 "Jones",
@@ -7577,6 +7608,8 @@ class TestX690PrefixedType(TestCase):
             ).encode(),
             hexdec("43054A6F6E6573"),
         )
+
+    def test_3(self):
         self.assertSequenceEqual(
             Any(
                 VisibleString(
@@ -7587,6 +7620,8 @@ class TestX690PrefixedType(TestCase):
             ).encode(),
             hexdec("A20743054A6F6E6573"),
         )
+
+    def test_4(self):
         self.assertSequenceEqual(
             OctetString(
                 VisibleString(
@@ -7597,6 +7632,8 @@ class TestX690PrefixedType(TestCase):
             ).encode(),
             hexdec("670743054A6F6E6573"),
         )
+
+    def test_5(self):
         self.assertSequenceEqual(
             VisibleString("Jones", impl=tag_ctxp(2)).encode(),
             hexdec("82054A6F6E6573"),