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

import sys
import lldb

def fuzz_obj(obj):
    obj.GetError()
    obj.GetID()
    obj.GetName()
    obj.GetTypeName()
    obj.GetByteSize()
    obj.IsInScope()
    obj.GetFormat()
    obj.SetFormat(lldb.eFormatBoolean)
    obj.GetValue()
    obj.GetValueType()
    obj.GetValueDidChange()
    obj.GetSummary()
    obj.GetObjectDescription()
    obj.GetLocation()
    obj.SetValueFromCString("my_new_value")
    obj.GetChildAtIndex(1)
    obj.GetChildAtIndex(2, lldb.eNoDynamicValues, False)
    obj.GetIndexOfChildWithName("my_first_child")
    obj.GetChildMemberWithName("my_first_child")
    obj.GetChildMemberWithName("my_first_child", lldb.eNoDynamicValues)
    obj.GetNumChildren()
    obj.GetOpaqueType()
    obj.Dereference()
    obj.TypeIsPointerType()
    stream = lldb.SBStream()
    obj.GetDescription(stream)
    obj.GetExpressionPath(stream)
    obj.GetExpressionPath(stream, True)
    error = lldb.SBError()
    obj.Watch(True, True, False, error)
    obj.WatchPointee(True, False, True, error)
    for child_val in obj:
        print child_val
    error = lldb.SBError()
    obj.GetValueAsSigned (error, 0)
    obj.GetValueAsUnsigned (error, 0)
    obj.GetValueAsSigned(0)
    obj.GetValueAsUnsigned(0)
    obj.GetDynamicValue (lldb.eNoDynamicValues)
    obj.GetStaticValue ()
    obj.IsDynamic()
    invalid_type = lldb.SBType()
    obj.CreateChildAtOffset ("a", 12, invalid_type)
    obj.Cast (invalid_type)
    obj.CreateValueFromExpression ("pt->x", "pt->x")
    obj.CreateValueFromAddress ("x", 0x123, invalid_type)
    invalid_data = lldb.SBData()
    obj.CreateValueFromData ("x", invalid_data, invalid_type)
    obj.GetValueForExpressionPath("[0]")
    obj.AddressOf()
    obj.GetLoadAddress()
    obj.GetAddress()
    obj.GetPointeeData (0, 1)
    obj.GetData ()
    obj.GetTarget()
    obj.GetProcess()
    obj.GetThread()
    obj.GetFrame()
    obj.GetType()
