From 4c655759cdbe252caf741d78468e2020b6358516 Mon Sep 17 00:00:00 2001 From: Brock Date: Thu, 7 Jan 2021 20:43:24 -0800 Subject: [PATCH] TST: flesh out EA setitem tests --- pandas/tests/extension/base/setitem.py | 51 ++++++++++++++++++-------- 1 file changed, 35 insertions(+), 16 deletions(-) diff --git a/pandas/tests/extension/base/setitem.py b/pandas/tests/extension/base/setitem.py index f1fa74192d4df..cb9a19b438feb 100644 --- a/pandas/tests/extension/base/setitem.py +++ b/pandas/tests/extension/base/setitem.py @@ -8,6 +8,35 @@ class BaseSetitemTests(BaseExtensionTests): + @pytest.fixture( + params=[ + lambda x: x.index, + lambda x: list(x.index), + lambda x: slice(None), + lambda x: slice(0, len(x)), + lambda x: range(len(x)), + lambda x: list(range(len(x))), + lambda x: np.ones(len(x), dtype=bool), + ], + ids=[ + "index", + "list[index]", + "null_slice", + "full_slice", + "range", + "list(range)", + "mask", + ], + ) + def full_indexer(self, request): + """ + Fixture for an indexer to pass to obj.loc to get/set the full length of the + object. + + In some cases, assumes that obj.index is the default RangeIndex. + """ + return request.param + def test_setitem_scalar_series(self, data, box_in_series): if box_in_series: data = pd.Series(data) @@ -305,30 +334,20 @@ def test_setitem_preserves_views(self, data): assert view1[0] == data[1] assert view2[0] == data[1] - def test_setitem_dataframe_column_with_index(self, data): + def test_setitem_with_expansion_dataframe_column(self, data, full_indexer): # https://github.com/pandas-dev/pandas/issues/32395 df = expected = pd.DataFrame({"data": pd.Series(data)}) result = pd.DataFrame(index=df.index) - result.loc[df.index, "data"] = df["data"] - self.assert_frame_equal(result, expected) - def test_setitem_dataframe_column_without_index(self, data): - # https://github.com/pandas-dev/pandas/issues/32395 - df = expected = pd.DataFrame({"data": pd.Series(data)}) - result = pd.DataFrame(index=df.index) - result.loc[:, "data"] = df["data"] + key = full_indexer(df) + result.loc[key, "data"] = df["data"] self.assert_frame_equal(result, expected) - def test_setitem_series_with_index(self, data): + def test_setitem_series(self, data, full_indexer): # https://github.com/pandas-dev/pandas/issues/32395 ser = expected = pd.Series(data, name="data") result = pd.Series(index=ser.index, dtype=object, name="data") - result.loc[ser.index] = ser - self.assert_series_equal(result, expected) - def test_setitem_series_without_index(self, data): - # https://github.com/pandas-dev/pandas/issues/32395 - ser = expected = pd.Series(data, name="data") - result = pd.Series(index=ser.index, dtype=object, name="data") - result.loc[:] = ser + key = full_indexer(ser) + result.loc[key] = ser self.assert_series_equal(result, expected)