/* -*- 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/. */
// 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, nsCString& aDataOut) { staticconstchar 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."; staticconst uint32_t dataLength = sizeof(data) - 1;
// 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_NS_SUCCEEDED(rv);
ASSERT_EQ(aExpectedData.Length(), outputData.Length());
ASSERT_TRUE(aExpectedData.Equals(outputData));
}
RefPtr<OutputStreamCallback> cb = new OutputStreamCallback();
// Register a callback and immediately cancel it.
rv = writer->AsyncWait(cb, 0, 0, GetCurrentSerialEventTarget());
ASSERT_NS_SUCCEEDED(rv);
rv = writer->AsyncWait(nullptr, 0, 0, nullptr);
ASSERT_NS_SUCCEEDED(rv);
// Even after consuming the stream and processing pending events, the callback // shouldn't be called as it was cancelled.
ConsumeAndValidateStream(reader, inputData);
NS_ProcessPendingEvents(nullptr);
ASSERT_FALSE(cb->Called());
}
// Write data into the pipe to make the callback become ready.
uint32_t numWritten = 0;
rv = writer->Write(inputData.BeginReading(), inputData.Length(), &numWritten);
ASSERT_NS_SUCCEEDED(rv);
// Even after processing pending events, the callback shouldn't be called as // it was cancelled.
NS_ProcessPendingEvents(nullptr);
ASSERT_FALSE(cb->Called());
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.