Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(41)

Unified Diff: third_party/mojo/src/mojo/public/cpp/bindings/tests/struct_unittest.cc

Issue 954643002: Update mojo sdk to rev 3d23dae011859a2aae49f1d1adde705c8e85d819 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: use run_renderer_in_process() Created 5 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/mojo/src/mojo/public/cpp/bindings/tests/struct_unittest.cc
diff --git a/third_party/mojo/src/mojo/public/cpp/bindings/tests/struct_unittest.cc b/third_party/mojo/src/mojo/public/cpp/bindings/tests/struct_unittest.cc
index 52d1313a489f3ce660df677aa1b08667df8e5e4a..7f5a376cc63ae5513b0fd764fd5953687a952361 100644
--- a/third_party/mojo/src/mojo/public/cpp/bindings/tests/struct_unittest.cc
+++ b/third_party/mojo/src/mojo/public/cpp/bindings/tests/struct_unittest.cc
@@ -2,8 +2,11 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include <string.h>
+
#include "mojo/public/cpp/bindings/lib/fixed_buffer.h"
#include "mojo/public/cpp/environment/environment.h"
+#include "mojo/public/cpp/system/message_pipe.h"
#include "mojo/public/interfaces/bindings/tests/test_structs.mojom.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -27,6 +30,48 @@ void CheckRect(const Rect& rect, int32_t factor = 1) {
EXPECT_EQ(20 * factor, rect.height);
}
+MultiVersionStructPtr MakeMultiVersionStruct() {
+ MultiVersionStructPtr output(MultiVersionStruct::New());
+ output->f_int32 = 123;
+ output->f_rect = MakeRect(5);
+ output->f_string = "hello";
+ output->f_array = Array<int8_t>(3);
+ output->f_array[0] = 10;
+ output->f_array[1] = 9;
+ output->f_array[2] = 8;
+ MessagePipe pipe;
+ output->f_message_pipe = pipe.handle0.Pass();
+ output->f_int16 = 42;
+
+ return output.Pass();
+}
+
+template <typename U, typename T>
+U SerializeAndDeserialize(T input) {
+ typedef typename mojo::internal::WrapperTraits<T>::DataType InputDataType;
+ typedef typename mojo::internal::WrapperTraits<U>::DataType OutputDataType;
+
+ size_t size = GetSerializedSize_(input);
+ mojo::internal::FixedBuffer buf(size + 32);
+ InputDataType data;
+ Serialize_(input.Pass(), &buf, &data);
+
+ std::vector<Handle> handles;
+ data->EncodePointersAndHandles(&handles);
+
+ // Set the subsequent area to a special value, so that we can find out if we
+ // mistakenly access the area.
+ void* subsequent_area = buf.Allocate(32);
+ memset(subsequent_area, 0xAA, 32);
+
+ OutputDataType output_data = reinterpret_cast<OutputDataType>(data);
+ output_data->DecodePointersAndHandles(&handles);
+
+ U output;
+ Deserialize_(output_data, &output);
+ return output.Pass();
+}
+
class StructTest : public testing::Test {
public:
~StructTest() override {}
@@ -197,5 +242,182 @@ TEST_F(StructTest, Serialization_NullArrayPointers) {
EXPECT_TRUE(region2->rects.is_null());
}
+// Tests deserializing structs as a newer version.
+TEST_F(StructTest, Versioning_OldToNew) {
+ {
+ MultiVersionStructV0Ptr input(MultiVersionStructV0::New());
+ input->f_int32 = 123;
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New());
+ expected_output->f_int32 = 123;
+
+ MultiVersionStructPtr output =
+ SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructV1Ptr input(MultiVersionStructV1::New());
+ input->f_int32 = 123;
+ input->f_rect = MakeRect(5);
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+
+ MultiVersionStructPtr output =
+ SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructV3Ptr input(MultiVersionStructV3::New());
+ input->f_int32 = 123;
+ input->f_rect = MakeRect(5);
+ input->f_string = "hello";
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+ expected_output->f_string = "hello";
+
+ MultiVersionStructPtr output =
+ SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructV5Ptr input(MultiVersionStructV5::New());
+ input->f_int32 = 123;
+ input->f_rect = MakeRect(5);
+ input->f_string = "hello";
+ input->f_array = Array<int8_t>(3);
+ input->f_array[0] = 10;
+ input->f_array[1] = 9;
+ input->f_array[2] = 8;
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+ expected_output->f_string = "hello";
+ expected_output->f_array = Array<int8_t>(3);
+ expected_output->f_array[0] = 10;
+ expected_output->f_array[1] = 9;
+ expected_output->f_array[2] = 8;
+
+ MultiVersionStructPtr output =
+ SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructV7Ptr input(MultiVersionStructV7::New());
+ input->f_int32 = 123;
+ input->f_rect = MakeRect(5);
+ input->f_string = "hello";
+ input->f_array = Array<int8_t>(3);
+ input->f_array[0] = 10;
+ input->f_array[1] = 9;
+ input->f_array[2] = 8;
+ MessagePipe pipe;
+ input->f_message_pipe = pipe.handle0.Pass();
+
+ MultiVersionStructPtr expected_output(MultiVersionStruct::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+ expected_output->f_string = "hello";
+ expected_output->f_array = Array<int8_t>(3);
+ expected_output->f_array[0] = 10;
+ expected_output->f_array[1] = 9;
+ expected_output->f_array[2] = 8;
+ // Save the raw handle value separately so that we can compare later.
+ MojoHandle expected_handle = input->f_message_pipe.get().value();
+
+ MultiVersionStructPtr output =
+ SerializeAndDeserialize<MultiVersionStructPtr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_EQ(expected_handle, output->f_message_pipe.get().value());
+ output->f_message_pipe.reset();
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+}
+
+// Tests deserializing structs as an older version.
+TEST_F(StructTest, Versioning_NewToOld) {
+ {
+ MultiVersionStructPtr input = MakeMultiVersionStruct();
+ MultiVersionStructV7Ptr expected_output(MultiVersionStructV7::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+ expected_output->f_string = "hello";
+ expected_output->f_array = Array<int8_t>(3);
+ expected_output->f_array[0] = 10;
+ expected_output->f_array[1] = 9;
+ expected_output->f_array[2] = 8;
+ // Save the raw handle value separately so that we can compare later.
+ MojoHandle expected_handle = input->f_message_pipe.get().value();
+
+ MultiVersionStructV7Ptr output =
+ SerializeAndDeserialize<MultiVersionStructV7Ptr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_EQ(expected_handle, output->f_message_pipe.get().value());
+ output->f_message_pipe.reset();
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructPtr input = MakeMultiVersionStruct();
+ MultiVersionStructV5Ptr expected_output(MultiVersionStructV5::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+ expected_output->f_string = "hello";
+ expected_output->f_array = Array<int8_t>(3);
+ expected_output->f_array[0] = 10;
+ expected_output->f_array[1] = 9;
+ expected_output->f_array[2] = 8;
+
+ MultiVersionStructV5Ptr output =
+ SerializeAndDeserialize<MultiVersionStructV5Ptr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructPtr input = MakeMultiVersionStruct();
+ MultiVersionStructV3Ptr expected_output(MultiVersionStructV3::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+ expected_output->f_string = "hello";
+
+ MultiVersionStructV3Ptr output =
+ SerializeAndDeserialize<MultiVersionStructV3Ptr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructPtr input = MakeMultiVersionStruct();
+ MultiVersionStructV1Ptr expected_output(MultiVersionStructV1::New());
+ expected_output->f_int32 = 123;
+ expected_output->f_rect = MakeRect(5);
+
+ MultiVersionStructV1Ptr output =
+ SerializeAndDeserialize<MultiVersionStructV1Ptr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+
+ {
+ MultiVersionStructPtr input = MakeMultiVersionStruct();
+ MultiVersionStructV0Ptr expected_output(MultiVersionStructV0::New());
+ expected_output->f_int32 = 123;
+
+ MultiVersionStructV0Ptr output =
+ SerializeAndDeserialize<MultiVersionStructV0Ptr>(input.Pass());
+ EXPECT_TRUE(output);
+ EXPECT_TRUE(output->Equals(*expected_output));
+ }
+}
+
} // namespace test
} // namespace mojo

Powered by Google App Engine
This is Rietveld 408576698