diff --git a/tests/roots/test-domain-py/abbr.rst b/tests/roots/test-domain-py/abbr.rst
new file mode 100644
index 000000000..67f11578b
--- /dev/null
+++ b/tests/roots/test-domain-py/abbr.rst
@@ -0,0 +1,10 @@
+abbrev
+======
+
+.. currentmodule:: module_a.submodule
+
+* normal: :py:meth:`module_a.submodule.ModTopLevel.mod_child_1`
+* relative: :py:meth:`.ModTopLevel.mod_child_1`
+* short name: :py:meth:`~module_a.submodule.ModTopLevel.mod_child_1`
+* relative + short name: :py:meth:`~.ModTopLevel.mod_child_1`
+* short name + relative: :py:meth:`~.ModTopLevel.mod_child_1`
diff --git a/tests/test_domain_py.py b/tests/test_domain_py.py
index d8eac6284..fe117659a 100644
--- a/tests/test_domain_py.py
+++ b/tests/test_domain_py.py
@@ -8,6 +8,7 @@
:license: BSD, see LICENSE for details.
"""
+import re
import sys
from unittest.mock import Mock
@@ -132,6 +133,29 @@ def test_domain_py_xrefs(app, status, warning):
assert len(refnodes) == 2
+@pytest.mark.sphinx('html', testroot='domain-py')
+def test_domain_py_xrefs_abbreviations(app, status, warning):
+ app.builder.build_all()
+
+ content = (app.outdir / 'abbr.html').read_text()
+ assert re.search(r'normal: <.*>module_a.submodule.ModTopLevel.mod_child_1\(\)'
+ r'<.*>',
+ content)
+ assert re.search(r'relative: <.*>ModTopLevel.mod_child_1\(\)<.*>',
+ content)
+ assert re.search(r'short name: <.*>mod_child_1\(\)<.*>',
+ content)
+ assert re.search(r'relative \+ short name: <.*>mod_child_1\(\)<.*>',
+ content)
+ assert re.search(r'short name \+ relative: <.*>mod_child_1\(\)<.*>',
+ content)
+
+
@pytest.mark.sphinx('dummy', testroot='domain-py')
def test_domain_py_objects(app, status, warning):
app.builder.build_all()