mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
Bug 1203760 P2 Add gtests for nsPipeInputStream AsyncRead(). r=froydnj
This commit is contained in:
parent
b0a9dd9ecd
commit
bddde1fa43
@ -112,4 +112,22 @@ OutputStreamCallback::OnOutputStreamReady(nsIAsyncOutputStream* aStream)
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
NS_IMPL_ISUPPORTS(InputStreamCallback, nsIInputStreamCallback);
|
||||
|
||||
InputStreamCallback::InputStreamCallback()
|
||||
: mCalled(false)
|
||||
{
|
||||
}
|
||||
|
||||
InputStreamCallback::~InputStreamCallback()
|
||||
{
|
||||
}
|
||||
|
||||
NS_IMETHODIMP
|
||||
InputStreamCallback::OnInputStreamReady(nsIAsyncInputStream* aStream)
|
||||
{
|
||||
mCalled = true;
|
||||
return NS_OK;
|
||||
}
|
||||
|
||||
} // namespace testing
|
||||
|
@ -7,6 +7,7 @@
|
||||
#ifndef __Helpers_h
|
||||
#define __Helpers_h
|
||||
|
||||
#include "nsIAsyncInputStream.h"
|
||||
#include "nsIAsyncOutputStream.h"
|
||||
#include "nsString.h"
|
||||
#include <stdint.h>
|
||||
@ -51,6 +52,22 @@ public:
|
||||
NS_DECL_NSIOUTPUTSTREAMCALLBACK
|
||||
};
|
||||
|
||||
class InputStreamCallback final : public nsIInputStreamCallback
|
||||
{
|
||||
public:
|
||||
InputStreamCallback();
|
||||
|
||||
bool Called() const { return mCalled; }
|
||||
|
||||
private:
|
||||
~InputStreamCallback();
|
||||
|
||||
bool mCalled;
|
||||
public:
|
||||
NS_DECL_ISUPPORTS
|
||||
NS_DECL_NSIINPUTSTREAMCALLBACK
|
||||
};
|
||||
|
||||
} // namespace testing
|
||||
|
||||
#endif // __Helpers_h
|
||||
|
@ -786,6 +786,88 @@ TEST(Pipes, Write_AsyncWait_Clone_CloseOriginal)
|
||||
ASSERT_TRUE(cb->Called());
|
||||
}
|
||||
|
||||
TEST(Pipes, Read_AsyncWait)
|
||||
{
|
||||
nsCOMPtr<nsIAsyncInputStream> reader;
|
||||
nsCOMPtr<nsIAsyncOutputStream> writer;
|
||||
|
||||
const uint32_t segmentSize = 1024;
|
||||
const uint32_t numSegments = 1;
|
||||
|
||||
nsresult rv = NS_NewPipe2(getter_AddRefs(reader), getter_AddRefs(writer),
|
||||
true, true, // non-blocking - reader, writer
|
||||
segmentSize, numSegments);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
nsTArray<char> inputData;
|
||||
testing::CreateData(segmentSize, inputData);
|
||||
|
||||
nsRefPtr<testing::InputStreamCallback> cb =
|
||||
new testing::InputStreamCallback();
|
||||
|
||||
rv = reader->AsyncWait(cb, 0, 0, nullptr);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
ASSERT_FALSE(cb->Called());
|
||||
|
||||
uint32_t numWritten = 0;
|
||||
rv = writer->Write(inputData.Elements(), inputData.Length(), &numWritten);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
ASSERT_TRUE(cb->Called());
|
||||
|
||||
testing::ConsumeAndValidateStream(reader, inputData);
|
||||
}
|
||||
|
||||
TEST(Pipes, Read_AsyncWait_Clone)
|
||||
{
|
||||
nsCOMPtr<nsIAsyncInputStream> reader;
|
||||
nsCOMPtr<nsIAsyncOutputStream> writer;
|
||||
|
||||
const uint32_t segmentSize = 1024;
|
||||
const uint32_t numSegments = 1;
|
||||
|
||||
nsresult rv = NS_NewPipe2(getter_AddRefs(reader), getter_AddRefs(writer),
|
||||
true, true, // non-blocking - reader, writer
|
||||
segmentSize, numSegments);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
nsCOMPtr<nsIInputStream> clone;
|
||||
rv = NS_CloneInputStream(reader, getter_AddRefs(clone));
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
nsCOMPtr<nsIAsyncInputStream> asyncClone = do_QueryInterface(clone);
|
||||
ASSERT_TRUE(asyncClone);
|
||||
|
||||
nsTArray<char> inputData;
|
||||
testing::CreateData(segmentSize, inputData);
|
||||
|
||||
nsRefPtr<testing::InputStreamCallback> cb =
|
||||
new testing::InputStreamCallback();
|
||||
|
||||
nsRefPtr<testing::InputStreamCallback> cb2 =
|
||||
new testing::InputStreamCallback();
|
||||
|
||||
rv = reader->AsyncWait(cb, 0, 0, nullptr);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
ASSERT_FALSE(cb->Called());
|
||||
|
||||
rv = asyncClone->AsyncWait(cb2, 0, 0, nullptr);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
ASSERT_FALSE(cb2->Called());
|
||||
|
||||
uint32_t numWritten = 0;
|
||||
rv = writer->Write(inputData.Elements(), inputData.Length(), &numWritten);
|
||||
ASSERT_TRUE(NS_SUCCEEDED(rv));
|
||||
|
||||
ASSERT_TRUE(cb->Called());
|
||||
ASSERT_TRUE(cb2->Called());
|
||||
|
||||
testing::ConsumeAndValidateStream(reader, inputData);
|
||||
}
|
||||
|
||||
namespace {
|
||||
|
||||
NS_METHOD
|
||||
|
Loading…
Reference in New Issue
Block a user