debian-python-pyexcel-io/tests/test_service.py

165 lines
3.8 KiB
Python

from datetime import time, datetime, timedelta
from pyexcel_io.service import (
date_value,
time_value,
boolean_value,
ods_bool_value,
ods_date_value,
ods_time_value,
ods_float_value,
throw_exception,
detect_int_value,
detect_float_value,
ods_timedelta_value,
)
from pyexcel_io.exceptions import IntegerAccuracyLossError
from nose.tools import eq_, raises
def test_date_util_parse():
value = "2015-08-17T19:20:00"
d = date_value(value)
assert d.strftime("%Y-%m-%dT%H:%M:%S") == "2015-08-17T19:20:00"
value = "2015-08-17"
d = date_value(value)
assert d.strftime("%Y-%m-%d") == "2015-08-17"
value = "2015-08-17T19:20:59.999999"
d = date_value(value)
assert d.strftime("%Y-%m-%dT%H:%M:%S") == "2015-08-17T19:20:59"
value = "2015-08-17T19:20:59.99999"
d = date_value(value)
assert d.strftime("%Y-%m-%dT%H:%M:%S") == "2015-08-17T19:20:59"
value = "2015-08-17T19:20:59.999999999999999"
d = date_value(value)
assert d.strftime("%Y-%m-%dT%H:%M:%S") == "2015-08-17T19:20:59"
def test_issue_8_1():
# https://github.com/pyexcel/pyexcel-ods3/issues/8
result = time_value("PT1111")
eq_(result, None)
@raises(Exception)
def test_invalid_date():
value = "2015-08-"
date_value(value)
@raises(Exception)
def test_fake_date_time_10():
date_value("1234567890")
@raises(Exception)
def test_fake_date_time_19():
date_value("1234567890123456789")
@raises(Exception)
def test_fake_date_time_20():
date_value("12345678901234567890")
def test_issue_1_error():
result = time_value("PT1111")
eq_(result, None)
def test_detect_int_value():
result = detect_int_value("123")
eq_(result, 123)
def test_detect_float_value():
result = detect_float_value("123.1")
eq_(result, 123.1)
def test_suppression_of_pep_0515_int():
result = detect_int_value("123_123")
eq_(result, None)
def test_suppression_of_pep_0515_float():
result = detect_float_value("123_123.")
eq_(result, None)
result = detect_float_value("123_123.1")
eq_(result, None)
def test_detect_float_value_on_nan():
result = detect_float_value("NaN", ignore_nan_text=True)
eq_(result, None)
def test_detect_float_value_on_custom_nan_text():
result = detect_float_value("NaN", default_float_nan="nan")
eq_(result, None)
def test_detect_float_value_on_custom_nan_text2():
result = detect_float_value("nan", default_float_nan="nan")
eq_(str(result), "nan")
@raises(IntegerAccuracyLossError)
def test_big_int_value():
ods_float_value(1000000000000000)
@raises(IntegerAccuracyLossError)
def test_throw_exception():
throw_exception(1000000000000000)
def test_boolean_value():
fixture = ["true", "false", 1]
expected = [True, False, 1]
actual = [boolean_value(element) for element in fixture]
eq_(actual, expected)
def test_time_delta_presentation():
a = datetime(2020, 12, 12, 12, 12, 12)
b = datetime(2020, 11, 12, 12, 12, 11)
delta = a - b
value = ods_timedelta_value(delta)
eq_(value, "PT720H00M01S")
def test_ods_bool_to_string():
fixture = [True, False]
expected = ["true", "false"]
actual = [ods_bool_value(element) for element in fixture]
eq_(actual, expected)
def test_ods_time_value():
test = datetime(2020, 10, 6, 11, 11, 11)
actual = ods_time_value(test)
eq_(actual, "PT11H11M11S")
def test_ods_date_value():
test = datetime(2020, 10, 6, 11, 11, 11)
actual = ods_date_value(test)
eq_(actual, "2020-10-06")
def test_time_value_returns_time_delta():
test_time_value = "PT720H00M01S"
delta = time_value(test_time_value)
eq_(delta, timedelta(days=30, seconds=1))
def test_time_value():
test_time_value = "PT23H00M01S"
delta = time_value(test_time_value)
eq_(delta, time(23, 0, 1))