from lldbsuite.test.lldbinline import CommandParser
from lldbsuite.test.lldbtest import Base
import textwrap


class TestCommandParser(Base):

    mydir = Base.compute_mydir(__file__)

    def test_indentation(self):
        """Test indentation handling"""
        filename = self.getBuildArtifact("test_file.cpp")
        with open(filename, "w") as f:
            f.write(textwrap.dedent("""\
                    int q;
                    int w; //% first break
                    int e;
                    int r; //% second break
                    //% continue second
                    //%   continuing indented
                      //% not indented
                    int t; //% third break
                    """))
        p = CommandParser()
        p.parse_source_files([filename])

        def bkpt(line, cmd):
            return {'file_name': filename, 'line_number': line, 'command': cmd}
        self.assertEqual(
            p.breakpoints, [
                bkpt(2, 'first break'),
                bkpt(4, 'second break\ncontinue second\n  continuing indented\nnot indented'),
                bkpt(8, "third break")])
