Skip to content
This repository has been archived by the owner on May 2, 2022. It is now read-only.

Commit

Permalink
rewrite test_WritePandasDataFrameToFile with pytest
Browse files Browse the repository at this point in the history
  • Loading branch information
TaiSakuma committed Jul 26, 2018
1 parent 19c1c01 commit c762517
Showing 1 changed file with 59 additions and 64 deletions.
123 changes: 59 additions & 64 deletions tests/unit/collector/test_WritePandasDataFrameToFile.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,18 @@
import unittest
# Tai Sakuma <tai.sakuma@gmail.com>
import pytest
import io

##__________________________________________________________________||
hasPandas = False
has_no_pandas = False
try:
import pandas
from alphatwirl.collector import WritePandasDataFrameToFile
hasPandas = True
import pandas as pd
except ImportError:
pass
has_no_pandas = True

pytestmark = pytest.mark.skipif(has_no_pandas, reason="has no pandas")

if not has_no_pandas:
from alphatwirl.collector import WritePandasDataFrameToFile

##__________________________________________________________________||
class MockOpen(object):
Expand All @@ -18,65 +22,56 @@ def __init__(self, out):
def __call__(self, path):
return self._out

##__________________________________________________________________||
def mockClose(file): pass
def mockClose(file):
pass

##__________________________________________________________________||
@unittest.skipUnless(hasPandas, "has no pandas")
class TestWritePandasDataFrameToFile(unittest.TestCase):

@unittest.skip('fail with Pandas 0.20 because of its bug about the header indent')
def test_deliver(self):
delivery = WritePandasDataFrameToFile("tbl.txt")

out = io.BytesIO()
delivery._open = MockOpen(out)
delivery._close = mockClose

results = pandas.DataFrame(
{
'v1': [1, 2, 3],
'n': [4.0, 3.0, 2.0],
'nvar': [6.0, 9.0, 3.0],
},
columns = ['v1', 'n', 'nvar']
)

delivery.deliver(results)

expected = " v1 n nvar\n 1 4 6\n 2 3 9\n 3 2 3\n".encode()
self.assertEqual(expected, out.getvalue())

def test_deliver_empty_dataframe(self):

delivery = WritePandasDataFrameToFile("tbl.txt")

out = io.BytesIO()
delivery._open = MockOpen(out)
delivery._close = mockClose

results = pandas.DataFrame(
{
'v1': [ ],
'n': [ ],
'nvar': [ ],
},
columns = ['v1', 'n', 'nvar']
)

delivery.deliver(results)

expected = "v1 n nvar\n".encode()
self.assertEqual(expected, out.getvalue())

def test_deliver_None_results(self):

delivery = WritePandasDataFrameToFile("tbl.txt")

out = io.BytesIO()
delivery._open = MockOpen(out)
delivery._close = mockClose

delivery.deliver(None)
@pytest.fixture()
def out():
return io.BytesIO()

@pytest.fixture()
def obj(out):
ret = WritePandasDataFrameToFile("tbl.txt")
ret._open = MockOpen(out)
ret._close = mockClose
yield ret

def test_repr(obj):
repr(obj)

@pytest.mark.xfail(reason='fail with Pandas 0.20 because of its bug about the header indent')
def test_deliver(obj, out):
results = pd.DataFrame(
{
'v1': [1, 2, 3],
'n': [4.0, 3.0, 2.0],
'nvar': [6.0, 9.0, 3.0],
},
columns = ['v1', 'n', 'nvar']
)

obj.deliver(results)

expected = " v1 n nvar\n 1 4 6\n 2 3 9\n 3 2 3\n".encode()
assert expected == out.getvalue()

def test_deliver_empty_dataframe(obj, out):
results = pd.DataFrame(
{
'v1': [ ],
'n': [ ],
'nvar': [ ],
},
columns = ['v1', 'n', 'nvar']
)

obj.deliver(results)

expected = "v1 n nvar\n".encode()
assert expected == out.getvalue()

def test_deliver_None_results(obj, out):
obj.deliver(None)

##__________________________________________________________________||

0 comments on commit c762517

Please sign in to comment.