@@ -1708,3 +1708,30 @@ def test_copy_images(app, status, warning):
1708
1708
'rimg.png' ,
1709
1709
'testimäge.png' ,
1710
1710
}
1711
+
1712
+
1713
+ @pytest .mark .sphinx ('latex' , testroot = 'latex-labels-before-module' )
1714
+ def test_duplicated_labels_before_module (app , status , warning ):
1715
+ app .build ()
1716
+ content : str = (app .outdir / 'python.tex' ).read_text ()
1717
+
1718
+ def count_label (name ):
1719
+ text = r'\phantomsection\label{\detokenize{%s}}' % name
1720
+ return content .count (text )
1721
+
1722
+ pattern = r'\\phantomsection\\label\{\\detokenize\{index:label-(?:auto-)?\d+[a-z]*}}'
1723
+ expect_labels = {match .group () for match in re .finditer (pattern , content )}
1724
+ result_labels = set ()
1725
+
1726
+ # iterate over the (explicit) labels in the corresponding index.rst
1727
+ for rst_label_name in {
1728
+ 'label_1a' , 'label_1b' , 'label_2' , 'label_3' ,
1729
+ 'label_auto_1a' , 'label_auto_1b' , 'label_auto_2' , 'label_auto_3' ,
1730
+ }:
1731
+ tex_label_name = 'index:' + rst_label_name .replace ('_' , '-' )
1732
+ tex_label_code = r'\phantomsection\label{\detokenize{%s}}' % tex_label_name
1733
+ assert content .count (tex_label_code ) == 1 , f'duplicated label: { tex_label_name !r} '
1734
+ result_labels .add (tex_label_code )
1735
+
1736
+ # sort the labels for a better visual diff, if any
1737
+ assert sorted (result_labels ) == sorted (expect_labels )
0 commit comments