|  | /* | 
|  | *  Copyright (c) 2019 The WebRTC project authors. All Rights Reserved. | 
|  | * | 
|  | *  Use of this source code is governed by a BSD-style license | 
|  | *  that can be found in the LICENSE file in the root of the source | 
|  | *  tree. An additional intellectual property rights grant can be found | 
|  | *  in the file PATENTS.  All contributing project authors may | 
|  | *  be found in the AUTHORS file in the root of the source tree. | 
|  | */ | 
|  | #include "rtc_base/experiments/struct_parameters_parser.h" | 
|  |  | 
|  | #include "rtc_base/gunit.h" | 
|  |  | 
|  | namespace webrtc { | 
|  | namespace { | 
|  | struct DummyConfig { | 
|  | bool enabled = false; | 
|  | double factor = 0.5; | 
|  | int retries = 5; | 
|  | unsigned size = 3; | 
|  | bool ping = 0; | 
|  | std::optional<TimeDelta> duration; | 
|  | std::optional<TimeDelta> latency = TimeDelta::Millis(100); | 
|  | std::unique_ptr<StructParametersParser> Parser(); | 
|  | }; | 
|  |  | 
|  | std::unique_ptr<StructParametersParser> DummyConfig::Parser() { | 
|  | // The empty comments ensures that each pair is on a separate line. | 
|  | return StructParametersParser::Create("e", &enabled,   // | 
|  | "f", &factor,    // | 
|  | "r", &retries,   // | 
|  | "s", &size,      // | 
|  | "p", &ping,      // | 
|  | "d", &duration,  // | 
|  | "l", &latency); | 
|  | } | 
|  | }  // namespace | 
|  |  | 
|  | TEST(StructParametersParserTest, ParsesValidParameters) { | 
|  | DummyConfig exp; | 
|  | exp.Parser()->Parse("e:1,f:-1.7,r:2,s:7,p:1,d:8,l:,"); | 
|  | EXPECT_TRUE(exp.enabled); | 
|  | EXPECT_EQ(exp.factor, -1.7); | 
|  | EXPECT_EQ(exp.retries, 2); | 
|  | EXPECT_EQ(exp.size, 7u); | 
|  | EXPECT_EQ(exp.ping, true); | 
|  | EXPECT_EQ(exp.duration.value().ms(), 8); | 
|  | EXPECT_FALSE(exp.latency); | 
|  | } | 
|  |  | 
|  | TEST(StructParametersParserTest, UsesDefaults) { | 
|  | DummyConfig exp; | 
|  | exp.Parser()->Parse(""); | 
|  | EXPECT_FALSE(exp.enabled); | 
|  | EXPECT_EQ(exp.factor, 0.5); | 
|  | EXPECT_EQ(exp.retries, 5); | 
|  | EXPECT_EQ(exp.size, 3u); | 
|  | EXPECT_EQ(exp.ping, false); | 
|  | } | 
|  |  | 
|  | TEST(StructParametersParserTest, EncodeAll) { | 
|  | DummyConfig exp; | 
|  | auto encoded = exp.Parser()->Encode(); | 
|  | // All parameters are encoded. | 
|  | EXPECT_EQ(encoded, "e:false,f:0.5,r:5,s:3,p:false,d:,l:100 ms"); | 
|  | } | 
|  |  | 
|  | }  // namespace webrtc |