Vidya Setlur

123 papers A* 18A 9B 8C 2Misc 1Journal 51Unranked 33
YearRankTypeTitle / Venue / Authors
2026 J jnl
CoRR
Ken Gu, Srishti Palani, Vidya Setlur
2026 A* conf
CHI
Ken Gu, Srishti Palani, Vidya Setlur
2026 A* conf
CHI
Srishti Palani, Vidya Setlur
2026 J jnl
CoRR
Srishti Palani, Vidya Setlur
2026 conf
IUI Companion
Vidya Setlur
2025 A* conf
CHI
Mashrur Rashik, Shilpa Sweth, Nishtha Agrawal, Saiyyam Kochar, Kara M. Smith, Fateme Rajabiyazdi, Vidya Setlur, Narges Mahyar, Ali Sarvghad
2025 J jnl
CoRR
Mashrur Rashik, Shilpa Sweth, Nishtha Agrawal, Saiyyam Kochar, Kara M. Smith, Fateme Rajabiyazdi, Vidya Setlur, Narges Mahyar, Ali Sarvghad
2025 J jnl
CoRR
Yu Fu, Dennis Bromley, Vidya Setlur
2025 J jnl
Comput. Graph. Forum
Yu Fu, Dennis Bromley, Vidya Setlur
2025 J jnl
CoRR
Matthew Brehmer, Ginger Gloystein, Bailiang Zhou, Abby Gray, Sruthi Pillai, Ben Medina, Vidya Setlur
2025 J jnl
IEEE Trans. Vis. Comput. Graph.
Arjun Srinivasan, Joanna Purich, Michael Correll, Leilani Battle, Vidya Setlur, Anamaria Crisan
2025 J jnl
IEEE Trans. Vis. Comput. Graph.
Nicole Sultanum, Vidya Setlur
2025 A* conf
CHI
Huichen Will Wang, Larry Birnbaum, Vidya Setlur
2025 J jnl
CoRR
Huichen Will Wang, Larry Birnbaum, Vidya Setlur
2025 A* conf
CHI
Maxim Lisnic, Vidya Setlur, Nicole Sultanum
2025 J jnl
CoRR
Maxim Lisnic, Vidya Setlur, Nicole Sultanum
2025 A conf
IUI
Arjun Srinivasan, Vidya Setlur, Arvind Satyanarayan
2025 J jnl
CoRR
Arjun Srinivasan, Vidya Setlur, Arvind Satyanarayan
2025 J jnl
CoRR
Vidya Setlur, Samuel Ridet
2025 conf
SIGMOD Conference Companion
Vidya Setlur
2024 J jnl
CoRR
Vidya Setlur, Larry Birnbaum
2024 J jnl
CoRR
Dennis Bromley, Vidya Setlur
2024 A conf
IEEE VIS
Dennis Bromley, Vidya Setlur
2024 J jnl
IEEE Trans. Vis. Comput. Graph.
Daehyun Kim, Seulgi Choi, Juho Kim, Vidya Setlur, Maneesh Agrawala
2024 J jnl
Comput. Graph. Forum
Chase Stokes, Chelsea Sanker, Bridget Cogley, Vidya Setlur
2024 J jnl
CoRR
Chase Stokes, Chelsea Sanker, Bridget Cogley, Vidya Setlur
2024 J jnl
CoRR
Nicole Sultanum, Vidya Setlur
2024 A conf
IEEE VIS
Sneha Gathani, Anamaria Crisan, Vidya Setlur, Arjun Srinivasan
2024 J jnl
IEEE Trans. Vis. Comput. Graph.
Vidya Setlur, Michael Correll, Arvind Satyanarayan, Melanie Tory
2024 conf
EuroVis (Short Papers)
Chase Stokes, Chelsea Sanker, Bridget Cogley, Vidya Setlur
2024 J jnl
CoRR
Chase Stokes, Chelsea Sanker, Bridget Cogley, Vidya Setlur
2024 A conf
IUI
Alexander Bendeck, Dennis Bromley, Vidya Setlur
2024 J jnl
CoRR
Alexander Bendeck, Dennis Bromley, Vidya Setlur
2024 conf
GEN4DS@VIS
Matthew Brehmer, Vidya Setlur, Zoe, Michael Correll
2024 J jnl
CoRR
Matthew Brehmer, Vidya Setlur, Zoe, Michael Correll
2024 conf
UncertaintyVis@VIS
Chase Stokes, Chelsea Sanker, Bridget Cogley, Vidya Setlur
2024 J jnl
CoRR
Chase Stokes, Chelsea Sanker, Bridget Cogley, Vidya Setlur
2023 J jnl
CoRR
Terrell Ibanez, Vidya Setlur, Maneesh Agrawala
2023 conf
EuroVis (Short Papers)
Arjun Srinivasan, Vidya Setlur
2023 J jnl
IEEE Trans. Vis. Comput. Graph.
Aimen Gaba, Vidya Setlur, Arjun Srinivasan, Jane Hoffswell, Cindy Xiong
2023 J jnl
CoRR
Daehyun Kim, Seulgi Choi, Juho Kim, Vidya Setlur, Maneesh Agrawala
2023 J jnl
CoRR
Vidya Setlur, Michael Correll, Arvind Satyanarayan, Melanie Tory
2023 conf
EuroVis (Short Papers)
Vidya Setlur, Andrew Beers
2023 J jnl
IEEE Trans. Vis. Comput. Graph.
Aditeya Pandey, Arjun Srinivasan, Vidya Setlur
2023 A* conf
UIST
Vidya Setlur, Andriy Kanyuka, Arjun Srinivasan
2023 J jnl
CoRR
Vidya Setlur, Andriy Kanyuka, Arjun Srinivasan
2023 J jnl
IEEE Trans. Vis. Comput. Graph.
Chase Stokes, Vidya Setlur, Bridget Cogley, Arvind Satyanarayan, Marti A. Hearst
2023 J jnl
CoRR
Joanna Purich, Arjun Srinivasan, Michael Correll, Leilani Battle, Vidya Setlur, Anamaria Crisan
2023 conf
IEEE VIS (Short Papers)
Dennis Bromley, Vidya Setlur
2023 J jnl
CoRR
Dennis Bromley, Vidya Setlur
2022 conf
EuroVis (Short Papers)
Allison Whilden, Dirk Karis, Vidya Setlur, Rodion Degtyar, Jonathan Que, Filippos Lymperopoulos
2022 J jnl
CoRR
Aimen Gaba, Vidya Setlur, Arjun Srinivasan, Jane Hoffswell, Cindy Xiong
2022 J jnl
IEEE Trans. Vis. Comput. Graph.
Doris Jung Lin Lee, Vidya Setlur, Melanie Tory, Karrie Karahalios, Aditya G. Parameswaran
2022 A* conf
CHI
Vidya Setlur, Melanie Tory
2022 J jnl
CoRR
Vidya Setlur, Melanie Tory
2022 J jnl
CoRR
Aditeya Pandey, Arjun Srinivasan, Vidya Setlur
2022 J jnl
CoRR
Vidya Setlur, Michael Correll, Sarah Battersby
2022 conf
IEEE VIS (Short Papers)
Vidya Setlur, Michael Correll, Sarah Battersby
2022 J jnl
CoRR
Chase Stokes, Vidya Setlur, Bridget Cogley, Arvind Satyanarayan, Marti A. Hearst
2022 A* ed.
UIST
Maneesh Agrawala, Jacob O. Wobbrock, Eytan Adar, Vidya Setlur
2022 ed.
UIST (Adjunct Volume)
Maneesh Agrawala, Jacob O. Wobbrock, Eytan Adar, Vidya Setlur
2022 J jnl
IEEE Trans. Vis. Comput. Graph.
Cindy Xiong, Vidya Setlur, Benjamin Bach, Eunyee Koh, Kylie R. Lin, Steven Franconeri
2021 J jnl
CoRR
Doris Jung Lin Lee, Vidya Setlur, Melanie Tory, Karrie Karahalios, Aditya G. Parameswaran
2021 conf
IEEE VIS (Short Papers)
Vidya Setlur, Sarah Battersby, Tracy Wong
2021 J jnl
CoRR
Vidya Setlur, Sarah Battersby, Tracy Wong
2021 conf
IEEE VIS (Short Papers)
Vidya Setlur, Haeyong Chung
2021 J jnl
CoRR
Vidya Setlur, Haeyong Chung
2021 A* conf
UIST
Arjun Srinivasan, Vidya Setlur
2021 J jnl
CoRR
Arjun Srinivasan, Vidya Setlur
2021 A* conf
CHI
Dae Hyun Kim, Vidya Setlur, Maneesh Agrawala
2021 J jnl
CoRR
Dae Hyun Kim, Vidya Setlur, Maneesh Agrawala
2021 J jnl
CoRR
Cindy Xiong, Vidya Setlur, Benjamin Bach, Kylie R. Lin, Eunyee Koh, Steven Franconeri
2020 conf
IEEE VIS (Short Papers)
Vidya Setlur, Arathi Kumar
2020 J jnl
CoRR
Vidya Setlur, Arathi Kumar
2020 A* conf
UIST
Vidya Setlur, Enamul Hoque, Dae Hyun Kim, Angel X. Chang
2019 conf
VAST
Melanie Tory, Vidya Setlur
2019 A conf
IUI
Vidya Setlur, Melanie Tory, Alex Djalali
2019 C conf
CHIRA
Vidya Setlur, Benjamin Watson
2019 conf
IEEE VIS (Short Papers)
Marti A. Hearst, Melanie Tory, Vidya Setlur
2018 J jnl
IEEE Trans. Vis. Comput. Graph.
Enamul Hoque, Vidya Setlur, Melanie Tory, Isaac Dykeman
2018 B conf
AVI
Bongshin Lee, Arjun Srinivasan, John T. Stasko, Melanie Tory, Vidya Setlur
2017 conf
AAAI Spring Symposia
Vidya Setlur, Melanie Tory
2016 J jnl
IEEE Trans. Vis. Comput. Graph.
Vidya Setlur, Maureen C. Stone
2016 A* conf
UIST
Vidya Setlur, Sarah E. Battersby, Melanie Tory, Rich Gossweiler, Angel X. Chang
2016 conf
ISS Companion
Ramik Sadana, Vidya Setlur, John T. Stasko
2015 conf
MobileHCI Adjunct
Benjamin Watson, Vidya Setlur
2015 B conf
MobileHCI
Juhee Bae, Vidya Setlur, Benjamin Watson
2014 conf
CIC
Maureen Stone, Danielle Albers Szafir, Vidya Setlur
2014 A* conf
CHI
Vidya Setlur, Jock D. Mackinlay
2014 J jnl
IEEE Trans. Vis. Comput. Graph.
Justin Talbot, Vidya Setlur, Anushka Anand
2013 conf
IEEE BigData
Frederik Wiehr, Vidya Setlur, Alark Joshi
2013 conf
Mobile HCI
Shahriyar Amini, Vidya Setlur, Zhengxin Xi, Eiji Hayashi, Jason I. Hong
2012 conf
SIGGRAPH Mobile
Frederik Wiehr, Vidya Setlur, Alark Joshi
2011 conf
SIGGRAPH Asia Courses
Benjamin Watson, Vidya Setlur, Kari Pulli
2011 Misc conf
UbiComp
Timothy Sohn, Frank Chun Yat Li, Agathe Battestini, Vidya Setlur, Koichi Mori, Hiroshi Horii
2011 conf
Pervasive
Elizabeth S. Bales, Timothy Sohn, Vidya Setlur
2011 A conf
IUI
Vidya Setlur, Samuel Rossoff, Bruce Gooch
2010 conf
Mobile HCI
Agathe Battestini, Vidya Setlur, Timothy Sohn
2010 conf
Mobile HCI
Timothy Sohn, Vidya Setlur, Koichi Mori, Joseph Kaye, Hiroshi Horii, Agathe Battestini, Rafael Ballagas, Christopher Paretti, Mirjana Spasojevic
2010 conf
CHI Extended Abstracts
Timothy Sohn, Koichi Mori, Vidya Setlur
2010 A* conf
CHI
Feng Tian, Fei Lv, Jingtao Wang, Hongan Wang, Wencan Luo, Matthew Kam, Vidya Setlur, Guozhong Dai, John F. Canny
2010 conf
Mobile HCI
Vidya Setlur
2010 conf
AutomotiveUI
Timothy Sohn, Agathe Battestini, Hiroshi Horii, Elizabeth S. Bales, Vidya Setlur, Koichi Mori
2010 conf
COM.Geo
Vidya Setlur, Cynthia Kuo, Peter Mikelsons
2010 B conf
TEI
Vidya Setlur, Agathe Battestini, Timothy Sohn, Hiroshi Horii
2009 A* conf
ACM Multimedia
Berna Erol, Jiebo Luo, Shih-Fu Chang, Minoru Etoh, Hsiao-Wuen Hon, Qian Lin, Vidya Setlur
2009 B conf
Graphics Interface
Vidya Setlur
2009 A conf
ICME
Vidya Setlur, Agathe Battestini, Xianghua Ding
2009 A* conf
ACM Multimedia
Wei-Chao Chen, Agathe Battestini, Natasha Gelfand, Vidya Setlur
2008 A* conf
CHI
Feng Tian, Lishuang Xu, Hongan Wang, Xiaolong Zhang, Yuanyuan Liu, Vidya Setlur, Guozhong Dai
2007 J jnl
IEEE Computer Graphics and Applications
Vidya Setlur, Thomas Lechner, Marc Nienhaus, Bruce Gooch
2007 A* conf
CHI
Feng Tian, Xiang Ao, Hongan Wang, Vidya Setlur, Guozhong Dai
2006 C conf
Computer Graphics International
Vidya Setlur, Stephen Wilkinson
2006 conf
ISCIS
Tolga K. Çapin, Antonio Haro, Vidya Setlur, Stephen Wilkinson
2006 A conf
ICME
Vidya Setlur, Tolga K. Çapin, Suresh Chitturi, Ramakrishna Vedantham, Michael Ingrassia
2006 B ed.
MUM
Vidya Setlur
2005 B conf
MUM
Vidya Setlur, Saeko Takagi, Ramesh Raskar, Michael Gleicher, Bruce Gooch
2005 B conf
MUM
Antonio Haro, Koichi Mori, Vidya Setlur, Tolga K. Capin
2005 B conf
MUM
Vidya Setlur, Yingqing Xu, Xuejin Chen, Bruce Gooch
2005 J jnl
Comput. Graph. Forum
Vidya Setlur, Conrad Albrecht-Buehler, Amy Ashurst Gooch, Samuel Rossoff, Bruce Gooch
2004 conf
SIGGRAPH Sketches
Vidya Setlur, Saeko Takagi, Ramesh Raskar, Michael Gleicher, Bruce Gooch
2004 conf
NPAR
Vidya Setlur, Bruce Gooch
2003 A conf
IUI
Vidya Setlur, David A. Shamma, Kristian J. Hammond, Sanjay Sood
tests/unit/test_macho_dataclasses.py
← Index tests/unit/test_macho_dataclasses.py python
"""
Unit tests for Mach-O dataclasses.
"""
import pytest
from typing import List, Dict, Optional

pytestmark = [pytest.mark.unit, pytest.mark.dataclass, pytest.mark.macho]


class TestMachODataclass:
    """Tests for MachO dataclass."""

    def test_macho_required_fields(self):
        """Test MachO dataclass with required fields."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS", "MH_DYLDLINK", "MH_TWOLEVEL", "MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True
        )

        assert macho.magic == 0xFEEDFACF
        assert macho.cputype == 0x01000007
        assert macho.is_64bit is True
        assert macho.is_signed is True
        assert macho.magic_str == "MH_MAGIC_64"
        assert macho.filetype_str == "MH_EXECUTE"

    def test_macho_optional_fields_defaults(self):
        """Test MachO dataclass optional fields default to correct values."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_NOUNDEFS"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=False
        )

        assert macho.number_of_load_commands == 0
        assert macho.load_commands_set is None
        assert macho.number_of_segments == 0
        assert macho.number_of_dylibs == 0
        assert macho.number_of_imports == 0
        assert macho.number_of_exports == 0
        assert macho.entry_point is None
        assert macho.uuid is None
        assert macho.version_info is None
        assert macho.version_info_str is None

    def test_macho_with_all_fields(self):
        """Test MachO dataclass with all fields populated."""
        from redb.models.dataclasses import MachO

        macho = MachO(
            magic=0xFEEDFACF,
            cputype=0x01000007,
            cpusubtype=0x00000003,
            filetype=2,
            ncmds=15,
            sizeofcmds=1024,
            flags=0x00200085,
            architecture=0x01000007,
            architectures=[0x01000007],
            magic_str="MH_MAGIC_64",
            cputype_str="CPU_TYPE_X86_64",
            cpusubtype_str="CPU_SUBTYPE_X86_64_ALL",
            filetype_str="MH_EXECUTE",
            flags_str=["MH_PIE"],
            architecture_str="x86_64",
            architectures_str=["x86_64"],
            is_64bit=True,
            is_signed=True,
            number_of_load_commands=15,
            load_commands_set=["LC_SEGMENT_64", "LC_DYLD_INFO_ONLY"],
            number_of_segments=4,
            number_of_dylibs=5,
            number_of_imports=100,
            number_of_exports=10,
            entry_point=0x100001234,
            uuid="12345678-1234-1234-1234-123456789012",
            version_info={"min_os": "10.15"},
            version_info_str={"min_os": "macOS 10.15"}
        )

        assert macho.number_of_load_commands == 15
        assert macho.uuid == "12345678-1234-1234-1234-123456789012"
        assert macho.entry_point == 0x100001234


class TestMachOSegmentDataclass:
    """Tests for MachOSegment dataclass."""

    def test_segment_creation(self):
        """Test MachOSegment dataclass creation."""
        from redb.models.dataclasses import MachOSegment

        segment = MachOSegment(
            segment_name="__TEXT",
            segment_vaddr=0x100000000,
            segment_vsize=0x1000,
            segment_offset=0,
            segment_size=0x1000,
            segment_max_vm_protection=7,
            segment_initial_vm_protection=5,
            segment_nsects=4,
            segment_flags=0,
            segment_entropy=6.5,
            segment_sha256="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert segment.segment_name == "__TEXT"
        assert segment.segment_vaddr == 0x100000000
        assert segment.segment_entropy == 6.5


class TestMachOImportDataclass:
    """Tests for MachOImport dataclass."""

    def test_import_creation(self):
        """Test MachOImport dataclass creation."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(
            macho_imports_total=50,
            macho_import_libraryName=["libSystem.B.dylib", "CoreFoundation"],
            macho_import_functions=["_printf", "_malloc", "_free"]
        )

        assert import_info.macho_imports_total == 50
        assert len(import_info.macho_import_libraryName) == 2
        assert "_printf" in import_info.macho_import_functions

    def test_import_optional_fields(self):
        """Test MachOImport with optional fields as None."""
        from redb.models.dataclasses import MachOImport

        import_info = MachOImport(macho_imports_total=0)

        assert import_info.macho_imports_total == 0
        assert import_info.macho_import_libraryName is None
        assert import_info.macho_import_functions is None


class TestMachOExportDataclass:
    """Tests for MachOExport dataclass."""

    def test_export_creation(self):
        """Test MachOExport dataclass creation."""
        from redb.models.dataclasses import MachOExport

        export_info = MachOExport(
            macho_exports_total=10,
            macho_export_symbols=["_main", "_helper_func"]
        )

        assert export_info.macho_exports_total == 10
        assert "_main" in export_info.macho_export_symbols


class TestMachODylibDataclass:
    """Tests for MachODylib dataclass."""

    def test_dylib_creation(self):
        """Test MachODylib dataclass creation."""
        from redb.models.dataclasses import MachODylib

        dylib = MachODylib(
            dylib_name="/usr/lib/libSystem.B.dylib",
            dylib_timestamp=2,
            dylib_current_version=0x04E10200,
            dylib_compat_version=0x00010000
        )

        assert dylib.dylib_name == "/usr/lib/libSystem.B.dylib"
        assert dylib.dylib_timestamp == 2


class TestMachOLoadCommandDataclass:
    """Tests for MachOLoadCommand dataclass."""

    def test_load_command_creation(self):
        """Test MachOLoadCommand dataclass creation."""
        from redb.models.dataclasses import MachOLoadCommand

        lc = MachOLoadCommand(
            load_command=0x19,
            load_command_str="LC_SEGMENT_64",
            load_command_size=72
        )

        assert lc.load_command == 0x19
        assert lc.load_command_str == "LC_SEGMENT_64"
        assert lc.load_command_size == 72


class TestMachOUniversalDataclass:
    """Tests for MachOUniversal dataclass."""

    def test_universal_fat_binary(self):
        """Test MachOUniversal for FAT binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=True,
            architecture_count=2,
            architectures=["x86_64", "arm64"],
            architecture_info=[
                {"arch": "x86_64", "offset": 0x1000},
                {"arch": "arm64", "offset": 0x10000}
            ],
            fat_hash="abc123def456789012345678901234567890123456789012345678901234",
            fat_md5="abc123def456789012345678901234",
            fat_sha1="abc123def456789012345678901234567890"
        )

        assert universal.is_fat is True
        assert universal.architecture_count == 2
        assert "x86_64" in universal.architectures
        assert "arm64" in universal.architectures

    def test_universal_single_arch(self):
        """Test MachOUniversal for single-architecture binary."""
        from redb.models.dataclasses import MachOUniversal

        universal = MachOUniversal(
            is_fat=False,
            architecture_count=1,
            architectures=["arm64"],
            architecture_info=[{"arch": "arm64", "offset": 0}]
        )

        assert universal.is_fat is False
        assert universal.architecture_count == 1
        assert universal.fat_hash is None


class TestMachOCertificateDataclass:
    """Tests for MachOCertificate dataclass."""

    def test_certificate_creation(self):
        """Test MachOCertificate dataclass creation."""
        from redb.models.dataclasses import MachOCertificate

        cert = MachOCertificate(
            subject="CN=Apple Development",
            issuer="CN=Apple Worldwide Developer Relations",
            serial_number="123456789",
            not_before="2023-01-01T00:00:00Z",
            not_after="2024-01-01T00:00:00Z",
            thumbprint="abc123def456789012345678901234567890",
            certificate_type="leaf",
            order=0,
            algorithm="sha256WithRSAEncryption",
            common_name="Apple Development",
            organizational_unit="Development",
            organization="Apple Inc."
        )

        assert cert.subject == "CN=Apple Development"
        assert cert.certificate_type == "leaf"
        assert cert.order == 0


class TestMachOCodeDirectoryDataclass:
    """Tests for MachOCodeDirectory dataclass."""

    def test_code_directory_creation(self):
        """Test MachOCodeDirectory dataclass creation."""
        from redb.models.dataclasses import MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF",
            flags=0x10000,
            cd_hash="abc123def456789012345678901234567890123456789012345678901234"
        )

        assert cd.identifier == "com.example.app"
        assert cd.team_id == "ABC123DEF"
        assert cd.flags == 0x10000


class TestMachOCodeSigningInfoDataclass:
    """Tests for MachOCodeSigningInfo dataclass."""

    def test_code_signing_info_unsigned(self):
        """Test MachOCodeSigningInfo for unsigned binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="unsigned",
            has_signature=False,
            number_of_certificates=0
        )

        assert info.signing_type == "unsigned"
        assert info.has_signature is False
        assert info.number_of_certificates == 0

    def test_code_signing_info_signed(self):
        """Test MachOCodeSigningInfo for signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo, MachOCodeDirectory

        cd = MachOCodeDirectory(
            identifier="com.example.app",
            team_id="ABC123DEF"
        )

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="certificate",
            has_signature=True,
            number_of_certificates=3,
            code_directories=[cd],
            entitlements={"com.apple.security.app-sandbox": True},
            has_hardened_runtime=True,
            has_library_validation=True
        )

        assert info.signing_type == "certificate"
        assert info.has_signature is True
        assert info.number_of_certificates == 3
        assert info.has_hardened_runtime is True

    def test_code_signing_info_adhoc(self):
        """Test MachOCodeSigningInfo for ad-hoc signed binary."""
        from redb.models.dataclasses import MachOCodeSigningInfo

        info = MachOCodeSigningInfo(
            _id="abc123def456789012345678901234567890123456789012345678901234",
            signing_type="ad-hoc",
            has_signature=True,
            number_of_certificates=0,
            arch_identifier="x86_64"
        )

        assert info.signing_type == "ad-hoc"
        assert info.number_of_certificates == 0
        assert info.arch_identifier == "x86_64"


class TestMachOEntitlementDataclass:
    """Tests for MachOEntitlement dataclass."""

    def test_entitlement_boolean(self):
        """Test MachOEntitlement with boolean value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.app-sandbox",
            value_type="boolean",
            value_bool=True
        )

        assert ent.key == "com.apple.security.app-sandbox"
        assert ent.value_type == "boolean"
        assert ent.value_bool is True

    def test_entitlement_string(self):
        """Test MachOEntitlement with string value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.developer.team-identifier",
            value_type="string",
            value_string="ABC123DEF"
        )

        assert ent.key == "com.apple.developer.team-identifier"
        assert ent.value_type == "string"
        assert ent.value_string == "ABC123DEF"

    def test_entitlement_array(self):
        """Test MachOEntitlement with array value."""
        from redb.models.dataclasses import MachOEntitlement

        ent = MachOEntitlement(
            key="com.apple.security.application-groups",
            value_type="array",
            value_array=["group.com.example.app", "group.com.example.shared"]
        )

        assert ent.key == "com.apple.security.application-groups"
        assert ent.value_type == "array"
        assert len(ent.value_array) == 2