|
From: <mi...@us...> - 2019-10-30 15:35:30
|
Revision: 8409
http://sourceforge.net/p/docutils/code/8409
Author: milde
Date: 2019-10-30 15:35:28 +0000 (Wed, 30 Oct 2019)
Log Message:
-----------
Fix and add test for more use cases for nodes.set_id().
Modified Paths:
--------------
trunk/docutils/docutils/nodes.py
trunk/docutils/test/test_nodes.py
Modified: trunk/docutils/docutils/nodes.py
===================================================================
--- trunk/docutils/docutils/nodes.py 2019-10-30 12:10:25 UTC (rev 8408)
+++ trunk/docutils/docutils/nodes.py 2019-10-30 15:35:28 UTC (rev 8409)
@@ -1365,15 +1365,17 @@
if not node['ids']:
id_prefix = self.settings.id_prefix
auto_id_prefix = self.settings.auto_id_prefix
+ base_id = ''
id = ''
for name in node['names']:
- id = id_prefix + make_id(name)
+ base_id = make_id(name)
+ id = id_prefix + base_id
# TODO: allow names starting with numbers if `id_prefix`
# is non-empty: id = make_id(id_prefix + name)
- if id and id not in self.ids:
+ if base_id and id not in self.ids:
break
else:
- if id and auto_id_prefix.endswith('%'):
+ if base_id and auto_id_prefix.endswith('%'):
# disambiguate name-derived ID
# TODO: remove second condition after announcing change
prefix = id + '-'
Modified: trunk/docutils/test/test_nodes.py
===================================================================
--- trunk/docutils/test/test_nodes.py 2019-10-30 12:10:25 UTC (rev 8408)
+++ trunk/docutils/test/test_nodes.py 2019-10-30 15:35:28 UTC (rev 8409)
@@ -661,6 +661,68 @@
self.compare_trees(self.document, newtree)
+class SetIdTests(unittest.TestCase):
+
+ def setUp(self):
+ self.document = utils.new_document('test')
+ self.elements = [nodes.Element(names=['test']),
+ nodes.section(), # Name empty
+ nodes.section(names=['Test']), # duplicate id
+ nodes.footnote(names=['2019-10-30']), # id empty
+ ]
+
+ def test_set_id_default(self):
+ # Default prefixes.
+ for element in self.elements:
+ self.document.set_id(element)
+ ids = [element['ids'] for element in self.elements]
+ self.assertEqual(ids, [['test'], ['id1'], ['id2'], ['id3']])
+
+ def test_set_id_custom(self):
+ # Custom prefixes.
+
+ # Change settings.
+ self.document.settings.id_prefix = 'P-'
+ self.document.settings.auto_id_prefix = 'auto'
+
+ for element in self.elements:
+ self.document.set_id(element)
+ ids = [element['ids'] for element in self.elements]
+ self.assertEqual(ids, [['P-test'],
+ ['P-auto1'],
+ ['P-auto2'],
+ ['P-auto3']])
+
+ def test_set_id_descriptive_auto_id(self):
+ # Use name or tag-name for auto-id.
+
+ # Change setting.
+ self.document.settings.auto_id_prefix = '%'
+
+ for element in self.elements:
+ self.document.set_id(element)
+ ids = [element['ids'] for element in self.elements]
+ self.assertEqual(ids, [['test'],
+ ['section-1'],
+ ['test-1'],
+ ['footnote-1']])
+
+ def test_set_id_custom_descriptive_auto_id(self):
+ # Custom prefixes and name or tag-name for auto-id.
+
+ # Change settings.
+ self.document.settings.id_prefix = 'P:'
+ self.document.settings.auto_id_prefix = 'a-%'
+
+ for element in self.elements:
+ self.document.set_id(element)
+ ids = [element['ids'] for element in self.elements]
+ self.assertEqual(ids, [['P:test'],
+ ['P:a-section-1'],
+ ['P:test-1'],
+ ['P:a-footnote-1']])
+
+
class MiscFunctionTests(unittest.TestCase):
names = [('a', 'a'), ('A', 'a'), ('A a A', 'a a a'),
@@ -672,33 +734,6 @@
normed = nodes.fully_normalize_name(input)
self.assertEqual(normed, output)
- def test_set_id_default(self):
- # Default prefixes.
- document = utils.new_document('test')
- # From name.
- element = nodes.Element(names=['test'])
- document.set_id(element)
- self.assertEqual(element['ids'], ['test'])
- # Auto-generated.
- element = nodes.Element()
- document.set_id(element)
- self.assertEqual(element['ids'], ['id1'])
- def test_set_id_custom(self):
- # Custom prefixes.
- document = utils.new_document('test')
- # Change settings.
- document.settings.id_prefix = 'prefix'
- document.settings.auto_id_prefix = 'auto'
- # From name.
- element = nodes.Element(names=['test'])
- document.set_id(element)
- self.assertEqual(element['ids'], ['prefixtest'])
- # Auto-generated.
- element = nodes.Element()
- document.set_id(element)
- self.assertEqual(element['ids'], ['prefixauto1'])
-
-
if __name__ == '__main__':
unittest.main()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|