]> git.ipfire.org Git - thirdparty/dnspython.git/commitdiff
improve tokenizer coverage
authorBob Halley <halley@dnspython.org>
Thu, 18 Jun 2020 03:06:35 +0000 (20:06 -0700)
committerBob Halley <halley@dnspython.org>
Thu, 18 Jun 2020 03:06:35 +0000 (20:06 -0700)
tests/test_tokenizer.py

index 39c04361d915179c367fb8e9db1de5342bf09b5f..d82f08c574352d837ccc7a091b803aaca12e83a0 100644 (file)
@@ -201,5 +201,98 @@ class TokenizerTestCase(unittest.TestCase):
         self.assertEqual(t.ttype, dns.tokenizer.IDENTIFIER)
         self.assertEqual(t.value, r'child')
 
+    def testGetUInt(self):
+        tok = dns.tokenizer.Tokenizer('1234')
+        v = tok.get_int()
+        self.assertEqual(v, 1234)
+        def bad1():
+            tok = dns.tokenizer.Tokenizer('"1234"')
+            v = tok.get_int()
+        self.assertRaises(dns.exception.SyntaxError, bad1)
+        def bad2():
+            tok = dns.tokenizer.Tokenizer('q1234')
+            v = tok.get_int()
+        self.assertRaises(dns.exception.SyntaxError, bad2)
+        def bad3():
+            tok = dns.tokenizer.Tokenizer('4294967296')
+            v = tok.get_uint32()
+        self.assertRaises(dns.exception.SyntaxError, bad3)
+        def bad4():
+            tok = dns.tokenizer.Tokenizer('65536')
+            v = tok.get_uint16()
+        self.assertRaises(dns.exception.SyntaxError, bad4)
+        def bad5():
+            tok = dns.tokenizer.Tokenizer('256')
+            v = tok.get_uint8()
+        self.assertRaises(dns.exception.SyntaxError, bad5)
+        # Even though it is badly named get_int(), it's really get_unit!
+        def bad6():
+            tok = dns.tokenizer.Tokenizer('-1234')
+            v = tok.get_int()
+        self.assertRaises(dns.exception.SyntaxError, bad5)
+
+    def testGetString(self):
+        tok = dns.tokenizer.Tokenizer('foo')
+        v = tok.get_string()
+        self.assertEqual(v, 'foo')
+        tok = dns.tokenizer.Tokenizer('"foo"')
+        v = tok.get_string()
+        self.assertEqual(v, 'foo')
+        tok = dns.tokenizer.Tokenizer('abcdefghij')
+        v = tok.get_string(max_length=10)
+        self.assertEqual(v, 'abcdefghij')
+        def bad():
+            tok = dns.tokenizer.Tokenizer('abcdefghij')
+            v = tok.get_string(max_length=9)
+        self.assertRaises(dns.exception.SyntaxError, bad)
+
+    def testMultiLineWithComment(self):
+        tok = dns.tokenizer.Tokenizer('( ; abc\n)')
+        tok.get_eol()
+        # Nothing to assert here, as we're testing tok.get_eol() does NOT
+        # raise.
+
+    def testEOLAfterComment(self):
+        tok = dns.tokenizer.Tokenizer('; abc\n')
+        t = tok.get()
+        self.assertTrue(t.is_eol())
+
+    def testEOFAfterComment(self):
+        tok = dns.tokenizer.Tokenizer('; abc')
+        t = tok.get()
+        self.assertTrue(t.is_eof())
+
+    def testMultiLineWithEOFAfterComment(self):
+        def bad():
+            tok = dns.tokenizer.Tokenizer('( ; abc')
+            tok.get_eol()
+        self.assertRaises(dns.exception.SyntaxError, bad)
+
+    def testEscapeUnexpectedEnd(self):
+        def bad():
+            tok = dns.tokenizer.Tokenizer('\\')
+            tok.get()
+        self.assertRaises(dns.exception.UnexpectedEnd, bad)
+
+    def testGetUngetRegetComment(self):
+        tok = dns.tokenizer.Tokenizer(';comment')
+        t1 = tok.get(want_comment=True)
+        tok.unget(t1)
+        t2 = tok.get(want_comment=True)
+        self.assertEqual(t1, t2)
+
+    def testBadAsName(self):
+        def bad():
+            tok = dns.tokenizer.Tokenizer('"not an identifier"')
+            t = tok.get()
+            tok.as_name(t)
+        self.assertRaises(dns.exception.SyntaxError, bad)
+
+    def testBadGetTTL(self):
+        def bad():
+            tok = dns.tokenizer.Tokenizer('"not an identifier"')
+            v = tok.get_ttl()
+        self.assertRaises(dns.exception.SyntaxError, bad)
+
 if __name__ == '__main__':
     unittest.main()