summaryrefslogtreecommitdiffstats
path: root/third_party/libwebrtc/pc/rtp_media_utils_unittest.cc
blob: 5ee49e356dbff98550e816c20cb6c10cc926c756 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
/*
 *  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 "pc/rtp_media_utils.h"

#include <tuple>

#include "test/gtest.h"

namespace webrtc {

using ::testing::Bool;
using ::testing::Combine;
using ::testing::Values;
using ::testing::ValuesIn;

RtpTransceiverDirection kAllDirections[] = {
    RtpTransceiverDirection::kSendRecv, RtpTransceiverDirection::kSendOnly,
    RtpTransceiverDirection::kRecvOnly, RtpTransceiverDirection::kInactive};

class EnumerateAllDirectionsTest
    : public ::testing::TestWithParam<RtpTransceiverDirection> {};

// Test that converting the direction to send/recv and back again results in the
// same direction.
TEST_P(EnumerateAllDirectionsTest, TestIdentity) {
  RtpTransceiverDirection direction = GetParam();

  bool send = RtpTransceiverDirectionHasSend(direction);
  bool recv = RtpTransceiverDirectionHasRecv(direction);

  EXPECT_EQ(direction, RtpTransceiverDirectionFromSendRecv(send, recv));
}

// Test that reversing the direction is equivalent to swapping send/recv.
TEST_P(EnumerateAllDirectionsTest, TestReversedSwapped) {
  RtpTransceiverDirection direction = GetParam();

  bool send = RtpTransceiverDirectionHasSend(direction);
  bool recv = RtpTransceiverDirectionHasRecv(direction);

  EXPECT_EQ(RtpTransceiverDirectionFromSendRecv(recv, send),
            RtpTransceiverDirectionReversed(direction));
}

// Test that reversing the direction twice results in the same direction.
TEST_P(EnumerateAllDirectionsTest, TestReversedIdentity) {
  RtpTransceiverDirection direction = GetParam();

  EXPECT_EQ(direction, RtpTransceiverDirectionReversed(
                           RtpTransceiverDirectionReversed(direction)));
}

INSTANTIATE_TEST_SUITE_P(RtpTransceiverDirectionTest,
                         EnumerateAllDirectionsTest,
                         ValuesIn(kAllDirections));

class EnumerateAllDirectionsAndBool
    : public ::testing::TestWithParam<
          std::tuple<RtpTransceiverDirection, bool>> {};

TEST_P(EnumerateAllDirectionsAndBool, TestWithSendSet) {
  RtpTransceiverDirection direction = std::get<0>(GetParam());
  bool send = std::get<1>(GetParam());

  RtpTransceiverDirection result =
      RtpTransceiverDirectionWithSendSet(direction, send);

  EXPECT_EQ(send, RtpTransceiverDirectionHasSend(result));
  EXPECT_EQ(RtpTransceiverDirectionHasRecv(direction),
            RtpTransceiverDirectionHasRecv(result));
}

TEST_P(EnumerateAllDirectionsAndBool, TestWithRecvSet) {
  RtpTransceiverDirection direction = std::get<0>(GetParam());
  bool recv = std::get<1>(GetParam());

  RtpTransceiverDirection result =
      RtpTransceiverDirectionWithRecvSet(direction, recv);

  EXPECT_EQ(RtpTransceiverDirectionHasSend(direction),
            RtpTransceiverDirectionHasSend(result));
  EXPECT_EQ(recv, RtpTransceiverDirectionHasRecv(result));
}

INSTANTIATE_TEST_SUITE_P(RtpTransceiverDirectionTest,
                         EnumerateAllDirectionsAndBool,
                         Combine(ValuesIn(kAllDirections), Bool()));

}  // namespace webrtc