
* Add Linux unit tests to plugin template Adds an example native unit test to the plugin template for Linux, matching the structure we use for our 1P plugin unit tests. Once these have been added for all platforms+languages, they will be documented on a new plugin development page to explain their use. While ideally we would adjust the engine APIs first to allow for testing the method call handler directly, it's unclear when we will have time for that work, and for a complex plugin most of the testing wouldn't be at that layer anyway, so having the structure in place with the limitations documented is still a significant improvement over having nothing in the template. Part of https://github.com/flutter/flutter/issues/82458 * Add creation test * Add integration tests * Missing newlines * test owner * Typo
77 lines
2.7 KiB
Cheetah
77 lines
2.7 KiB
Cheetah
#include "include/{{projectName}}/{{pluginClassSnakeCase}}.h"
|
|
|
|
#include <flutter_linux/flutter_linux.h>
|
|
#include <gtk/gtk.h>
|
|
#include <sys/utsname.h>
|
|
|
|
#include <cstring>
|
|
|
|
#include "{{pluginClassSnakeCase}}_private.h"
|
|
|
|
#define {{pluginClassCapitalSnakeCase}}(obj) \
|
|
(G_TYPE_CHECK_INSTANCE_CAST((obj), {{pluginClassSnakeCase}}_get_type(), \
|
|
{{pluginClass}}))
|
|
|
|
struct _{{pluginClass}} {
|
|
GObject parent_instance;
|
|
};
|
|
|
|
G_DEFINE_TYPE({{pluginClass}}, {{pluginClassSnakeCase}}, g_object_get_type())
|
|
|
|
// Called when a method call is received from Flutter.
|
|
static void {{pluginClassSnakeCase}}_handle_method_call(
|
|
{{pluginClass}}* self,
|
|
FlMethodCall* method_call) {
|
|
g_autoptr(FlMethodResponse) response = nullptr;
|
|
|
|
const gchar* method = fl_method_call_get_name(method_call);
|
|
|
|
if (strcmp(method, "getPlatformVersion") == 0) {
|
|
response = get_platform_version();
|
|
} else {
|
|
response = FL_METHOD_RESPONSE(fl_method_not_implemented_response_new());
|
|
}
|
|
|
|
fl_method_call_respond(method_call, response, nullptr);
|
|
}
|
|
|
|
FlMethodResponse* get_platform_version() {
|
|
struct utsname uname_data = {};
|
|
uname(&uname_data);
|
|
g_autofree gchar *version = g_strdup_printf("Linux %s", uname_data.version);
|
|
g_autoptr(FlValue) result = fl_value_new_string(version);
|
|
return FL_METHOD_RESPONSE(fl_method_success_response_new(result));
|
|
}
|
|
|
|
static void {{pluginClassSnakeCase}}_dispose(GObject* object) {
|
|
G_OBJECT_CLASS({{pluginClassSnakeCase}}_parent_class)->dispose(object);
|
|
}
|
|
|
|
static void {{pluginClassSnakeCase}}_class_init({{pluginClass}}Class* klass) {
|
|
G_OBJECT_CLASS(klass)->dispose = {{pluginClassSnakeCase}}_dispose;
|
|
}
|
|
|
|
static void {{pluginClassSnakeCase}}_init({{pluginClass}}* self) {}
|
|
|
|
static void method_call_cb(FlMethodChannel* channel, FlMethodCall* method_call,
|
|
gpointer user_data) {
|
|
{{pluginClass}}* plugin = {{pluginClassCapitalSnakeCase}}(user_data);
|
|
{{pluginClassSnakeCase}}_handle_method_call(plugin, method_call);
|
|
}
|
|
|
|
void {{pluginClassSnakeCase}}_register_with_registrar(FlPluginRegistrar* registrar) {
|
|
{{pluginClass}}* plugin = {{pluginClassCapitalSnakeCase}}(
|
|
g_object_new({{pluginClassSnakeCase}}_get_type(), nullptr));
|
|
|
|
g_autoptr(FlStandardMethodCodec) codec = fl_standard_method_codec_new();
|
|
g_autoptr(FlMethodChannel) channel =
|
|
fl_method_channel_new(fl_plugin_registrar_get_messenger(registrar),
|
|
"{{projectName}}",
|
|
FL_METHOD_CODEC(codec));
|
|
fl_method_channel_set_method_call_handler(channel, method_call_cb,
|
|
g_object_ref(plugin),
|
|
g_object_unref);
|
|
|
|
g_object_unref(plugin);
|
|
}
|