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..9d76cb70519a52b26c70fef34c04e2244fbca154 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,8 @@ class ValueSerializerTestWithSharedArrayBufferTransfer |
protected: |
static const size_t kTestByteLength = 4; |
- ValueSerializerTestWithSharedArrayBufferTransfer() { |
+ ValueSerializerTestWithSharedArrayBufferTransfer() |
+ : serializer_delegate_(this) { |
const uint8_t data[kTestByteLength] = {0x00, 0x01, 0x80, 0xff}; |
memcpy(data_, data, kTestByteLength); |
{ |
@@ -2060,10 +2069,6 @@ class ValueSerializerTestWithSharedArrayBufferTransfer |
const Local<SharedArrayBuffer>& input_buffer() { return input_buffer_; } |
const Local<SharedArrayBuffer>& output_buffer() { return output_buffer_; } |
- void BeforeEncode(ValueSerializer* serializer) override { |
- serializer->TransferSharedArrayBuffer(0, input_buffer_); |
- } |
- |
void BeforeDecode(ValueDeserializer* deserializer) override { |
deserializer->TransferSharedArrayBuffer(0, output_buffer_); |
} |
@@ -2080,6 +2085,39 @@ 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(GetSharedArrayBufferId, |
+ 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_; |
+ |
private: |
static bool flag_was_enabled_; |
uint8_t data_[kTestByteLength]; |
@@ -2092,6 +2130,10 @@ bool ValueSerializerTestWithSharedArrayBufferTransfer::flag_was_enabled_ = |
TEST_F(ValueSerializerTestWithSharedArrayBufferTransfer, |
RoundTripSharedArrayBufferTransfer) { |
+ EXPECT_CALL(serializer_delegate_, |
+ GetSharedArrayBufferId(isolate(), input_buffer())) |
+ .WillRepeatedly(Return(Just(0U))); |
+ |
RoundTripTest([this]() { return input_buffer(); }, |
[this](Local<Value> value) { |
ASSERT_TRUE(value->IsSharedArrayBuffer()); |
@@ -2123,12 +2165,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() })"); |