import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test import lldbutil


class TestCase(TestBase):
    def test_synthetic(self):
        self.build()
        if self.TraceOn():
            self.expect("log enable -v lldb formatters")

        _, _, thread, _ = lldbutil.run_to_source_breakpoint(
            self, "break here", lldb.SBFileSpec("main.cpp")
        )

        frame = thread.selected_frame
        account = frame.var("acc")
        self.assertEqual(account.num_children, 1)
        self.assertEqual(account.child[0].name, "username")

        self.expect("v acc", matching=False, substrs=["password"])

    def test_update_reuse(self):
        self.build()

        log = self.getBuildArtifact("formatter.log")
        self.runCmd(f"log enable lldb formatters -f {log}")

        _, _, thread, _ = lldbutil.run_to_source_breakpoint(
            self, "break here", lldb.SBFileSpec("main.cpp")
        )

        frame = thread.selected_frame
        account = frame.var("acc")
        self.assertEqual(account.num_children, 1)

        self.filecheck_log(log, __file__)
        # CHECK: Bytecode formatter can reuse @update: true (type: `Account`, name: `acc`)
