|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import gc |
|
import os |
|
import signal |
|
import shutil |
|
import sys |
|
import textwrap |
|
import weakref |
|
|
|
import pytest |
|
|
|
from pyarrow.util import (doc, _break_traceback_cycle_from_frame, |
|
download_tzdata_on_windows) |
|
from pyarrow.tests.util import disabled_gc |
|
|
|
|
|
@doc(method="func_a", operation="A") |
|
def func_a(whatever): |
|
""" |
|
This is the {method} method. |
|
|
|
It computes {operation}. |
|
""" |
|
pass |
|
|
|
|
|
@doc( |
|
func_a, |
|
textwrap.dedent( |
|
""" |
|
Examples |
|
-------- |
|
|
|
>>> func_b() |
|
B |
|
""" |
|
), |
|
method="func_b", |
|
operation="B", |
|
) |
|
def func_b(whatever): |
|
pass |
|
|
|
|
|
@doc( |
|
func_a, |
|
method="func_c", |
|
operation="C", |
|
) |
|
def func_c(whatever): |
|
""" |
|
Examples |
|
-------- |
|
|
|
>>> func_c() |
|
C |
|
""" |
|
pass |
|
|
|
|
|
@doc(func_a, method="func_d", operation="D") |
|
def func_d(whatever): |
|
pass |
|
|
|
|
|
@doc(func_d, method="func_e", operation="E") |
|
def func_e(whatever): |
|
pass |
|
|
|
|
|
@doc(method="func_f") |
|
def func_f(whatever): |
|
""" |
|
This is the {method} method. |
|
|
|
{{ We can escape curly braces like this. }} |
|
|
|
Examples |
|
-------- |
|
We should replace curly brace usage in doctests. |
|
|
|
>>> dict(x = "x", y = "y") |
|
>>> set((1, 2, 3)) |
|
""" |
|
pass |
|
|
|
|
|
def test_docstring_formatting(): |
|
docstr = textwrap.dedent( |
|
""" |
|
This is the func_a method. |
|
|
|
It computes A. |
|
""" |
|
) |
|
assert func_a.__doc__ == docstr |
|
|
|
|
|
def test_docstring_concatenation(): |
|
docstr = textwrap.dedent( |
|
""" |
|
This is the func_b method. |
|
|
|
It computes B. |
|
|
|
Examples |
|
-------- |
|
|
|
>>> func_b() |
|
B |
|
""" |
|
) |
|
assert func_b.__doc__ == docstr |
|
|
|
|
|
def test_docstring_append(): |
|
docstr = textwrap.dedent( |
|
""" |
|
This is the func_c method. |
|
|
|
It computes C. |
|
|
|
Examples |
|
-------- |
|
|
|
>>> func_c() |
|
C |
|
""" |
|
) |
|
assert func_c.__doc__ == docstr |
|
|
|
|
|
def test_docstring_template_from_callable(): |
|
docstr = textwrap.dedent( |
|
""" |
|
This is the func_d method. |
|
|
|
It computes D. |
|
""" |
|
) |
|
assert func_d.__doc__ == docstr |
|
|
|
|
|
def test_inherit_docstring_template_from_callable(): |
|
docstr = textwrap.dedent( |
|
""" |
|
This is the func_e method. |
|
|
|
It computes E. |
|
""" |
|
) |
|
assert func_e.__doc__ == docstr |
|
|
|
|
|
def test_escaping_in_docstring(): |
|
docstr = textwrap.dedent( |
|
""" |
|
This is the func_f method. |
|
|
|
{ We can escape curly braces like this. } |
|
|
|
Examples |
|
-------- |
|
We should replace curly brace usage in doctests. |
|
|
|
>>> dict(x = "x", y = "y") |
|
>>> set((1, 2, 3)) |
|
""" |
|
) |
|
assert func_f.__doc__ == docstr |
|
|
|
|
|
def exhibit_signal_refcycle(): |
|
|
|
|
|
|
|
|
|
obj = set() |
|
signal.getsignal(signal.SIGINT) |
|
return weakref.ref(obj) |
|
|
|
|
|
def test_signal_refcycle(): |
|
|
|
with disabled_gc(): |
|
wr = exhibit_signal_refcycle() |
|
if wr() is None: |
|
pytest.skip( |
|
"Python version does not have the bug we're testing for") |
|
|
|
gc.collect() |
|
with disabled_gc(): |
|
wr = exhibit_signal_refcycle() |
|
assert wr() is not None |
|
_break_traceback_cycle_from_frame(sys._getframe(0)) |
|
assert wr() is None |
|
|
|
|
|
@pytest.mark.skipif(sys.platform != "win32", |
|
reason="Timezone database is already provided.") |
|
def test_download_tzdata_on_windows(): |
|
tzdata_path = os.path.expandvars(r"%USERPROFILE%\Downloads\tzdata") |
|
|
|
|
|
if (os.path.exists(tzdata_path)): |
|
shutil.rmtree(tzdata_path) |
|
download_tzdata_on_windows() |
|
|
|
|
|
assert os.path.exists(tzdata_path) |
|
assert os.path.exists(os.path.join(tzdata_path, "windowsZones.xml")) |
|
assert os.path.exists(os.path.join(tzdata_path, "europe")) |
|
assert 'version' in os.listdir(tzdata_path) |
|
|