def test_indent_size(self):
        sl = StringList(['', '', "hello", "world", '', '', '', "1234"])

        assert sl.indent_size == 0

        sl.indent_size = 7
        assert sl.indent_size == 7

        sl.set_indent_size()
        assert sl.indent_size == 0

        sl.set_indent_size(2)
        assert sl.indent_size == 2

        sl.indent_size += 1
        assert sl.indent_size == 3

        sl.indent_size -= 2
        assert sl.indent_size == 1
def make_rest_example(
    options: Dict[str, Any],
    env: sphinx.environment.BuildEnvironment,
    content: Sequence[str],
) -> List[str]:
    """
	Make the content of a reST Example node.

	:param options:
	:param content: The user-provided content of the directive.

	:return:
	"""

    output = StringList(".. code-block:: rest")
    output.set_indent(' ' * env.config.docutils_tab_width, 1)

    for option, value in options.items():
        if value is None:
            output.append(f":{option}:")
        else:
            output.append(f":{option}: {value}")

    output.blankline()

    for line in content:
        output.append(f"{line}")

    output.set_indent_size(0)
    output.blankline(ensure_single=True)

    for line in content:
        output.append(line)

    output.blankline(ensure_single=True)

    return list(output)
    def test_indent(self):
        sl = StringList()
        sl.set_indent_size(1)

        sl.append("Indented")

        assert sl == ["\tIndented"]

        sl.set_indent_type("    ")

        sl.append("Indented")

        assert sl == ["\tIndented", "    Indented"]

        expected_list = [
            "class Foo:",
            '',
            "\tdef bar(self, listicle: List[Item]):",
            "\t\t...",
            '',
            "\tdef __repr__(self) -> str:",
            '\t\treturn "Foo()"',
            '',
        ]

        expected_string = dedent("""\
		class Foo:

			def bar(self, listicle: List[Item]):
				...

			def __repr__(self) -> str:
				return "Foo()"
		""")

        sl = StringList()
        sl.append("class Foo:")
        sl.blankline(True)
        sl.set_indent_size(1)
        sl.append("def bar(self, listicle: List[Item]):")
        sl.indent_size += 1
        sl.append("...")
        sl.indent_size -= 1
        sl.blankline(True)
        sl.append("def __repr__(self) -> str:")
        sl.indent_size += 1
        sl.append('return "Foo()"')
        sl.indent_size -= 1
        sl.blankline(True)
        sl.set_indent_size(0)

        assert sl == expected_list
        assert str(sl) == expected_string
        assert sl == expected_string

        sl = StringList()
        sl.append("class Foo:")
        sl.blankline(True)

        with sl.with_indent('\t', 1):
            sl.append("def bar(self, listicle: List[Item]):")
            with sl.with_indent('\t', 2):
                sl.append("...")
            sl.blankline(True)
            sl.append("def __repr__(self) -> str:")
            with sl.with_indent('\t', 2):
                sl.append('return "Foo()"')
            sl.blankline(True)

        assert sl.indent_size == 0

        assert sl == expected_list
        assert str(sl) == expected_string
        assert sl == expected_string

        sl = StringList()
        sl.append("class Foo:")
        sl.blankline(True)

        with sl.with_indent_size(1):
            sl.append("def bar(self, listicle: List[Item]):")
            with sl.with_indent_size(2):
                sl.append("...")
            sl.blankline(True)
            sl.append("def __repr__(self) -> str:")
            with sl.with_indent_size(2):
                sl.append('return "Foo()"')
            sl.blankline(True)

        assert sl.indent_size == 0

        assert sl == expected_list
        assert str(sl) == expected_string
        assert sl == expected_string

        sl = StringList()
        sl.append("class Foo:")
        sl.set_indent(Indent(0, "    "))
        sl.blankline(True)

        with sl.with_indent_size(1):
            sl.append("def bar(self, listicle: List[Item]):")
            with sl.with_indent_size(2):
                sl.append("...")
            sl.blankline(True)
            sl.append("def __repr__(self) -> str:")
            with sl.with_indent_size(2):
                sl.append('return "Foo()"')
            sl.blankline(True)

        assert sl.indent_size == 0

        assert sl == [x.expandtabs(4) for x in expected_list]
        assert str(sl) == expected_string.expandtabs(4)
        assert sl == expected_string.expandtabs(4)

        sl = StringList()
        sl.append("class Foo:")
        sl.set_indent("    ", 0)
        sl.blankline(True)

        with sl.with_indent_size(1):
            sl.append("def bar(self, listicle: List[Item]):")
            with sl.with_indent_size(2):
                sl.append("...")
            sl.blankline(True)
            sl.append("def __repr__(self) -> str:")
            with sl.with_indent_size(2):
                sl.append('return "Foo()"')
            sl.blankline(True)

        assert sl.indent_size == 0

        assert sl == [x.expandtabs(4) for x in expected_list]
        assert str(sl) == expected_string.expandtabs(4)
        assert sl == expected_string.expandtabs(4)

        sl = StringList()
        sl.append("class Foo:")
        sl.blankline(True)

        with sl.with_indent_size(1):
            sl.append("def bar(self, listicle: List[Item]):")
            with sl.with_indent_size(2):
                sl.append("...")
            sl.blankline(True)
            sl.append("def __repr__(self) -> str:")
            with sl.with_indent_size(2):
                with sl.with_indent_type("    "):
                    sl.append('return "Foo()"')
            sl.blankline(True)

        assert sl.indent_size == 0

        expected_list[-2] = '        return "Foo()"'
        assert sl == expected_list
        assert str(sl) == expected_string.replace('\t\treturn "Foo()"',
                                                  '        return "Foo()"')
        assert sl == expected_string.replace('\t\treturn "Foo()"',
                                             '        return "Foo()"')