1 Star 0 Fork 62

greatitman/webrtc-src

forked from egege/webrtc-src 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
api
adaptation
audio
audio_codecs
call
crypto
g3doc
metronome
neteq
numerics
rtc_event_log
stats
task_queue
test
transport
units
video
video_codecs
voip
BUILD.gn
DEPS
OWNERS
README.md
array_view.h
array_view_unittest.cc
async_dns_resolver.h
async_resolver_factory.h
audio_options.cc
audio_options.h
candidate.cc
candidate.h
create_peerconnection_factory.cc
create_peerconnection_factory.h
crypto_params.h
data_channel_interface.cc
data_channel_interface.h
dtls_transport_interface.cc
dtls_transport_interface.h
dtmf_sender_interface.h
fec_controller.h
fec_controller_override.h
field_trials.cc
field_trials.h
field_trials_registry.cc
field_trials_registry.h
field_trials_unittest.cc
field_trials_view.h
frame_transformer_factory.cc
frame_transformer_factory.h
frame_transformer_interface.h
function_view.h
function_view_unittest.cc
ice_transport_factory.cc
ice_transport_factory.h
ice_transport_interface.h
jsep.cc
jsep.h
jsep_ice_candidate.cc
jsep_ice_candidate.h
jsep_session_description.h
legacy_stats_types.cc
legacy_stats_types.h
location.h
make_ref_counted.h
media_stream_interface.cc
media_stream_interface.h
media_stream_track.h
media_types.cc
media_types.h
network_state_predictor.h
notifier.h
packet_socket_factory.h
peer_connection_interface.cc
peer_connection_interface.h
priority.h
ref_counted_base.h
rtc_error.cc
rtc_error.h
rtc_error_unittest.cc
rtc_event_log_output.h
rtc_event_log_output_file.cc
rtc_event_log_output_file.h
rtc_event_log_output_file_unittest.cc
rtp_headers.cc
rtp_headers.h
rtp_packet_info.cc
rtp_packet_info.h
rtp_packet_info_unittest.cc
rtp_packet_infos.h
rtp_packet_infos_unittest.cc
rtp_parameters.cc
rtp_parameters.h
rtp_parameters_unittest.cc
rtp_receiver_interface.cc
rtp_receiver_interface.h
rtp_sender_interface.cc
rtp_sender_interface.h
rtp_transceiver_direction.h
rtp_transceiver_interface.cc
rtp_transceiver_interface.h
scoped_refptr.h
scoped_refptr_unittest.cc
sctp_transport_interface.cc
sctp_transport_interface.h
sequence_checker.h
sequence_checker_unittest.cc
set_local_description_observer_interface.h
set_remote_description_observer_interface.h
turn_customizer.h
uma_metrics.h
video_track_source_constraints.h
video_track_source_proxy_factory.h
webrtc_key_value_config.h
wrapping_async_dns_resolver.cc
wrapping_async_dns_resolver.h
audio
build_overrides
call
common_audio
common_video
data
docs
examples
experiments
g3doc
infra
logging
media
modules
net/dcsctp
p2p
pc
resources
rtc_base
rtc_tools
sdk
stats
system_wrappers
test
tools_webrtc
video
.clang-format
.git-blame-ignore-revs
.gitignore
.gn
.mailmap
.style.yapf
.vpython
.vpython3
AUTHORS
BUILD.gn
CODE_OF_CONDUCT.md
DEPS
DIR_METADATA
ENG_REVIEW_OWNERS
LICENSE
OWNERS
OWNERS_INFRA
PATENTS
PRESUBMIT.py
README.chromium
README.md
WATCHLISTS
codereview.settings
license_template.txt
native-api.md
presubmit_test.py
presubmit_test_mocks.py
pylintrc
webrtc.gni
webrtc_lib_link_test.cc
whitespace.txt
克隆/下载
rtc_error_unittest.cc 7.08 KB
一键复制 编辑 原始数据 按行查看 历史
/*
* Copyright 2017 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 "api/rtc_error.h"
#include <utility>
#include "test/gtest.h"
namespace webrtc {
namespace {
constexpr int kDefaultMoveOnlyIntValue = 0xbadf00d;
// Class that has no copy constructor, ensuring that RTCErrorOr can
struct MoveOnlyInt {
MoveOnlyInt() {}
explicit MoveOnlyInt(int value) : value(value) {}
MoveOnlyInt(const MoveOnlyInt& other) = delete;
MoveOnlyInt& operator=(const MoveOnlyInt& other) = delete;
MoveOnlyInt(MoveOnlyInt&& other) : value(other.value) {}
MoveOnlyInt& operator=(MoveOnlyInt&& other) {
value = other.value;
return *this;
}
int value = kDefaultMoveOnlyIntValue;
};
// Same as above. Used to test conversion from RTCErrorOr<A> to RTCErrorOr<B>
// when A can be converted to B.
struct MoveOnlyInt2 {
MoveOnlyInt2() {}
explicit MoveOnlyInt2(int value) : value(value) {}
MoveOnlyInt2(const MoveOnlyInt2& other) = delete;
MoveOnlyInt2& operator=(const MoveOnlyInt2& other) = delete;
MoveOnlyInt2(MoveOnlyInt2&& other) : value(other.value) {}
MoveOnlyInt2& operator=(MoveOnlyInt2&& other) {
value = other.value;
return *this;
}
explicit MoveOnlyInt2(MoveOnlyInt&& other) : value(other.value) {}
MoveOnlyInt2& operator=(MoveOnlyInt&& other) {
value = other.value;
return *this;
}
int value = kDefaultMoveOnlyIntValue;
};
// Test that the default constructor creates a "no error" error.
TEST(RTCErrorTest, DefaultConstructor) {
RTCError e;
EXPECT_EQ(e.type(), RTCErrorType::NONE);
EXPECT_STREQ(e.message(), "");
EXPECT_TRUE(e.ok());
}
TEST(RTCErrorTest, NormalConstructors) {
RTCError a(RTCErrorType::INVALID_PARAMETER);
EXPECT_EQ(a.type(), RTCErrorType::INVALID_PARAMETER);
EXPECT_STREQ(a.message(), "");
// Constructor that takes const char* message.
RTCError b(RTCErrorType::UNSUPPORTED_PARAMETER, "foobar");
EXPECT_EQ(b.type(), RTCErrorType::UNSUPPORTED_PARAMETER);
EXPECT_STREQ(b.message(), "foobar");
// Constructor that takes absl::string_view message.
RTCError c(RTCErrorType::SYNTAX_ERROR, absl::string_view("baz"));
EXPECT_EQ(c.type(), RTCErrorType::SYNTAX_ERROR);
EXPECT_STREQ(c.message(), "baz");
// Constructor that takes std::string message.
RTCError d(RTCErrorType::INVALID_RANGE, std::string("new"));
EXPECT_EQ(d.type(), RTCErrorType::INVALID_RANGE);
EXPECT_STREQ(d.message(), "new");
}
TEST(RTCErrorTest, MoveConstructor) {
// Static string.
RTCError a(RTCErrorType::INVALID_PARAMETER, "foo");
RTCError b(std::move(a));
EXPECT_EQ(b.type(), RTCErrorType::INVALID_PARAMETER);
EXPECT_STREQ(b.message(), "foo");
// Non-static string.
RTCError c(RTCErrorType::UNSUPPORTED_PARAMETER, std::string("bar"));
RTCError d(std::move(c));
EXPECT_EQ(d.type(), RTCErrorType::UNSUPPORTED_PARAMETER);
EXPECT_STREQ(d.message(), "bar");
}
TEST(RTCErrorTest, MoveAssignment) {
// Try all combinations of "is static string"/"is non-static string" moves.
RTCError e(RTCErrorType::INVALID_PARAMETER, "foo");
e = RTCError(RTCErrorType::UNSUPPORTED_PARAMETER, "bar");
EXPECT_EQ(e.type(), RTCErrorType::UNSUPPORTED_PARAMETER);
EXPECT_STREQ(e.message(), "bar");
e = RTCError(RTCErrorType::SYNTAX_ERROR, absl::string_view("baz"));
EXPECT_STREQ(e.message(), "baz");
e = RTCError(RTCErrorType::SYNTAX_ERROR, std::string("another"));
EXPECT_STREQ(e.message(), "another");
}
// Test that the error returned by RTCError::OK() is a "no error" error.
TEST(RTCErrorTest, OKConstant) {
RTCError ok = RTCError::OK();
EXPECT_EQ(ok.type(), RTCErrorType::NONE);
EXPECT_STREQ(ok.message(), "");
EXPECT_TRUE(ok.ok());
}
// Test that "error.ok()" behaves as expected.
TEST(RTCErrorTest, OkMethod) {
RTCError success;
RTCError failure(RTCErrorType::INTERNAL_ERROR);
EXPECT_TRUE(success.ok());
EXPECT_FALSE(failure.ok());
}
// Test that a message can be set using either static const strings or
// std::strings.
TEST(RTCErrorTest, SetMessage) {
RTCError e;
e.set_message("foo");
EXPECT_STREQ(e.message(), "foo");
e.set_message(absl::string_view("bar"));
EXPECT_STREQ(e.message(), "bar");
e.set_message(std::string("string"));
EXPECT_STREQ(e.message(), "string");
}
// Test that the default constructor creates an "INTERNAL_ERROR".
TEST(RTCErrorOrTest, DefaultConstructor) {
RTCErrorOr<MoveOnlyInt> e;
EXPECT_EQ(e.error().type(), RTCErrorType::INTERNAL_ERROR);
}
// Test that an RTCErrorOr can be implicitly constructed from a value.
TEST(RTCErrorOrTest, ImplicitValueConstructor) {
RTCErrorOr<MoveOnlyInt> e = [] { return MoveOnlyInt(100); }();
EXPECT_EQ(e.value().value, 100);
}
// Test that an RTCErrorOr can be implicitly constructed from an RTCError.
TEST(RTCErrorOrTest, ImplicitErrorConstructor) {
RTCErrorOr<MoveOnlyInt> e = [] {
return RTCError(RTCErrorType::SYNTAX_ERROR);
}();
EXPECT_EQ(e.error().type(), RTCErrorType::SYNTAX_ERROR);
}
TEST(RTCErrorOrTest, MoveConstructor) {
RTCErrorOr<MoveOnlyInt> a(MoveOnlyInt(5));
RTCErrorOr<MoveOnlyInt> b(std::move(a));
EXPECT_EQ(b.value().value, 5);
}
TEST(RTCErrorOrTest, MoveAssignment) {
RTCErrorOr<MoveOnlyInt> a(MoveOnlyInt(5));
RTCErrorOr<MoveOnlyInt> b(MoveOnlyInt(10));
a = std::move(b);
EXPECT_EQ(a.value().value, 10);
}
TEST(RTCErrorOrTest, ConversionConstructor) {
RTCErrorOr<MoveOnlyInt> a(MoveOnlyInt(1));
RTCErrorOr<MoveOnlyInt2> b(std::move(a));
}
TEST(RTCErrorOrTest, ConversionAssignment) {
RTCErrorOr<MoveOnlyInt> a(MoveOnlyInt(5));
RTCErrorOr<MoveOnlyInt2> b(MoveOnlyInt2(10));
b = std::move(a);
EXPECT_EQ(b.value().value, 5);
}
TEST(RTCErrorOrTest, OkMethod) {
RTCErrorOr<int> success(1337);
RTCErrorOr<int> error = RTCError(RTCErrorType::INTERNAL_ERROR);
EXPECT_TRUE(success.ok());
EXPECT_FALSE(error.ok());
}
TEST(RTCErrorOrTest, MoveError) {
RTCErrorOr<int> e({RTCErrorType::SYNTAX_ERROR, "message"});
RTCError err = e.MoveError();
EXPECT_EQ(err.type(), RTCErrorType::SYNTAX_ERROR);
EXPECT_STREQ(err.message(), "message");
}
TEST(RTCErrorOrTest, MoveValue) {
RTCErrorOr<MoveOnlyInt> e(MoveOnlyInt(88));
MoveOnlyInt value = e.MoveValue();
EXPECT_EQ(value.value, 88);
}
// Death tests.
// Disabled on Android because death tests misbehave on Android, see
// base/test/gtest_util.h.
#if RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
TEST(RTCErrorOrDeathTest, ConstructWithOkError) {
RTCErrorOr<int> err;
EXPECT_DEATH(err = RTCError::OK(), "");
}
TEST(RTCErrorOrDeathTest, DereferenceErrorValue) {
RTCErrorOr<int> error = RTCError(RTCErrorType::INTERNAL_ERROR);
EXPECT_DEATH(error.value(), "");
}
TEST(RTCErrorOrDeathTest, MoveErrorValue) {
RTCErrorOr<int> error = RTCError(RTCErrorType::INTERNAL_ERROR);
EXPECT_DEATH(error.MoveValue(), "");
}
#endif // RTC_DCHECK_IS_ON && GTEST_HAS_DEATH_TEST && !defined(WEBRTC_ANDROID)
} // namespace
} // namespace webrtc
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C++
1
https://gitee.com/greatitman/webrtc-src.git
git@gitee.com:greatitman/webrtc-src.git
greatitman
webrtc-src
webrtc-src
master

搜索帮助