Flutter Engine
The Flutter Engine
fl_binary_codec_test.cc
Go to the documentation of this file.
1// Copyright 2013 The Flutter Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "flutter/shell/platform/linux/public/flutter_linux/fl_binary_codec.h"
6#include "flutter/shell/platform/linux/testing/fl_test.h"
7#include "gtest/gtest.h"
8
9// Encodes a message using a FlBinaryCodec. Return a hex string with the encoded
10// binary output.
11static gchar* encode_message(FlValue* value) {
12 g_autoptr(FlBinaryCodec) codec = fl_binary_codec_new();
13 g_autoptr(GError) error = nullptr;
14 g_autoptr(GBytes) message =
15 fl_message_codec_encode_message(FL_MESSAGE_CODEC(codec), value, &error);
16 EXPECT_NE(message, nullptr);
17 EXPECT_EQ(error, nullptr);
18
20}
21
22// Encodes a message using a FlBinaryCodec. Expect the given error.
23static void encode_message_error(FlValue* value, GQuark domain, int code) {
24 g_autoptr(FlBinaryCodec) codec = fl_binary_codec_new();
25 g_autoptr(GError) error = nullptr;
26 g_autoptr(GBytes) message =
27 fl_message_codec_encode_message(FL_MESSAGE_CODEC(codec), value, &error);
28 EXPECT_EQ(message, nullptr);
29 EXPECT_TRUE(g_error_matches(error, domain, code));
30}
31
32// Decodes a message using a FlBinaryCodec. The binary data is given in the form
33// of a hex string.
34static FlValue* decode_message(const char* hex_string) {
35 g_autoptr(FlBinaryCodec) codec = fl_binary_codec_new();
36 g_autoptr(GBytes) data = hex_string_to_bytes(hex_string);
37 g_autoptr(GError) error = nullptr;
38 g_autoptr(FlValue) value =
39 fl_message_codec_decode_message(FL_MESSAGE_CODEC(codec), data, &error);
40 EXPECT_EQ(error, nullptr);
41 EXPECT_NE(value, nullptr);
42 return fl_value_ref(value);
43}
44
45TEST(FlBinaryCodecTest, EncodeData) {
46 uint8_t data[] = {0x00, 0x01, 0x02, 0xFD, 0xFE, 0xFF};
48 g_autofree gchar* hex_string = encode_message(value);
49 EXPECT_STREQ(hex_string, "000102fdfeff");
50}
51
52TEST(FlBinaryCodecTest, EncodeEmpty) {
53 g_autoptr(FlValue) value = fl_value_new_uint8_list(nullptr, 0);
54 g_autofree gchar* hex_string = encode_message(value);
55 EXPECT_STREQ(hex_string, "");
56}
57
58TEST(FlBinaryCodecTest, EncodeNullptr) {
61}
62
63TEST(FlBinaryCodecTest, EncodeUnknownType) {
64 g_autoptr(FlValue) value = fl_value_new_null();
67}
68
69TEST(FlBinaryCodecTest, DecodeData) {
70 g_autoptr(FlValue) value = decode_message("000102fdfeff");
72 ASSERT_EQ(fl_value_get_length(value), static_cast<size_t>(6));
73 EXPECT_EQ(fl_value_get_uint8_list(value)[0], 0x00);
74 EXPECT_EQ(fl_value_get_uint8_list(value)[1], 0x01);
75 EXPECT_EQ(fl_value_get_uint8_list(value)[2], 0x02);
76 EXPECT_EQ(fl_value_get_uint8_list(value)[3], 0xFD);
77 EXPECT_EQ(fl_value_get_uint8_list(value)[4], 0xFE);
78 EXPECT_EQ(fl_value_get_uint8_list(value)[5], 0xFF);
79}
80
81TEST(FlBinaryCodecTest, DecodeEmpty) {
82 g_autoptr(FlValue) value = decode_message("");
84 ASSERT_EQ(fl_value_get_length(value), static_cast<size_t>(0));
85}
86
87TEST(FlBinaryCodecTest, EncodeDecode) {
88 g_autoptr(FlBinaryCodec) codec = fl_binary_codec_new();
89
90 uint8_t data[] = {0x00, 0x01, 0x02, 0xFD, 0xFE, 0xFF};
91 g_autoptr(FlValue) input = fl_value_new_uint8_list(data, 6);
92
93 g_autoptr(GError) error = nullptr;
94 g_autoptr(GBytes) message =
95 fl_message_codec_encode_message(FL_MESSAGE_CODEC(codec), input, &error);
96 EXPECT_NE(message, nullptr);
97 EXPECT_EQ(error, nullptr);
98
99 g_autoptr(FlValue) output =
100 fl_message_codec_decode_message(FL_MESSAGE_CODEC(codec), message, &error);
101 EXPECT_EQ(error, nullptr);
102 EXPECT_NE(output, nullptr);
103
104 ASSERT_TRUE(fl_value_equal(input, output));
105}
G_MODULE_EXPORT FlBinaryCodec * fl_binary_codec_new()
static FlValue * decode_message(const char *hex_string)
TEST(FlBinaryCodecTest, EncodeData)
static void encode_message_error(FlValue *value, GQuark domain, int code)
static gchar * encode_message(FlValue *value)
G_MODULE_EXPORT FlValue * fl_message_codec_decode_message(FlMessageCodec *self, GBytes *message, GError **error)
G_MODULE_EXPORT GBytes * fl_message_codec_encode_message(FlMessageCodec *self, FlValue *message, GError **error)
@ FL_MESSAGE_CODEC_ERROR_UNSUPPORTED_TYPE
#define FL_MESSAGE_CODEC_ERROR
const uint8_t uint32_t uint32_t GError ** error
uint8_t value
GBytes * hex_string_to_bytes(const gchar *hex_string)
Definition: fl_test.cc:43
gchar * bytes_to_hex_string(GBytes *bytes)
Definition: fl_test.cc:52
G_MODULE_EXPORT FlValue * fl_value_ref(FlValue *self)
Definition: fl_value.cc:394
G_MODULE_EXPORT FlValueType fl_value_get_type(FlValue *self)
Definition: fl_value.cc:466
G_MODULE_EXPORT FlValue * fl_value_new_null()
Definition: fl_value.cc:251
G_MODULE_EXPORT const uint8_t * fl_value_get_uint8_list(FlValue *self)
Definition: fl_value.cc:689
G_MODULE_EXPORT FlValue * fl_value_new_uint8_list(const uint8_t *data, size_t data_length)
Definition: fl_value.cc:292
G_MODULE_EXPORT bool fl_value_equal(FlValue *a, FlValue *b)
Definition: fl_value.cc:471
G_MODULE_EXPORT size_t fl_value_get_length(FlValue *self)
Definition: fl_value.cc:724
typedefG_BEGIN_DECLS struct _FlValue FlValue
Definition: fl_value.h:42
@ FL_VALUE_TYPE_UINT8_LIST
Definition: fl_value.h:70
Win32Message message
std::shared_ptr< const fml::Mapping > data
Definition: texture_gles.cc:63
#define EXPECT_TRUE(handle)
Definition: unit_test.h:678