/* * 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; absl::optional duration; absl::optional latency = TimeDelta::Millis(100); std::unique_ptr Parser(); }; std::unique_ptr 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