def run_with_plugins(plugin_list):
    """
    Carry out a test run with the supplied list of plugin instances.
    The plugins are expected to identify the object to run.

    Parameters:
        plugin_list: a list of plugin instances (objects which implement some subset of PluginInterface)
    Returns: exit code as an integer.
        The default behaviour (which may be overridden by plugins) is to return a 0
        exit code if the test run succeeded, and 1 if it failed.
    """
    composite = core.PluginComposite(plugin_list)

    to_run = composite.get_object_to_run()

    test_run = core.TestRun(to_run, composite)
    test_run.run()

    return composite.get_exit_code()