tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

TestMediaSpan.cpp (3120B)


      1 /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
      2 /* vim: set ts=2 et sw=2 tw=80: */
      3 /* This Source Code Form is subject to the terms of the Mozilla Public
      4 * License, v. 2.0. If a copy of the MPL was not distributed with this
      5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
      6 
      7 #include <gtest/gtest.h>
      8 #include <stdint.h>
      9 
     10 #include "MediaSpan.h"
     11 
     12 using namespace mozilla;
     13 
     14 already_AddRefed<MediaByteBuffer> makeBuffer(uint8_t aStart, uint8_t aEnd) {
     15  RefPtr<MediaByteBuffer> buffer(new MediaByteBuffer);
     16  for (uint8_t i = aStart; i <= aEnd; i++) {
     17    buffer->AppendElement(i);
     18  }
     19  return buffer.forget();
     20 }
     21 
     22 bool IsRangeAt(const MediaSpan& aSpan, uint8_t aStart, uint8_t aEnd,
     23               size_t aAt) {
     24  size_t length = size_t(aEnd) - size_t(aStart) + 1;
     25  if (aAt + length > aSpan.Length()) {
     26    return false;
     27  }
     28  for (size_t i = 0; i < length; i++) {
     29    if (aSpan[aAt + i] != uint8_t(aStart + i)) {
     30      return false;
     31    }
     32  }
     33  return true;
     34 }
     35 
     36 bool IsRange(const MediaSpan& aSpan, uint8_t aStart, uint8_t aEnd) {
     37  return IsRangeAt(aSpan, aStart, aEnd, 0);
     38 }
     39 
     40 TEST(MediaSpan, AppendToFromSpan)
     41 {
     42  RefPtr<MediaByteBuffer> buffer1 = makeBuffer(0, 9);
     43  MediaSpan span1 = MediaSpan(buffer1);
     44  EXPECT_EQ(span1.Length(), size_t(10));
     45  EXPECT_TRUE(IsRange(span1, 0, 9));
     46 
     47  MediaSpan span2 = span1.From(5);
     48 
     49  EXPECT_EQ(span2.Length(), size_t(5));
     50  EXPECT_TRUE(IsRange(span2, 5, 9));
     51  RefPtr<MediaByteBuffer> buffer2 = makeBuffer(10, 19);
     52  EXPECT_EQ(buffer2->Length(), size_t(10));
     53  span2.Append(buffer2);
     54 
     55  // Span2 should be: [5...19]
     56  EXPECT_EQ(span2.Length(), size_t(15));
     57  EXPECT_TRUE(IsRange(span2, 5, 19));
     58 
     59  // Span1 should not be modified by the append to span2.
     60  EXPECT_EQ(span1.Length(), size_t(10));
     61  EXPECT_TRUE(IsRange(span1, 0, 9));
     62 }
     63 
     64 TEST(MediaSpan, AppendToToSpan)
     65 {
     66  RefPtr<MediaByteBuffer> buffer1 = makeBuffer(0, 9);
     67  MediaSpan span1 = MediaSpan(buffer1);
     68  EXPECT_EQ(span1.Length(), size_t(10));
     69  EXPECT_TRUE(IsRange(span1, 0, 9));
     70 
     71  MediaSpan span2 = span1.To(5);
     72 
     73  // Span2 should be [0...4]
     74  EXPECT_EQ(span2.Length(), size_t(5));
     75  EXPECT_TRUE(IsRange(span2, 0, 4));
     76  RefPtr<MediaByteBuffer> buffer2 = makeBuffer(10, 19);
     77  EXPECT_EQ(buffer2->Length(), size_t(10));
     78  span2.Append(buffer2);
     79 
     80  // Span2 should be: [0...4][10...19]
     81  EXPECT_EQ(span2.Length(), size_t(15));
     82  EXPECT_TRUE(IsRangeAt(span2, 0, 4, 0));
     83  EXPECT_TRUE(IsRangeAt(span2, 10, 19, 5));
     84 
     85  // Span1 should not be modified by the append to span2.
     86  EXPECT_EQ(span1.Length(), size_t(10));
     87  EXPECT_TRUE(IsRange(span1, 0, 9));
     88 }
     89 
     90 TEST(MediaSpan, RemoveFront)
     91 {
     92  RefPtr<MediaByteBuffer> buffer1 = makeBuffer(0, 9);
     93  MediaSpan span1 = MediaSpan(buffer1);
     94  EXPECT_EQ(span1.Length(), size_t(10));
     95  EXPECT_TRUE(IsRange(span1, 0, 9));
     96 
     97  MediaSpan span2(span1);
     98  EXPECT_EQ(span2.Length(), size_t(10));
     99 
    100  span2.RemoveFront(5);
    101 
    102  // Span2 should now be [5...9]
    103  EXPECT_EQ(span2.Length(), size_t(5));
    104  EXPECT_TRUE(IsRange(span2, 5, 9));
    105 
    106  // Span1 should be unaffected.
    107  EXPECT_EQ(span1.Length(), size_t(10));
    108  EXPECT_TRUE(IsRange(span1, 0, 9));
    109 }