예제 #1
0
static void test_c64_vice_init(void**)
{
    int count = 0;

    assert_true(PluginHandler_addPlugin(OBJECT_DIR, "c64_vice_plugin"));
    assert_non_null(PluginHandler_getBackendPlugins(&count)[0]);
}
예제 #2
0
static void test_lldb(void** state) {
    (void)state;

    // we only do the LLDB test on Mac for now

#ifdef __APPLE__

    PluginData* pluginData;
    Session* session;
    int count = 0;

    assert_true(PluginHandler_addPlugin(OBJECT_DIR, "lldb_plugin"));
    assert_non_null(pluginData = PluginHandler_getBackendPlugins(&count)[0]);

    session = Session_createLocal((PDBackendPlugin*)pluginData->plugin, OBJECT_DIR "/crashing_native");
    assert_non_null(session);

    // I hate to do this but there is really no good way to deal with this otherwise (at least currently)
    Time_sleepMs(800);

    Session_update(session);
    Session_update(session);

    // Expect that we have a crash here and thus are in PDDebugState_stopException state

    assert_int_equal(session->state, PDDebugState_StopException);

    // Request locals location.

    PDWriter* writer = session->currentWriter;
    PDReader* reader = session->reader;

    PDWrite_event_begin(writer, PDEventType_GetCallstack);
    PDWrite_u8(writer, "dummy", 0);
    PDWrite_event_end(writer);

    Session_update(session);

    PDBinaryWriter_finalize(session->currentWriter);
    PDBinaryReader_initStream(reader, PDBinaryWriter_getData(session->currentWriter), PDBinaryWriter_getSize(session->currentWriter));

    uint32_t event;
    bool foundCallstack = false;

    while ((event = PDRead_get_event(reader)) != 0) {
        switch (event) {
            case PDEventType_SetCallstack:
            {
                foundCallstack = true;
                break;
            }
        }
    }

    assert_true(foundCallstack);

#endif

}
예제 #3
0
void plugin_handler_add_plugin_true(void**) {
    int count = 0;

    assert_true(PluginHandler_addPlugin(OBJECT_DIR, "sourcecode_plugin"));
    assert_true(PluginHandler_addPlugin(OBJECT_DIR, "registers_plugin"));

    PluginData** plugins = PluginHandler_getViewPlugins(&count);

    assert_int_equal(count, 2);

    assert_true(PluginHandler_getPluginData(plugins[0]->plugin) == plugins[0]);
    assert_true(PluginHandler_getPluginData(plugins[1]->plugin) == plugins[1]);

    PluginHandler_unloadAllPlugins();

    plugins = PluginHandler_getViewPlugins(&count);

    assert_int_equal(count, 0);
}
예제 #4
0
void plugin_handler_find_plugin(void**) {
    assert_null(PluginHandler_findPlugin(0, "dummyFile", "dummyName", false));
    assert_null(PluginHandler_findPlugin(0, "dummyFile", "dummyName", true));
    assert_null(PluginHandler_findPlugin(0, "sourcecode_plugin", "Source Code View", false));
    assert_non_null(PluginHandler_findPlugin(0, "sourcecode_plugin", "Source Code View", true));
    assert_non_null(PluginHandler_findPlugin(0, "sourcecode_plugin", "Source Code View", false));

    assert_true(PluginHandler_addPlugin(OBJECT_DIR, "registers_plugin"));

    assert_non_null(PluginHandler_findPlugin(0, "registers_plugin", "Registers View", true));

    assert_non_null(PluginHandler_findPluginByFilename("registers_plugin"));
    assert_null(PluginHandler_findPluginByFilename("plugin_that_isnt_here"));

    PluginHandler_unloadAllPlugins();
}
예제 #5
0
PluginData* PluginHandler_reloadPlugin(PluginData* pluginData) {
    const char* filename = pluginData->filename;
    const char* fullName = string_clone(pluginData->fullFilename);

    printf("removing plugin...\n");

    removePlugin(pluginData);

    printf("adding plugin...%s\n", filename);

    PluginHandler_addPlugin(OBJECT_DIR, filename);

    printf("finding plugin\n");

    printf("trying to find %s\n", fullName);

    PluginData* newPluginData = PluginHandler_findPluginByFilename(fullName);

    printf("found plugin %p\n", newPluginData);

    return newPluginData;
}
예제 #6
0
PluginData* PluginHandler_findPlugin(const char** paths, const char* pluginFile, const char* pluginName, bool load) {
    PluginData* pluginData;

    // TODO: Support paths
    (void)paths;

    // If not found and not !load (that is we will not try to load it)

    if ((pluginData = findPluginAll(pluginFile, pluginName)))
        return pluginData;

    if (!load)
        return 0;

    // TODO: Support base paths

    if (!PluginHandler_addPlugin(OBJECT_DIR, pluginFile))
        return 0;

    if ((pluginData = findPluginAll(pluginFile, pluginName)))
        return pluginData;

    return 0;
}
예제 #7
0
void plugin_handler_add_plugin(void**) {
    assert_false(PluginHandler_addPlugin("dummyPath", "dummy"));
}
예제 #8
0
void plugin_handler_null_plugin(void**) {
    assert_false(PluginHandler_addPlugin("dummyPath", 0));
}