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;
|
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
|
} // namespace testing
|
||||||
|
@ -7,6 +7,7 @@
|
|||||||
#ifndef __Helpers_h
|
#ifndef __Helpers_h
|
||||||
#define __Helpers_h
|
#define __Helpers_h
|
||||||
|
|
||||||
|
#include "nsIAsyncInputStream.h"
|
||||||
#include "nsIAsyncOutputStream.h"
|
#include "nsIAsyncOutputStream.h"
|
||||||
#include "nsString.h"
|
#include "nsString.h"
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
@ -51,6 +52,22 @@ public:
|
|||||||
NS_DECL_NSIOUTPUTSTREAMCALLBACK
|
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
|
} // namespace testing
|
||||||
|
|
||||||
#endif // __Helpers_h
|
#endif // __Helpers_h
|
||||||
|
@ -786,6 +786,88 @@ TEST(Pipes, Write_AsyncWait_Clone_CloseOriginal)
|
|||||||
ASSERT_TRUE(cb->Called());
|
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 {
|
namespace {
|
||||||
|
|
||||||
NS_METHOD
|
NS_METHOD
|
||||||
|
Loading…
Reference in New Issue
Block a user