|
9 | 9 | except SAXReaderNotAvailable: |
10 | 10 | # don't try to test this module if we cannot create a parser |
11 | 11 | raise unittest.SkipTest("no XML parsers available") |
12 | | -from xml.sax.saxutils import XMLGenerator, escape, unescape, quoteattr, \ |
13 | | - XMLFilterBase, prepare_input_source |
| 12 | +from xml.sax.saxutils import (XMLGenerator, escape, unescape, quoteattr, |
| 13 | + is_valid_name, |
| 14 | + XMLFilterBase, prepare_input_source) |
14 | 15 | from xml.sax.expatreader import create_parser |
15 | 16 | from xml.sax.handler import (feature_namespaces, feature_external_ges, |
16 | 17 | LexicalHandler) |
@@ -343,6 +344,23 @@ def test_single_double_quoteattr(self): |
343 | 344 | self.assertEqual(quoteattr("Includes 'single' and \"double\" quotes"), |
344 | 345 | "\"Includes 'single' and "double" quotes\"") |
345 | 346 |
|
| 347 | + def test_is_valid_name(self): |
| 348 | + self.assertFalse(is_valid_name('')) |
| 349 | + self.assertTrue(is_valid_name('name')) |
| 350 | + self.assertTrue(is_valid_name('NAME')) |
| 351 | + self.assertTrue(is_valid_name('name0:-._·')) |
| 352 | + self.assertTrue(is_valid_name('_')) |
| 353 | + self.assertTrue(is_valid_name(':')) |
| 354 | + self.assertTrue(is_valid_name('Ñàḿĕ')) |
| 355 | + self.assertTrue(is_valid_name('\U000EFFFF')) |
| 356 | + self.assertFalse(is_valid_name('0')) |
| 357 | + self.assertFalse(is_valid_name('-')) |
| 358 | + self.assertFalse(is_valid_name('.')) |
| 359 | + self.assertFalse(is_valid_name('·')) |
| 360 | + self.assertFalse(is_valid_name('na me')) |
| 361 | + for c in '<>/!?=\x00\x01\x7f\ud800\udfff\ufffe\uffff\U000F0000': |
| 362 | + self.assertFalse(is_valid_name('name' + c)) |
| 363 | + |
346 | 364 | # ===== make_parser |
347 | 365 | def test_make_parser(self): |
348 | 366 | # Creating a parser should succeed - it should fall back |
|
0 commit comments