"""
Tests involving custom Index subclasses
"""
import numpy as np

from pandas import (
    DataFrame,
    Index,
)
import pandas._testing as tm


class CustomIndex(Index):
    def __new__(cls, data, name=None):
        # assert that this index class cannot hold strings
        if any(isinstance(val, str) for val in data):
            raise TypeError("CustomIndex cannot hold strings")

        if name is None and hasattr(data, "name"):
            name = data.name
        data = np.array(data, dtype="O")

        return cls._simple_new(data, name)


def test_insert_fallback_to_base_index():
    # https://github.com/pandas-dev/pandas/issues/47071

    idx = CustomIndex([1, 2, 3])
    result = idx.insert(0, "string")
    expected = Index(["string", 1, 2, 3], dtype=object)
    tm.assert_index_equal(result, expected)

    df = DataFrame(
        np.random.randn(2, 3), columns=idx, index=Index([1, 2], name="string")
    )
    result = df.reset_index()
    tm.assert_index_equal(result.columns, expected)
