"""
Fuzz tests an object after the default construction to make sure it does not crash lldb.
"""

import sys
import lldb

def fuzz_obj(obj):
    broadcaster = obj.GetBroadcaster()
    # Do fuzz testing on the broadcaster obj, it should not crash lldb.
    import sb_broadcaster
    sb_broadcaster.fuzz_obj(broadcaster)
    obj.AdoptFileDesriptor(0, False)
    obj.AdoptFileDesriptor(1, False)
    obj.AdoptFileDesriptor(2, False)
    obj.Connect("file:/tmp/myfile")
    obj.Connect(None)
    obj.Disconnect()
    obj.IsConnected()
    obj.GetCloseOnEOF()
    obj.SetCloseOnEOF(True)
    obj.SetCloseOnEOF(False)
    #obj.Write(None, sys.maxint, None)
    #obj.Read(None, sys.maxint, 0xffffffff, None)
    obj.ReadThreadStart()
    obj.ReadThreadStop()
    obj.ReadThreadIsRunning()
    obj.SetReadThreadBytesReceivedCallback(None, None)
