Source code
Revision control
Copy as Markdown
Other Tools
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set ts=2 et sw=2 tw=80: */
/* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "BufferMediaResource.h"
#include "gtest/gtest.h"
#include "mozilla/RefPtr.h"
using namespace mozilla;
TEST(BufferMediaResource, ReadFromCache_OffsetBeyondLength_ShouldFail)
{
const uint8_t buf[1] = {0x41};
RefPtr<MediaResource> res = new BufferMediaResource(buf, sizeof(buf));
char out[8] = {0};
nsresult rv = res->ReadFromCache(out, 2, static_cast<uint32_t>(sizeof(out)));
EXPECT_NE(rv, NS_OK);
}
TEST(BufferMediaResource, ReadFromCache_PartialRead_ShouldFail)
{
const uint8_t buf[4] = {0x41, 0x42, 0x43, 0x44};
RefPtr<MediaResource> res = new BufferMediaResource(buf, sizeof(buf));
char out[8] = {0};
nsresult rv = res->ReadFromCache(out, 2, 8);
EXPECT_NE(rv, NS_OK);
}
TEST(BufferMediaResource, ReadFromCache_ValidRange_ShouldSucceed)
{
const uint8_t buf[4] = {0x41, 0x42, 0x43, 0x44};
RefPtr<MediaResource> res = new BufferMediaResource(buf, sizeof(buf));
char out[4] = {0};
nsresult rv = res->ReadFromCache(out, 0, 4);
EXPECT_EQ(rv, NS_OK);
EXPECT_EQ(out[0], 0x41);
EXPECT_EQ(out[1], 0x42);
EXPECT_EQ(out[2], 0x43);
EXPECT_EQ(out[3], 0x44);
}
TEST(BufferMediaResource, ReadFromCache_NegativeOffset_ShouldFail)
{
const uint8_t buf[4] = {0x41, 0x42, 0x43, 0x44};
RefPtr<MediaResource> res = new BufferMediaResource(buf, sizeof(buf));
char out[4] = {0};
nsresult rv = res->ReadFromCache(out, -1, 4);
EXPECT_NE(rv, NS_OK);
}
TEST(BufferMediaResource, ReadFromCache_OffsetAtLength_ShouldFail)
{
const uint8_t buf[4] = {0x41, 0x42, 0x43, 0x44};
RefPtr<MediaResource> res = new BufferMediaResource(buf, sizeof(buf));
char out[1] = {0};
nsresult rv = res->ReadFromCache(out, 4, 1);
EXPECT_NE(rv, NS_OK);
}
TEST(BufferMediaResource, ReadFromCache_NegativeCount_ShouldFail)
{
const uint8_t buf[4] = {0x41, 0x42, 0x43, 0x44};
RefPtr<MediaResource> res = new BufferMediaResource(buf, sizeof(buf));
char out[4] = {0};
// Prevent constant propagation leading to a warning/error on older GCC, that
// thinks we're doing a 4GB memcpy into a 4 byte array.
// ReadFromCache has an early return that prevents the copy.
volatile uint32_t count = static_cast<uint32_t>(-1);
nsresult rv = res->ReadFromCache(out, 0, count);
EXPECT_NE(rv, NS_OK);
}