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/fml/message.h"
6#include "gtest/gtest.h"
7
8namespace fml {
9
10struct TestStruct {
11 int a = 12;
12 char b = 'x';
13 float c = 99.0f;
14};
15
16TEST(MessageTest, CanEncodeTriviallyCopyableTypes) {
17 Message message;
18 ASSERT_TRUE(message.Encode(12));
19 ASSERT_TRUE(message.Encode(11.0f));
20 ASSERT_TRUE(message.Encode('a'));
21
22 TestStruct s;
23 ASSERT_TRUE(message.Encode(s));
24 ASSERT_GE(message.GetDataLength(), 0u);
25 ASSERT_GE(message.GetBufferSize(), 0u);
26 ASSERT_EQ(message.GetSizeRead(), 0u);
27}
28
29TEST(MessageTest, CanDecodeTriviallyCopyableTypes) {
30 Message message;
31 ASSERT_TRUE(message.Encode(12));
32 ASSERT_TRUE(message.Encode(11.0f));
33 ASSERT_TRUE(message.Encode('a'));
34 TestStruct s;
35 s.a = 10;
36 s.b = 'y';
37 s.c = 11.1f;
38
39 ASSERT_TRUE(message.Encode(s));
40
41 ASSERT_GE(message.GetDataLength(), 0u);
42 ASSERT_GE(message.GetBufferSize(), 0u);
43 ASSERT_EQ(message.GetSizeRead(), 0u);
44
45 int int1 = 0;
46 ASSERT_TRUE(message.Decode(int1));
47 ASSERT_EQ(12, int1);
48
49 float float1 = 0.0f;
50 ASSERT_TRUE(message.Decode(float1));
51 ASSERT_EQ(float1, 11.0f);
52
53 char char1 = 'x';
54 ASSERT_TRUE(message.Decode(char1));
55 ASSERT_EQ(char1, 'a');
56
57 TestStruct s1;
58 ASSERT_TRUE(message.Decode(s1));
59 ASSERT_EQ(s1.a, 10);
60 ASSERT_EQ(s1.b, 'y');
61 ASSERT_EQ(s1.c, 11.1f);
62
63 ASSERT_NE(message.GetSizeRead(), 0u);
64 ASSERT_EQ(message.GetDataLength(), message.GetSizeRead());
65}
66
67} // namespace fml
68