xref: /aosp_15_r20/external/emboss/compiler/back_end/cpp/testcode/read_log_file_status_test.cc (revision 99e0aae7469b87d12f0ad23e61142c2d74c1ef70)
1 // Copyright 2019 Google LLC
2 //
3 // Licensed under the Apache License, Version 2.0 (the "License");
4 // you may not use this file except in compliance with the License.
5 // You may obtain a copy of the License at
6 //
7 //     https://www.apache.org/licenses/LICENSE-2.0
8 //
9 // Unless required by applicable law or agreed to in writing, software
10 // distributed under the License is distributed on an "AS IS" BASIS,
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 // See the License for the specific language governing permissions and
13 // limitations under the License.
14 
15 // Tests for the generated View class for a LogFileStatus from
16 // span_se_log_file_status.emb.
17 #include <stdint.h>
18 
19 #include <vector>
20 
21 #include "gtest/gtest.h"
22 #include "testdata/golden/span_se_log_file_status.emb.h"
23 
24 namespace emboss {
25 namespace test {
26 namespace {
27 
28 // A simple, static LogFileStatus.  There are technically no invalid
29 // LogFileStatuses as long as there are at least 24 bytes to read.
30 static const ::std::uint8_t kLogFileStatus[24] = {
31     0x01, 0x02, 0x03, 0x04,  // 0:4    UInt        file_state
32     'A',  'B',  'C',  'D',   // 4:16   UInt:8[12]  file_name
33     'E',  'F',  'G',  'H',   // 4:16   UInt:8[12]  file_name
34     'I',  'J',  'K',  'L',   // 4:16   UInt:8[12]  file_name
35     0x05, 0x06, 0x07, 0x08,  // 16:20  UInt        file_size_kb
36     0x09, 0x0a, 0x0b, 0x0c,  // 20:24  UInt        media
37 };
38 
39 // LogFileStatusView constructor compiles and runs without crashing.
TEST(LogFileStatusView,ConstructorRuns)40 TEST(LogFileStatusView, ConstructorRuns) {
41   LogFileStatusView(kLogFileStatus, sizeof kLogFileStatus);
42 }
43 
44 // LogFileStatusView::SizeInBytes() returns the expected value.
TEST(LogFileStatusView,SizeIsCorrect)45 TEST(LogFileStatusView, SizeIsCorrect) {
46   EXPECT_EQ(24U, LogFileStatusView::SizeInBytes());
47 }
48 
49 // LogFileStatusView's atomic field accessors work.
TEST(LogFileStatusView,AtomicFieldAccessorsWork)50 TEST(LogFileStatusView, AtomicFieldAccessorsWork) {
51   auto view = LogFileStatusView(kLogFileStatus, sizeof kLogFileStatus);
52   EXPECT_EQ(0x04030201U, view.file_state().Read());
53   EXPECT_EQ(0x08070605U, view.file_size_kb().Read());
54   EXPECT_EQ(0x0c0b0a09U, view.media().Read());
55 }
56 
57 // LogFileStatusView's array field accessor works.
TEST(LogFileStatusView,ArrayFieldAccessor)58 TEST(LogFileStatusView, ArrayFieldAccessor) {
59   auto view = LogFileStatusView(kLogFileStatus, sizeof kLogFileStatus);
60   EXPECT_EQ('A', view.file_name()[0].Read());
61   EXPECT_EQ('L', view.file_name()[11].Read());
62 }
63 
64 // The "Ok()" method works.
TEST(LogFileStatusView,Ok)65 TEST(LogFileStatusView, Ok) {
66   auto view = LogFileStatusView(kLogFileStatus, sizeof kLogFileStatus);
67   EXPECT_TRUE(view.Ok());
68   view = LogFileStatusView(kLogFileStatus, sizeof kLogFileStatus - 1);
69   EXPECT_FALSE(view.Ok());
70   ::std::vector</**/ ::std::uint8_t> bigger_than_necessary(
71       sizeof kLogFileStatus + 1);
72   view = LogFileStatusView(&bigger_than_necessary[0],
73                            bigger_than_necessary.size());
74   EXPECT_TRUE(view.Ok());
75 }
76 
TEST(LogFileStatusView,Writing)77 TEST(LogFileStatusView, Writing) {
78   ::std::uint8_t buffer[sizeof kLogFileStatus] = {0};
79   auto writer = LogFileStatusWriter(buffer, sizeof buffer);
80   writer.file_state().Write(0x04030201);
81   writer.file_size_kb().Write(0x08070605);
82   writer.media().Write(0x0c0b0a09);
83   // TODO(bolms): Add a Count method, that returns the element count instead of
84   // the byte count.  (Not a problem here, since file_name's elements are each
85   // one byte anyway.)
86   for (::std::size_t i = 0; i < writer.file_name().SizeInBytes(); ++i) {
87     writer.file_name()[i].Write('A' + i);
88   }
89   EXPECT_EQ(::std::vector</**/ ::std::uint8_t>(
90                 kLogFileStatus, kLogFileStatus + sizeof kLogFileStatus),
91             ::std::vector</**/ ::std::uint8_t>(buffer, buffer + sizeof buffer));
92 }
93 
94 }  // namespace
95 }  // namespace test
96 }  // namespace emboss
97