| // Protocol Buffers - Google's data interchange format |
| // Copyright 2024 Google LLC. All rights reserved. |
| // |
| // Use of this source code is governed by a BSD-style |
| // license that can be found in the LICENSE file or at |
| // https://developers.google.com/open-source/licenses/bsd |
| |
| use googletest::prelude::*; |
| use map_unittest_rust_proto::TestMapWithMessages; |
| use protobuf_upb::proto; |
| use unittest_rust_proto::{ |
| test_all_types::NestedEnum as NestedEnumProto2, |
| test_all_types::NestedMessage as NestedMessageProto2, TestAllTypes as TestAllTypesProto2, |
| }; |
| |
| #[gtest] |
| fn test_debug_string() { |
| let mut msg = proto!(TestAllTypesProto2 { |
| optional_int32: 42, |
| optional_string: "Hello World", |
| optional_nested_enum: NestedEnumProto2::Bar, |
| oneof_uint32: 452235, |
| optional_nested_message: proto!(NestedMessageProto2 { bb: 100 }), |
| }); |
| let mut repeated_string = msg.repeated_string_mut(); |
| repeated_string.push("Hello World"); |
| repeated_string.push("Hello World"); |
| repeated_string.push("Hello World"); |
| |
| let mut msg_map = TestMapWithMessages::new(); |
| println!("EMPTY MSG: {:?}", msg_map); // Make sure that we can print an empty message. |
| msg_map.map_string_all_types_mut().insert("hello", msg.as_view()); |
| msg_map.map_string_all_types_mut().insert("fizz", msg.as_view()); |
| msg_map.map_string_all_types_mut().insert("boo", msg.as_view()); |
| |
| println!("{:?}", msg_map); |
| println!("{:?}", msg_map.as_view()); // Make sure that we can print as_view |
| println!("{:?}", msg_map.as_mut()); // Make sure that we can print as_mut |
| let golden = r#"12 { |
| key: "hello" |
| value { |
| 1: 42 |
| 14: "Hello World" |
| 18 { |
| 1: 100 |
| } |
| 21: 2 |
| 44: "Hello World" |
| 44: "Hello World" |
| 44: "Hello World" |
| 111: 452235 |
| } |
| } |
| 12 { |
| key: "fizz" |
| value { |
| 1: 42 |
| 14: "Hello World" |
| 18 { |
| 1: 100 |
| } |
| 21: 2 |
| 44: "Hello World" |
| 44: "Hello World" |
| 44: "Hello World" |
| 111: 452235 |
| } |
| } |
| 12 { |
| key: "boo" |
| value { |
| 1: 42 |
| 14: "Hello World" |
| 18 { |
| 1: 100 |
| } |
| 21: 2 |
| 44: "Hello World" |
| 44: "Hello World" |
| 44: "Hello World" |
| 111: 452235 |
| } |
| } |
| "#; |
| // C strings are null terminated while Rust strings are not. |
| let null_terminated_str = format!("{}\0", golden); |
| assert_that!(format!("{:?}", msg_map), eq(null_terminated_str.as_str())); |
| } |