зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1100398 P0 Break out helper routines to support gtests for more stream types. r=froydnj
This commit is contained in:
Родитель
cbf56b6352
Коммит
b4a93b9b3d
|
@ -0,0 +1,97 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: set ts=8 sts=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/. */
|
||||||
|
|
||||||
|
/* Helper routines for xpcom gtests. */
|
||||||
|
|
||||||
|
#include "Helpers.h"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include "gtest/gtest.h"
|
||||||
|
#include "nsIOutputStream.h"
|
||||||
|
#include "nsStreamUtils.h"
|
||||||
|
#include "nsTArray.h"
|
||||||
|
|
||||||
|
namespace testing {
|
||||||
|
|
||||||
|
// Populate an array with the given number of bytes. Data is lorem ipsum
|
||||||
|
// random text, but deterministic across multiple calls.
|
||||||
|
void
|
||||||
|
CreateData(uint32_t aNumBytes, nsTArray<char>& aDataOut)
|
||||||
|
{
|
||||||
|
static const char data[] =
|
||||||
|
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec egestas "
|
||||||
|
"purus eu condimentum iaculis. In accumsan leo eget odio porttitor, non "
|
||||||
|
"rhoncus nulla vestibulum. Etiam lacinia consectetur nisl nec "
|
||||||
|
"sollicitudin. Sed fringilla accumsan diam, pulvinar varius massa. Duis "
|
||||||
|
"mollis dignissim felis, eget tempus nisi tristique ut. Fusce euismod, "
|
||||||
|
"lectus non lacinia tempor, tellus diam suscipit quam, eget hendrerit "
|
||||||
|
"lacus nunc fringilla ante. Sed ultrices massa vitae risus molestie, ut "
|
||||||
|
"finibus quam laoreet nullam.";
|
||||||
|
static const uint32_t dataLength = sizeof(data) - 1;
|
||||||
|
|
||||||
|
aDataOut.SetCapacity(aNumBytes);
|
||||||
|
|
||||||
|
while (aNumBytes > 0) {
|
||||||
|
uint32_t amount = std::min(dataLength, aNumBytes);
|
||||||
|
aDataOut.AppendElements(data, amount);
|
||||||
|
aNumBytes -= amount;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the given number of bytes out to the stream. Loop until expected
|
||||||
|
// bytes count is reached or an error occurs.
|
||||||
|
void
|
||||||
|
Write(nsIOutputStream* aStream, const nsTArray<char>& aData, uint32_t aOffset,
|
||||||
|
uint32_t aNumBytes)
|
||||||
|
{
|
||||||
|
uint32_t remaining =
|
||||||
|
std::min(aNumBytes, static_cast<uint32_t>(aData.Length() - aOffset));
|
||||||
|
|
||||||
|
while (remaining > 0) {
|
||||||
|
uint32_t numWritten;
|
||||||
|
nsresult rv = aStream->Write(aData.Elements() + aOffset, remaining,
|
||||||
|
&numWritten);
|
||||||
|
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||||
|
if (numWritten < 1) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aOffset += numWritten;
|
||||||
|
remaining -= numWritten;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Write the given number of bytes and then close the stream.
|
||||||
|
void
|
||||||
|
WriteAllAndClose(nsIOutputStream* aStream, const nsTArray<char>& aData)
|
||||||
|
{
|
||||||
|
Write(aStream, aData, 0, aData.Length());
|
||||||
|
aStream->Close();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Synchronously consume the given input stream and validate the resulting data
|
||||||
|
// against the given array of expected values.
|
||||||
|
void
|
||||||
|
ConsumeAndValidateStream(nsIInputStream* aStream,
|
||||||
|
const nsTArray<char>& aExpectedData)
|
||||||
|
{
|
||||||
|
nsDependentCSubstring data(aExpectedData.Elements(), aExpectedData.Length());
|
||||||
|
ConsumeAndValidateStream(aStream, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Synchronously consume the given input stream and validate the resulting data
|
||||||
|
// against the given string of expected values.
|
||||||
|
void
|
||||||
|
ConsumeAndValidateStream(nsIInputStream* aStream,
|
||||||
|
const nsACString& aExpectedData)
|
||||||
|
{
|
||||||
|
nsAutoCString outputData;
|
||||||
|
nsresult rv = NS_ConsumeStream(aStream, UINT32_MAX, outputData);
|
||||||
|
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||||
|
ASSERT_EQ(aExpectedData.Length(), outputData.Length());
|
||||||
|
ASSERT_TRUE(aExpectedData.Equals(outputData));
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace testing
|
|
@ -0,0 +1,39 @@
|
||||||
|
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||||
|
/* vim: set ts=8 sts=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/. */
|
||||||
|
|
||||||
|
#ifndef __Helpers_h
|
||||||
|
#define __Helpers_h
|
||||||
|
|
||||||
|
#include "nsString.h"
|
||||||
|
#include <stdint.h>
|
||||||
|
|
||||||
|
class nsIInputStream;
|
||||||
|
class nsIOutputStream;
|
||||||
|
template <class T> class nsTArray;
|
||||||
|
|
||||||
|
namespace testing {
|
||||||
|
|
||||||
|
void
|
||||||
|
CreateData(uint32_t aNumBytes, nsTArray<char>& aDataOut);
|
||||||
|
|
||||||
|
void
|
||||||
|
Write(nsIOutputStream* aStream, const nsTArray<char>& aData, uint32_t aOffset,
|
||||||
|
uint32_t aNumBytes);
|
||||||
|
|
||||||
|
void
|
||||||
|
WriteAllAndClose(nsIOutputStream* aStream, const nsTArray<char>& aData);
|
||||||
|
|
||||||
|
void
|
||||||
|
ConsumeAndValidateStream(nsIInputStream* aStream,
|
||||||
|
const nsTArray<char>& aExpectedData);
|
||||||
|
|
||||||
|
void
|
||||||
|
ConsumeAndValidateStream(nsIInputStream* aStream,
|
||||||
|
const nsACString& aExpectedData);
|
||||||
|
|
||||||
|
} // namespace testing
|
||||||
|
|
||||||
|
#endif // __Helpers_h
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include "gtest/gtest.h"
|
#include "gtest/gtest.h"
|
||||||
|
#include "Helpers.h"
|
||||||
#include "mozilla/SnappyCompressOutputStream.h"
|
#include "mozilla/SnappyCompressOutputStream.h"
|
||||||
#include "mozilla/SnappyUncompressInputStream.h"
|
#include "mozilla/SnappyUncompressInputStream.h"
|
||||||
#include "nsIPipe.h"
|
#include "nsIPipe.h"
|
||||||
|
@ -19,47 +20,6 @@ namespace {
|
||||||
using mozilla::SnappyCompressOutputStream;
|
using mozilla::SnappyCompressOutputStream;
|
||||||
using mozilla::SnappyUncompressInputStream;
|
using mozilla::SnappyUncompressInputStream;
|
||||||
|
|
||||||
static void CreateData(uint32_t aNumBytes, nsTArray<char>& aDataOut)
|
|
||||||
{
|
|
||||||
static const char data[] =
|
|
||||||
"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Donec egestas "
|
|
||||||
"purus eu condimentum iaculis. In accumsan leo eget odio porttitor, non "
|
|
||||||
"rhoncus nulla vestibulum. Etiam lacinia consectetur nisl nec "
|
|
||||||
"sollicitudin. Sed fringilla accumsan diam, pulvinar varius massa. Duis "
|
|
||||||
"mollis dignissim felis, eget tempus nisi tristique ut. Fusce euismod, "
|
|
||||||
"lectus non lacinia tempor, tellus diam suscipit quam, eget hendrerit "
|
|
||||||
"lacus nunc fringilla ante. Sed ultrices massa vitae risus molestie, ut "
|
|
||||||
"finibus quam laoreet nullam.";
|
|
||||||
static const uint32_t dataLength = sizeof(data) - 1;
|
|
||||||
|
|
||||||
aDataOut.SetCapacity(aNumBytes);
|
|
||||||
|
|
||||||
while (aNumBytes > 0) {
|
|
||||||
uint32_t amount = std::min(dataLength, aNumBytes);
|
|
||||||
aDataOut.AppendElements(data, amount);
|
|
||||||
aNumBytes -= amount;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
WriteAllAndClose(nsIOutputStream* aStream, const nsTArray<char>& aData)
|
|
||||||
{
|
|
||||||
uint32_t offset = 0;
|
|
||||||
uint32_t remaining = aData.Length();
|
|
||||||
while (remaining > 0) {
|
|
||||||
uint32_t numWritten;
|
|
||||||
nsresult rv = aStream->Write(aData.Elements() + offset, remaining,
|
|
||||||
&numWritten);
|
|
||||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
|
||||||
if (numWritten < 1) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
offset += numWritten;
|
|
||||||
remaining -= numWritten;
|
|
||||||
}
|
|
||||||
aStream->Close();
|
|
||||||
}
|
|
||||||
|
|
||||||
static already_AddRefed<nsIOutputStream>
|
static already_AddRefed<nsIOutputStream>
|
||||||
CompressPipe(nsIInputStream** aReaderOut)
|
CompressPipe(nsIInputStream** aReaderOut)
|
||||||
{
|
{
|
||||||
|
@ -85,9 +45,9 @@ static void TestCompress(uint32_t aNumBytes)
|
||||||
ASSERT_TRUE(compress);
|
ASSERT_TRUE(compress);
|
||||||
|
|
||||||
nsTArray<char> inputData;
|
nsTArray<char> inputData;
|
||||||
CreateData(aNumBytes, inputData);
|
testing::CreateData(aNumBytes, inputData);
|
||||||
|
|
||||||
WriteAllAndClose(compress, inputData);
|
testing::WriteAllAndClose(compress, inputData);
|
||||||
|
|
||||||
nsAutoCString outputData;
|
nsAutoCString outputData;
|
||||||
nsresult rv = NS_ConsumeStream(pipeReader, UINT32_MAX, outputData);
|
nsresult rv = NS_ConsumeStream(pipeReader, UINT32_MAX, outputData);
|
||||||
|
@ -108,9 +68,9 @@ static void TestCompressUncompress(uint32_t aNumBytes)
|
||||||
new SnappyUncompressInputStream(pipeReader);
|
new SnappyUncompressInputStream(pipeReader);
|
||||||
|
|
||||||
nsTArray<char> inputData;
|
nsTArray<char> inputData;
|
||||||
CreateData(aNumBytes, inputData);
|
testing::CreateData(aNumBytes, inputData);
|
||||||
|
|
||||||
WriteAllAndClose(compress, inputData);
|
testing::WriteAllAndClose(compress, inputData);
|
||||||
|
|
||||||
nsAutoCString outputData;
|
nsAutoCString outputData;
|
||||||
nsresult rv = NS_ConsumeStream(uncompress, UINT32_MAX, outputData);
|
nsresult rv = NS_ConsumeStream(uncompress, UINT32_MAX, outputData);
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||||
|
|
||||||
UNIFIED_SOURCES += [
|
UNIFIED_SOURCES += [
|
||||||
|
'Helpers.cpp',
|
||||||
'TestCRT.cpp',
|
'TestCRT.cpp',
|
||||||
'TestEncoding.cpp',
|
'TestEncoding.cpp',
|
||||||
'TestExpirationTracker.cpp',
|
'TestExpirationTracker.cpp',
|
||||||
|
|
Загрузка…
Ссылка в новой задаче