test_utils_unittest.cc (3349B)
1 /* 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. 3 * 4 * Use of this source code is governed by a BSD-style license 5 * that can be found in the LICENSE file in the root of the source 6 * tree. An additional intellectual property rights grant can be found 7 * in the file PATENTS. All contributing project authors may 8 * be found in the AUTHORS file in the root of the source tree. 9 */ 10 11 #include "modules/desktop_capture/test_utils.h" 12 13 #include <cstdint> 14 15 #include "modules/desktop_capture/desktop_frame.h" 16 #include "modules/desktop_capture/desktop_geometry.h" 17 #include "modules/desktop_capture/rgba_color.h" 18 #include "test/gtest.h" 19 20 namespace webrtc { 21 22 namespace { 23 24 void PaintDesktopFrame(DesktopFrame* frame, 25 DesktopVector pos, 26 RgbaColor color) { 27 ASSERT_TRUE(frame); 28 ASSERT_TRUE(DesktopRect::MakeSize(frame->size()).Contains(pos)); 29 *reinterpret_cast<uint32_t*>(frame->GetFrameDataAtPos(pos)) = 30 color.ToUInt32(); 31 } 32 33 // A DesktopFrame implementation to store data in heap, but the stide is 34 // doubled. 35 class DoubleSizeDesktopFrame : public DesktopFrame { 36 public: 37 explicit DoubleSizeDesktopFrame(DesktopSize size); 38 ~DoubleSizeDesktopFrame() override; 39 }; 40 41 DoubleSizeDesktopFrame::DoubleSizeDesktopFrame(DesktopSize size) 42 : DesktopFrame( 43 size, 44 kBytesPerPixel * size.width() * 2, 45 new uint8_t[kBytesPerPixel * size.width() * size.height() * 2], 46 nullptr) {} 47 48 DoubleSizeDesktopFrame::~DoubleSizeDesktopFrame() { 49 delete[] data_; 50 } 51 52 } // namespace 53 54 TEST(TestUtilsTest, BasicDataEqualsCases) { 55 BasicDesktopFrame frame(DesktopSize(4, 4)); 56 for (int i = 0; i < 4; i++) { 57 for (int j = 0; j < 4; j++) { 58 PaintDesktopFrame(&frame, DesktopVector(i, j), RgbaColor(4U * j + i)); 59 } 60 } 61 62 ASSERT_TRUE(DesktopFrameDataEquals(frame, frame)); 63 BasicDesktopFrame other(DesktopSize(4, 4)); 64 for (int i = 0; i < 4; i++) { 65 for (int j = 0; j < 4; j++) { 66 PaintDesktopFrame(&other, DesktopVector(i, j), RgbaColor(4U * j + i)); 67 } 68 } 69 ASSERT_TRUE(DesktopFrameDataEquals(frame, other)); 70 PaintDesktopFrame(&other, DesktopVector(2, 2), RgbaColor(0U)); 71 ASSERT_FALSE(DesktopFrameDataEquals(frame, other)); 72 } 73 74 TEST(TestUtilsTest, DifferentSizeShouldNotEqual) { 75 BasicDesktopFrame frame(DesktopSize(4, 4)); 76 for (int i = 0; i < 4; i++) { 77 for (int j = 0; j < 4; j++) { 78 PaintDesktopFrame(&frame, DesktopVector(i, j), RgbaColor(4U * j + i)); 79 } 80 } 81 82 BasicDesktopFrame other(DesktopSize(2, 8)); 83 for (int i = 0; i < 2; i++) { 84 for (int j = 0; j < 8; j++) { 85 PaintDesktopFrame(&other, DesktopVector(i, j), RgbaColor(2U * j + i)); 86 } 87 } 88 89 ASSERT_FALSE(DesktopFrameDataEquals(frame, other)); 90 } 91 92 TEST(TestUtilsTest, DifferentStrideShouldBeComparable) { 93 BasicDesktopFrame frame(DesktopSize(4, 4)); 94 for (int i = 0; i < 4; i++) { 95 for (int j = 0; j < 4; j++) { 96 PaintDesktopFrame(&frame, DesktopVector(i, j), RgbaColor(4U * j + i)); 97 } 98 } 99 100 ASSERT_TRUE(DesktopFrameDataEquals(frame, frame)); 101 DoubleSizeDesktopFrame other(DesktopSize(4, 4)); 102 for (int i = 0; i < 4; i++) { 103 for (int j = 0; j < 4; j++) { 104 PaintDesktopFrame(&other, DesktopVector(i, j), RgbaColor(4U * j + i)); 105 } 106 } 107 ASSERT_TRUE(DesktopFrameDataEquals(frame, other)); 108 } 109 110 } // namespace webrtc