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


class TestOrderedSet(TestBase):
    def test_ordered_set(self):
        self.build()
        self.run_tests()

    @skipUnlessDarwin
    def test_ordered_set_no_const(self):
        disable_constant_classes = {
            "CFLAGS_EXTRAS": "-fno-constant-nsnumber-literals "
            + "-fno-constant-nsarray-literals "
            + "-fno-constant-nsdictionary-literals",
        }
        # FIXME: Remove when flags are available upstream.
        self.build(dictionary=disable_constant_classes, compiler="xcrun clang")
        self.run_tests()

    def run_tests(self):
        src_file = "main.m"
        src_file_spec = lldb.SBFileSpec(src_file)
        (target, process, thread, main_breakpoint) = lldbutil.run_to_source_breakpoint(
            self, "break here", src_file_spec, exe_name="a.out"
        )
        frame = thread.GetSelectedFrame()
        self.expect("expr -d run -- orderedSet", substrs=["3 elements"])
        self.expect(
            "expr -d run -- *orderedSet", substrs=["(int)1", "(int)2", "(int)3"]
        )
