/* -*- 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 res = new BufferMediaResource(buf, sizeof(buf)); char out[8] = {0}; nsresult rv = res->ReadFromCache(out, 2, static_cast(sizeof(out))); EXPECT_NE(rv, NS_OK); } TEST(BufferMediaResource, ReadFromCache_PartialRead_ShouldFail) { const uint8_t buf[4] = {0x41, 0x42, 0x43, 0x44}; RefPtr 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 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 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 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 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(-1); nsresult rv = res->ReadFromCache(out, 0, count); EXPECT_NE(rv, NS_OK); }