Chromium Code Reviews| Index: test/unittests/value-serializer-unittest.cc |
| diff --git a/test/unittests/value-serializer-unittest.cc b/test/unittests/value-serializer-unittest.cc |
| index 1dabd2a17a78f411a5af3e3dad3ce57418ddc20d..cb4a4f963d32286ef74528ba66ef40ed403c31ad 100644 |
| --- a/test/unittests/value-serializer-unittest.cc |
| +++ b/test/unittests/value-serializer-unittest.cc |
| @@ -19,6 +19,7 @@ namespace { |
| using ::testing::_; |
| using ::testing::Invoke; |
| +using ::testing::Return; |
| class ValueSerializerTest : public TestWithIsolate { |
| protected: |
| @@ -129,15 +130,22 @@ class ValueSerializerTest : public TestWithIsolate { |
| encoded_data_functor(buffer); |
| } |
| - template <typename MessageFunctor> |
| - void InvalidEncodeTest(const char* source, const MessageFunctor& functor) { |
| + template <typename InputFunctor, typename MessageFunctor> |
| + void InvalidEncodeTest(const InputFunctor& input_functor, |
| + const MessageFunctor& functor) { |
| Context::Scope scope(serialization_context()); |
| TryCatch try_catch(isolate()); |
| - Local<Value> input_value = EvaluateScriptForInput(source); |
| + Local<Value> input_value = input_functor(); |
| ASSERT_TRUE(DoEncode(input_value).IsNothing()); |
| functor(try_catch.Message()); |
| } |
| + template <typename MessageFunctor> |
| + void InvalidEncodeTest(const char* source, const MessageFunctor& functor) { |
| + InvalidEncodeTest( |
| + [this, source]() { return EvaluateScriptForInput(source); }, functor); |
| + } |
| + |
| void InvalidEncodeTest(const char* source) { |
| InvalidEncodeTest(source, [](Local<Message>) {}); |
| } |
| @@ -2042,7 +2050,9 @@ class ValueSerializerTestWithSharedArrayBufferTransfer |
| protected: |
| static const size_t kTestByteLength = 4; |
| - ValueSerializerTestWithSharedArrayBufferTransfer() { |
| + ValueSerializerTestWithSharedArrayBufferTransfer() |
| + : serializer_delegate_(this), |
| + should_transfer_shared_array_buffer_(false) { |
| const uint8_t data[kTestByteLength] = {0x00, 0x01, 0x80, 0xff}; |
| memcpy(data_, data, kTestByteLength); |
| { |
| @@ -2061,7 +2071,12 @@ class ValueSerializerTestWithSharedArrayBufferTransfer |
| const Local<SharedArrayBuffer>& output_buffer() { return output_buffer_; } |
| void BeforeEncode(ValueSerializer* serializer) override { |
| - serializer->TransferSharedArrayBuffer(0, input_buffer_); |
| + if (should_transfer_shared_array_buffer_) { |
| + // TODO(binji): In general, this should not be called, because |
| + // SharedArrayBuffers are not allowed in the transfer list. We allow it |
| + // for testing for now, but this function will be removed soon. |
| + serializer->TransferSharedArrayBuffer(0, input_buffer_); |
| + } |
| } |
| void BeforeDecode(ValueDeserializer* deserializer) override { |
| @@ -2080,6 +2095,40 @@ class ValueSerializerTestWithSharedArrayBufferTransfer |
| flag_was_enabled_ = false; |
| } |
| + protected: |
| +// GMock doesn't use the "override" keyword. |
| +#if __clang__ |
| +#pragma clang diagnostic push |
| +#pragma clang diagnostic ignored "-Winconsistent-missing-override" |
| +#endif |
| + |
| + class SerializerDelegate : public ValueSerializer::Delegate { |
| + public: |
| + explicit SerializerDelegate( |
| + ValueSerializerTestWithSharedArrayBufferTransfer* test) |
| + : test_(test) {} |
| + MOCK_METHOD2(TransferSharedArrayBuffer, |
| + Maybe<uint32_t>(Isolate* isolate, |
| + Local<SharedArrayBuffer> shared_array_buffer)); |
| + void ThrowDataCloneError(Local<String> message) override { |
| + test_->isolate()->ThrowException(Exception::Error(message)); |
| + } |
| + |
| + private: |
| + ValueSerializerTestWithSharedArrayBufferTransfer* test_; |
| + }; |
| + |
| +#if __clang__ |
| +#pragma clang diagnostic pop |
| +#endif |
| + |
| + ValueSerializer::Delegate* GetSerializerDelegate() override { |
| + return &serializer_delegate_; |
| + } |
| + |
| + SerializerDelegate serializer_delegate_; |
| + bool should_transfer_shared_array_buffer_; |
|
jbroman
2016/12/15 16:15:33
This seems to only ever be set to false. Should it
binji
2016/12/15 19:31:20
Done, forgot to remove after removing the test tha
|
| + |
| private: |
| static bool flag_was_enabled_; |
| uint8_t data_[kTestByteLength]; |
| @@ -2092,6 +2141,11 @@ bool ValueSerializerTestWithSharedArrayBufferTransfer::flag_was_enabled_ = |
| TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, |
| RoundTripSharedArrayBufferTransfer) { |
| + should_transfer_shared_array_buffer_ = false; |
| + EXPECT_CALL(serializer_delegate_, |
| + TransferSharedArrayBuffer(isolate(), input_buffer())) |
| + .WillRepeatedly(Return(Just(0U))); |
| + |
| RoundTripTest([this]() { return input_buffer(); }, |
| [this](Local<Value> value) { |
| ASSERT_TRUE(value->IsSharedArrayBuffer()); |
| @@ -2123,12 +2177,6 @@ TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, |
| }); |
| } |
| -TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, |
| - SharedArrayBufferMustBeTransferred) { |
| - // A SharedArrayBuffer which was not marked for transfer should fail encoding. |
| - InvalidEncodeTest("new SharedArrayBuffer(32)"); |
| -} |
| - |
| TEST_F(ValueSerializerTest, UnsupportedHostObject) { |
| InvalidEncodeTest("new ExampleHostObject()"); |
| InvalidEncodeTest("({ a: new ExampleHostObject() })"); |