def test_properties():
    prop = OSC.Properties()
    prop.add_file('myprops.xml')
    prettyprint(prop.get_element())
    prop.add_property('mything', '2')
    prettyprint(prop.get_element())
    prop.add_property('theotherthing', 'true')
def test_controller():
    prop = OSC.Properties()
    prop.add_property('mything', '2')
    prop.add_property('theotherthing', 'true')

    cnt = OSC.Controller('mycontroler', prop)
    prettyprint(cnt.get_element())
def test_assign_controller_action():
    prop = OSC.Properties()
    prop.add_property('mything','2')
    prop.add_property('theotherthing','true')

    cnt = OSC.Controller('mycontroller',prop)
    
    
    aca = OSC.AssignControllerAction(cnt)
    prettyprint(aca.get_element())
def test_trafficdefinition():
    prop = OSC.Properties()
    prop.add_file('mycontrollerfile.xml')
    controller = OSC.Controller('mycontroller', prop)

    traffic = OSC.TrafficDefinition('my traffic')
    traffic.add_controller(controller, 0.5)
    traffic.add_controller(
        OSC.CatalogReference('ControllerCatalog', 'my controller'), 0.5)

    traffic.add_vehicle(OSC.VehicleCategory.car, 0.9)
    traffic.add_vehicle(OSC.VehicleCategory.bicycle, 0.1)

    prettyprint(traffic.get_element())
def test_trafficsinkaction():
    
    prop = OSC.Properties()
    prop.add_file('mycontrollerfile.xml')
    controller = OSC.Controller('mycontroller',prop)

    traffic = OSC.TrafficDefinition('my traffic')
    traffic.add_controller(controller,0.5)
    traffic.add_controller(OSC.CatalogReference('ControllerCatalog','my controller'),0.5)

    traffic.add_vehicle(OSC.VehicleCategory.car,0.9)
    traffic.add_vehicle(OSC.VehicleCategory.bicycle,0.1)

    sink_action = OSC.TrafficSinkAction(10,10,OSC.WorldPosition(),traffic)
    prettyprint(sink_action.get_element())
def test_controller_in_Entities():
    bb = OSC.BoundingBox(2, 5, 1.5, 1.5, 0, 0.2)
    fa = OSC.Axle(2, 2, 2, 1, 1)
    ba = OSC.Axle(1, 1, 2, 1, 1)
    veh = OSC.Vehicle('mycar', OSC.VehicleCategory.car, bb, fa, ba, 150, 10,
                      10)

    prop = OSC.Properties()
    prop.add_property('mything', '2')
    prop.add_property('theotherthing', 'true')

    cnt = OSC.Controller('mycontroler', prop)

    entities = OSC.Entities()
    entities.add_scenario_object('Ego', veh)
    entities.add_scenario_object('Target_1', veh, cnt)
    entities.add_entity_bytype('Target_2', OSC.ObjectType.vehicle)
    entities.add_entity_byref('Target_3', 'something')
    prettyprint(entities.get_element())

    prettyprint(veh.get_element())
white_veh.add_property('model_id', '0')

bb = xosc.BoundingBox(1.8, 4.5, 1.5, 1.3, 0, 0.8)
fa = xosc.Axle(0.523598775598, 0.8, 1.68, 2.98, 0.4)
ba = xosc.Axle(0.523598775598, 0.8, 1.68, 0, 0.4)
red_veh = xosc.Vehicle('car_red', xosc.VehicleCategory.car, bb, fa, ba, 69, 10,
                       10)

red_veh.add_property_file('../models/car_red.osgb')
red_veh.add_property('model_id', '2')

## create entities

egoname = 'Ego'
targetname = 'Target'
prop = xosc.Properties()
prop.add_property(name="esminiController", value="SumoController")
prop.add_file("../sumo_inputs/e6mini.sumocfg")
cont = xosc.Controller('mycontroler', prop)
cont.dump_to_catalog('Controller.xosx', 'Controller', 'controllers',
                     'Mandolin')

entities = xosc.Entities()
entities.add_scenario_object(egoname, white_veh)
entities.add_scenario_object(targetname, red_veh, cont)

### create init

init = xosc.Init()
step_time = xosc.TransitionDynamics(xosc.DynamicsShapes.step,
                                    xosc.DynamicsDimension.time, 1)