bool PluginManagerImpl::check_plugin_input(const app_PluginInputDefinitionRef &def, const grt::ValueRef &value) { if (def.is_instance(app_PluginFileInput::static_class_name())) { if (value.is_valid() && value.type() != StringType) return false; } else if (def.is_instance(app_PluginSelectionInput::static_class_name())) { if (!value.is_valid() || value.type() != ListType) return false; app_PluginSelectionInputRef sdef(app_PluginSelectionInputRef::cast_from(def)); grt::ObjectListRef olist(grt::ObjectListRef::cast_from(value)); for (size_t d= olist.count(), j= 0; j < d; j++) { grt::ObjectRef value(olist.get(j)); bool ok= false; for (size_t c= sdef->objectStructNames().count(), i= 0; i < c; i++) { if (value.is_instance(sdef->objectStructNames()[i])) { ok= true; break; } } if (!ok) return false; } std::string card= *sdef->argumentCardinality(); if (card == "1") { if (olist.count() != 1) return false; } else if (card == "?") { if (olist.count() > 1) return false; } else if (card == "+") { if (olist.count() == 0) return false; } else if (card == "*") ; else { if (olist.count() != 1) return false; } } else if (def.is_instance(app_PluginObjectInput::static_class_name())) { if (!value.is_valid() || value.type() != ObjectType) return false; app_PluginObjectInputRef odef(app_PluginObjectInputRef::cast_from(def)); if (!grt::ObjectRef::cast_from(value).is_instance(odef->objectStructName())) return false; } else return false; return true; }
static void finished(grt::ValueRef result, bool *flag) { *flag = true; } static void finished_with_wait(grt::ValueRef result, bool *flag) { g_usleep(2000000); *flag = true; } static grt::ValueRef normal_test_function() { return grt::IntegerRef(123); } TEST_FUNCTION(1) { // test callbacks grt::ValueRef result; bool finish_called = false; bec::GRTTask::Ref task = GRTTask::create_task("test", _dispatcher, std::bind(normal_test_function)); task->signal_finished()->connect(std::bind(&finished, std::placeholders::_1, &finish_called)); result = _dispatcher->add_task_and_wait(task); ensure("result", result.is_valid() && result.type() == grt::IntegerType); ensure_equals("result value", *grt::IntegerRef::cast_from(result), 123); ensure("finish callback called", finish_called); finish_called = false; task = GRTTask::create_task("test", _dispatcher, std::bind(normal_test_function)); task->signal_finished()->connect(std::bind(&finished_with_wait, std::placeholders::_1, &finish_called));