from io import StringIO


def test_01():
    """
    Test that the constructor and getvalue
    method return expected values
    """
    string = "Test String 1"
    f = StringIO()
    f.write(string)

    assert f.tell() == len(string)
    assert f.getvalue() == string


def test_02():
    """
    Test that the read method (no arg)
    results the expected value
    """
    string = "Test String 2"
    f = StringIO(string)

    assert f.read() == string
    assert f.read() == ""


def test_03():
    """
    Tests that the read method (integer arg)
    returns the expected value
    """
    string = "Test String 3"
    f = StringIO(string)

    assert f.read(1) == "T"
    assert f.read(1) == "e"
    assert f.read(1) == "s"
    assert f.read(1) == "t"


def test_04():
    """
    Tests that the read method increments the
    cursor position and the seek method moves
    the cursor to the appropriate position
    """
    string = "Test String 4"
    f = StringIO(string)

    assert f.read(4) == "Test"
    assert f.tell() == 4
    assert f.seek(0) == 0
    assert f.read(4) == "Test"


def test_05():
    """
    Tests readline
    """
    string = "Test String 6\nnew line is here\nfinished"

    f = StringIO(string)

    assert f.readline() == "Test String 6\n"
    assert f.readline() == "new line is here\n"
    assert f.readline() == "finished"
    assert f.readline() == ""


if __name__ == "__main__":
    test_01()
    test_02()
    test_03()
    test_04()
    test_05()
