|
34 | 34 | #include <vector>
|
35 | 35 |
|
36 | 36 | #include "absl/log/log.h"
|
| 37 | +#include "absl/strings/str_cat.h" |
37 | 38 | #include "absl/strings/string_view.h"
|
38 | 39 | #include "testing/gunit.h"
|
39 | 40 |
|
@@ -241,5 +242,94 @@ TEST(InnerSegment, InnerSegmentIteratorInvalid) {
|
241 | 242 | }
|
242 | 243 | }
|
243 | 244 |
|
| 245 | +TEST(InnerSegments, GetSuffixKeyAndValue) { |
| 246 | + auto suffix_key_default = [](const InnerSegments &inner_segments) { |
| 247 | + return inner_segments.GetSuffixKeyAndValue().first; |
| 248 | + }; |
| 249 | + |
| 250 | + auto suffix_value_default = [](const InnerSegments &inner_segments) { |
| 251 | + return inner_segments.GetSuffixKeyAndValue().second; |
| 252 | + }; |
| 253 | + |
| 254 | + auto suffix_key = [](const InnerSegments &inner_segments, int size) { |
| 255 | + return inner_segments.GetSuffixKeyAndValue(size).first; |
| 256 | + }; |
| 257 | + |
| 258 | + auto suffix_value = [](const InnerSegments &inner_segments, int size) { |
| 259 | + return inner_segments.GetSuffixKeyAndValue(size).second; |
| 260 | + }; |
| 261 | + |
| 262 | + { |
| 263 | + std::string all_key, all_value; |
| 264 | + |
| 265 | + converter::InnerSegmentBoundaryBuilder builder; |
| 266 | + |
| 267 | + auto add_segment = [&](absl::string_view key, absl::string_view value) { |
| 268 | + builder.Add(key.size(), value.size(), key.size(), value.size()); |
| 269 | + absl::StrAppend(&all_key, key); |
| 270 | + absl::StrAppend(&all_value, value); |
| 271 | + }; |
| 272 | + |
| 273 | + for (int i = 0; i < 3; ++i) { |
| 274 | + add_segment(absl::StrCat("k", i), absl::StrCat("v", i)); |
| 275 | + } |
| 276 | + |
| 277 | + InnerSegmentBoundary inner_segment_boundary = |
| 278 | + builder.Build(all_key, all_value); |
| 279 | + |
| 280 | + const InnerSegments inner_segments(all_key, all_value, |
| 281 | + inner_segment_boundary); |
| 282 | + |
| 283 | + EXPECT_EQ(inner_segments.size(), 3); |
| 284 | + EXPECT_EQ(suffix_key_default(inner_segments), "k0k1k2"); |
| 285 | + EXPECT_EQ(suffix_value_default(inner_segments), "v0v1v2"); |
| 286 | + EXPECT_EQ(suffix_key(inner_segments, -1), "k0k1k2"); |
| 287 | + EXPECT_EQ(suffix_value(inner_segments, -1), "v0v1v2"); |
| 288 | + EXPECT_EQ(suffix_key(inner_segments, 10), "k0k1k2"); |
| 289 | + EXPECT_EQ(suffix_value(inner_segments, 10), "v0v1v2"); |
| 290 | + EXPECT_EQ(suffix_key(inner_segments, 0), ""); |
| 291 | + EXPECT_EQ(suffix_value(inner_segments, 0), ""); |
| 292 | + EXPECT_EQ(suffix_key(inner_segments, 1), "k2"); |
| 293 | + EXPECT_EQ(suffix_value(inner_segments, 1), "v2"); |
| 294 | + EXPECT_EQ(suffix_key(inner_segments, 2), "k1k2"); |
| 295 | + EXPECT_EQ(suffix_value(inner_segments, 2), "v1v2"); |
| 296 | + EXPECT_EQ(suffix_key(inner_segments, 3), "k0k1k2"); |
| 297 | + EXPECT_EQ(suffix_value(inner_segments, 3), "v0v1v2"); |
| 298 | + EXPECT_EQ(suffix_key(inner_segments, 4), "k0k1k2"); |
| 299 | + EXPECT_EQ(suffix_value(inner_segments, 4), "v0v1v2"); |
| 300 | + } |
| 301 | + |
| 302 | + { |
| 303 | + const InnerSegments inner_segments("", "", {}); |
| 304 | + |
| 305 | + EXPECT_EQ(inner_segments.size(), 0); |
| 306 | + EXPECT_EQ(suffix_key_default(inner_segments), ""); |
| 307 | + EXPECT_EQ(suffix_value_default(inner_segments), ""); |
| 308 | + EXPECT_EQ(suffix_key(inner_segments, -1), ""); |
| 309 | + EXPECT_EQ(suffix_value(inner_segments, -1), ""); |
| 310 | + EXPECT_EQ(suffix_key(inner_segments, 10), ""); |
| 311 | + EXPECT_EQ(suffix_value(inner_segments, 10), ""); |
| 312 | + EXPECT_EQ(suffix_key(inner_segments, 0), ""); |
| 313 | + EXPECT_EQ(suffix_value(inner_segments, 0), ""); |
| 314 | + EXPECT_EQ(suffix_key(inner_segments, 2), ""); |
| 315 | + EXPECT_EQ(suffix_value(inner_segments, 2), ""); |
| 316 | + EXPECT_EQ(suffix_key(inner_segments, 1), ""); |
| 317 | + EXPECT_EQ(suffix_value(inner_segments, 1), ""); |
| 318 | + } |
| 319 | + |
| 320 | + { |
| 321 | + const InnerSegments inner_segments("key", "value", {}); |
| 322 | + EXPECT_EQ(inner_segments.size(), 1); |
| 323 | + EXPECT_EQ(suffix_key_default(inner_segments), "key"); |
| 324 | + EXPECT_EQ(suffix_value_default(inner_segments), "value"); |
| 325 | + EXPECT_EQ(suffix_key(inner_segments, -1), "key"); |
| 326 | + EXPECT_EQ(suffix_value(inner_segments, -1), "value"); |
| 327 | + EXPECT_EQ(suffix_key(inner_segments, 1), "key"); |
| 328 | + EXPECT_EQ(suffix_value(inner_segments, 1), "value"); |
| 329 | + EXPECT_EQ(suffix_key(inner_segments, 2), "key"); |
| 330 | + EXPECT_EQ(suffix_value(inner_segments, 2), "value"); |
| 331 | + } |
| 332 | +} |
| 333 | + |
244 | 334 | } // namespace converter
|
245 | 335 | } // namespace mozc
|
0 commit comments