Home / Class/ TestSuperLen Class — requests Architecture

TestSuperLen Class — requests Architecture

Architecture documentation for the TestSuperLen class in test_utils.py from the requests codebase.

Entity Profile

Dependency Diagram

graph TD
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59["TestSuperLen"]
  5828793e_be5b_8952_37f1_338fd4634a1a["test_utils.py"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|defined in| 5828793e_be5b_8952_37f1_338fd4634a1a
  5e22cd56_435e_b599_a234_8ab2746051dd["test_io_streams()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 5e22cd56_435e_b599_a234_8ab2746051dd
  b19eb58e_4c8f_70fd_a119_73f4b4581958["test_super_len_correctly_calculates_len_of_partially_read_file()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| b19eb58e_4c8f_70fd_a119_73f4b4581958
  09208fb1_7486_ca2b_21ad_feccb420ecdc["test_super_len_handles_files_raising_weird_errors_in_tell()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 09208fb1_7486_ca2b_21ad_feccb420ecdc
  ce653a5f_af8a_44b5_d65c_03181338389d["test_super_len_tell_ioerror()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| ce653a5f_af8a_44b5_d65c_03181338389d
  4ba448fb_17c2_de0e_0cb4_8b5c110e0d81["test_string()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 4ba448fb_17c2_de0e_0cb4_8b5c110e0d81
  2843fb58_0e73_11c6_26fd_57bd1c24debc["test_file()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 2843fb58_0e73_11c6_26fd_57bd1c24debc
  64042906_7513_c90f_aa1e_743a7367012c["test_tarfile_member()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 64042906_7513_c90f_aa1e_743a7367012c
  b6f8b247_268e_a3e5_ebdd_fab690101fcb["test_super_len_with__len__()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| b6f8b247_268e_a3e5_ebdd_fab690101fcb
  d213257a_5401_8d06_7fac_ec033b83bef5["test_super_len_with_no__len__()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| d213257a_5401_8d06_7fac_ec033b83bef5
  11adc55f_0a3e_d39b_91ed_94cc21ad13f2["test_super_len_with_tell()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 11adc55f_0a3e_d39b_91ed_94cc21ad13f2
  704a7d81_ef72_0404_36c8_ae2e0169d44e["test_super_len_with_fileno()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| 704a7d81_ef72_0404_36c8_ae2e0169d44e
  ba569ea6_45dc_ecf8_0aeb_95d8e44816e3["test_super_len_with_no_matches()"]
  81f7dd40_8de4_e5e3_d0f0_3d84ce7fbb59 -->|method| ba569ea6_45dc_ecf8_0aeb_95d8e44816e3

Relationship Graph

Source Code

tests/test_utils.py lines 50–153

class TestSuperLen:
    @pytest.mark.parametrize(
        "stream, value",
        (
            (StringIO.StringIO, "Test"),
            (BytesIO, b"Test"),
            pytest.param(
                cStringIO, "Test", marks=pytest.mark.skipif("cStringIO is None")
            ),
        ),
    )
    def test_io_streams(self, stream, value):
        """Ensures that we properly deal with different kinds of IO streams."""
        assert super_len(stream()) == 0
        assert super_len(stream(value)) == 4

    def test_super_len_correctly_calculates_len_of_partially_read_file(self):
        """Ensure that we handle partially consumed file like objects."""
        s = StringIO.StringIO()
        s.write("foobarbogus")
        assert super_len(s) == 0

    @pytest.mark.parametrize("error", [IOError, OSError])
    def test_super_len_handles_files_raising_weird_errors_in_tell(self, error):
        """If tell() raises errors, assume the cursor is at position zero."""

        class BoomFile:
            def __len__(self):
                return 5

            def tell(self):
                raise error()

        assert super_len(BoomFile()) == 0

    @pytest.mark.parametrize("error", [IOError, OSError])
    def test_super_len_tell_ioerror(self, error):
        """Ensure that if tell gives an IOError super_len doesn't fail"""

        class NoLenBoomFile:
            def tell(self):
                raise error()

            def seek(self, offset, whence):
                pass

        assert super_len(NoLenBoomFile()) == 0

    def test_string(self):
        assert super_len("Test") == 4

    @pytest.mark.parametrize(
        "mode, warnings_num",
        (
            ("r", 1),
            ("rb", 0),
        ),
    )
    def test_file(self, tmpdir, mode, warnings_num, recwarn):
        file_obj = tmpdir.join("test.txt")
        file_obj.write("Test")
        with file_obj.open(mode) as fd:
            assert super_len(fd) == 4
        assert len(recwarn) == warnings_num

    def test_tarfile_member(self, tmpdir):
        file_obj = tmpdir.join("test.txt")
        file_obj.write("Test")

        tar_obj = str(tmpdir.join("test.tar"))
        with tarfile.open(tar_obj, "w") as tar:
            tar.add(str(file_obj), arcname="test.txt")

        with tarfile.open(tar_obj) as tar:
            member = tar.extractfile("test.txt")
            assert super_len(member) == 4

    def test_super_len_with__len__(self):
        foo = [1, 2, 3, 4]
        len_foo = super_len(foo)
        assert len_foo == 4

Domain

Defined In

Frequently Asked Questions

What is the TestSuperLen class?
TestSuperLen is a class in the requests codebase, defined in tests/test_utils.py.
Where is TestSuperLen defined?
TestSuperLen is defined in tests/test_utils.py at line 50.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free