diff options
author | blundell <blundell@chromium.org> | 2015-01-19 09:18:33 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-19 17:19:27 +0000 |
commit | 70fb54767b472a5edfb859e489beeeec7abdb0e4 (patch) | |
tree | 28e534ec774391a9f6571a1770e12a0d63ebf833 /mojo/public/cpp/bindings/tests/handle_passing_unittest.cc | |
parent | ba5f0233fa38f949e24f6274ba891fa652eab640 (diff) | |
download | chromium_src-70fb54767b472a5edfb859e489beeeec7abdb0e4.zip chromium_src-70fb54767b472a5edfb859e489beeeec7abdb0e4.tar.gz chromium_src-70fb54767b472a5edfb859e489beeeec7abdb0e4.tar.bz2 |
Move //mojo/{public, edk} underneath //third_party
This CL move //mojo/public and //mojo/edk to live in the following locations:
- //third_party/mojo/src/mojo/public
- //third_party/mojo/src/mojo/edk
It moves the related gypfiles from //mojo to //third_party/mojo and updates
them as necessary to account for the file moves. It also updates clients of the
mojo SDK and EDK targets in both GYP and GN. (Note that for GN, the mojo SDK
and EDK build systems are maintained in the Mojo repo and designed to be
flexible wrt the location of the SDK/EDK in a client repo, so no changes are
needed.
This CL does not update include paths to the code being moved to limit the
number of moving parts, instead relying on the include_dirs that the SDK and
EDK targets supply to their direct dependents to ensure that include paths
continue to resolve correctly.
NOPRESUBMIT=true
Review URL: https://codereview.chromium.org/814543006
Cr-Commit-Position: refs/heads/master@{#312129}
Diffstat (limited to 'mojo/public/cpp/bindings/tests/handle_passing_unittest.cc')
-rw-r--r-- | mojo/public/cpp/bindings/tests/handle_passing_unittest.cc | 342 |
1 files changed, 0 insertions, 342 deletions
diff --git a/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc b/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc deleted file mode 100644 index 5667f64..0000000 --- a/mojo/public/cpp/bindings/tests/handle_passing_unittest.cc +++ /dev/null @@ -1,342 +0,0 @@ -// Copyright 2013 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#include "mojo/public/cpp/environment/environment.h" -#include "mojo/public/cpp/test_support/test_utils.h" -#include "mojo/public/cpp/utility/run_loop.h" -#include "mojo/public/interfaces/bindings/tests/sample_factory.mojom.h" -#include "testing/gtest/include/gtest/gtest.h" - -namespace mojo { -namespace test { -namespace { - -const char kText1[] = "hello"; -const char kText2[] = "world"; - -class StringRecorder { - public: - explicit StringRecorder(std::string* buf) : buf_(buf) {} - void Run(const String& a) const { *buf_ = a.To<std::string>(); } - - private: - std::string* buf_; -}; - -class ImportedInterfaceImpl - : public InterfaceImpl<imported::ImportedInterface> { - public: - void DoSomething() override { do_something_count_++; } - - static int do_something_count() { return do_something_count_; } - - private: - static int do_something_count_; -}; -int ImportedInterfaceImpl::do_something_count_ = 0; - -class SampleNamedObjectImpl : public InterfaceImpl<sample::NamedObject> { - public: - void SetName(const mojo::String& name) override { name_ = name; } - - void GetName(const mojo::Callback<void(mojo::String)>& callback) override { - callback.Run(name_); - } - - private: - std::string name_; -}; - -class SampleFactoryImpl : public InterfaceImpl<sample::Factory> { - public: - void DoStuff(sample::RequestPtr request, - ScopedMessagePipeHandle pipe) override { - std::string text1; - if (pipe.is_valid()) - EXPECT_TRUE(ReadTextMessage(pipe.get(), &text1)); - - std::string text2; - if (request->pipe.is_valid()) { - EXPECT_TRUE(ReadTextMessage(request->pipe.get(), &text2)); - - // Ensure that simply accessing request->pipe does not close it. - EXPECT_TRUE(request->pipe.is_valid()); - } - - ScopedMessagePipeHandle pipe0; - if (!text2.empty()) { - CreateMessagePipe(nullptr, &pipe0, &pipe1_); - EXPECT_TRUE(WriteTextMessage(pipe1_.get(), text2)); - } - - sample::ResponsePtr response(sample::Response::New()); - response->x = 2; - response->pipe = pipe0.Pass(); - client()->DidStuff(response.Pass(), text1); - - if (request->obj) - request->obj->DoSomething(); - } - - void DoStuff2(ScopedDataPipeConsumerHandle pipe) override { - // Read the data from the pipe, writing the response (as a string) to - // DidStuff2(). - ASSERT_TRUE(pipe.is_valid()); - uint32_t data_size = 0; - ASSERT_EQ(MOJO_RESULT_OK, - ReadDataRaw( - pipe.get(), nullptr, &data_size, MOJO_READ_DATA_FLAG_QUERY)); - ASSERT_NE(0, static_cast<int>(data_size)); - char data[64]; - ASSERT_LT(static_cast<int>(data_size), 64); - ASSERT_EQ( - MOJO_RESULT_OK, - ReadDataRaw( - pipe.get(), data, &data_size, MOJO_READ_DATA_FLAG_ALL_OR_NONE)); - - client()->DidStuff2(data); - } - - void CreateNamedObject( - InterfaceRequest<sample::NamedObject> object_request) override { - EXPECT_TRUE(object_request.is_pending()); - BindToRequest(new SampleNamedObjectImpl(), &object_request); - } - - // These aren't called or implemented, but exist here to test that the - // methods are generated with the correct argument types for imported - // interfaces. - void RequestImportedInterface( - InterfaceRequest<imported::ImportedInterface> imported, - const mojo::Callback<void(InterfaceRequest<imported::ImportedInterface>)>& - callback) override {} - void TakeImportedInterface( - imported::ImportedInterfacePtr imported, - const mojo::Callback<void(imported::ImportedInterfacePtr)>& callback) - override {} - - private: - ScopedMessagePipeHandle pipe1_; -}; - -class SampleFactoryClientImpl : public sample::FactoryClient { - public: - SampleFactoryClientImpl() : got_response_(false) {} - - void set_expected_text_reply(const std::string& expected_text_reply) { - expected_text_reply_ = expected_text_reply; - } - - bool got_response() const { return got_response_; } - - void DidStuff(sample::ResponsePtr response, - const String& text_reply) override { - EXPECT_EQ(expected_text_reply_, text_reply); - - if (response->pipe.is_valid()) { - std::string text2; - EXPECT_TRUE(ReadTextMessage(response->pipe.get(), &text2)); - - // Ensure that simply accessing response.pipe does not close it. - EXPECT_TRUE(response->pipe.is_valid()); - - EXPECT_EQ(std::string(kText2), text2); - - // Do some more tests of handle passing: - ScopedMessagePipeHandle p = response->pipe.Pass(); - EXPECT_TRUE(p.is_valid()); - EXPECT_FALSE(response->pipe.is_valid()); - } - - got_response_ = true; - } - - void DidStuff2(const String& text_reply) override { - got_response_ = true; - EXPECT_EQ(expected_text_reply_, text_reply); - } - - private: - ScopedMessagePipeHandle pipe1_; - ScopedMessagePipeHandle pipe3_; - std::string expected_text_reply_; - bool got_response_; -}; - -class HandlePassingTest : public testing::Test { - public: - void TearDown() override { PumpMessages(); } - - void PumpMessages() { loop_.RunUntilIdle(); } - - private: - Environment env_; - RunLoop loop_; -}; - -TEST_F(HandlePassingTest, Basic) { - sample::FactoryPtr factory; - BindToProxy(new SampleFactoryImpl(), &factory); - - SampleFactoryClientImpl factory_client; - factory_client.set_expected_text_reply(kText1); - - factory.set_client(&factory_client); - - MessagePipe pipe0; - EXPECT_TRUE(WriteTextMessage(pipe0.handle1.get(), kText1)); - - MessagePipe pipe1; - EXPECT_TRUE(WriteTextMessage(pipe1.handle1.get(), kText2)); - - imported::ImportedInterfacePtr imported; - BindToProxy(new ImportedInterfaceImpl(), &imported); - - sample::RequestPtr request(sample::Request::New()); - request->x = 1; - request->pipe = pipe1.handle0.Pass(); - request->obj = imported.Pass(); - factory->DoStuff(request.Pass(), pipe0.handle0.Pass()); - - EXPECT_FALSE(factory_client.got_response()); - int count_before = ImportedInterfaceImpl::do_something_count(); - - PumpMessages(); - - EXPECT_TRUE(factory_client.got_response()); - EXPECT_EQ(1, ImportedInterfaceImpl::do_something_count() - count_before); -} - -TEST_F(HandlePassingTest, PassInvalid) { - sample::FactoryPtr factory; - BindToProxy(new SampleFactoryImpl(), &factory); - - SampleFactoryClientImpl factory_client; - factory.set_client(&factory_client); - - sample::RequestPtr request(sample::Request::New()); - request->x = 1; - factory->DoStuff(request.Pass(), ScopedMessagePipeHandle().Pass()); - - EXPECT_FALSE(factory_client.got_response()); - - PumpMessages(); - - EXPECT_TRUE(factory_client.got_response()); -} - -// Verifies DataPipeConsumer can be passed and read from. -TEST_F(HandlePassingTest, DataPipe) { - sample::FactoryPtr factory; - BindToProxy(new SampleFactoryImpl(), &factory); - - SampleFactoryClientImpl factory_client; - factory.set_client(&factory_client); - - // Writes a string to a data pipe and passes the data pipe (consumer) to the - // factory. - ScopedDataPipeProducerHandle producer_handle; - ScopedDataPipeConsumerHandle consumer_handle; - MojoCreateDataPipeOptions options = {sizeof(MojoCreateDataPipeOptions), - MOJO_CREATE_DATA_PIPE_OPTIONS_FLAG_NONE, - 1, - 1024}; - ASSERT_EQ(MOJO_RESULT_OK, - CreateDataPipe(&options, &producer_handle, &consumer_handle)); - std::string expected_text_reply = "got it"; - factory_client.set_expected_text_reply(expected_text_reply); - // +1 for \0. - uint32_t data_size = static_cast<uint32_t>(expected_text_reply.size() + 1); - ASSERT_EQ(MOJO_RESULT_OK, - WriteDataRaw(producer_handle.get(), - expected_text_reply.c_str(), - &data_size, - MOJO_WRITE_DATA_FLAG_ALL_OR_NONE)); - - factory->DoStuff2(consumer_handle.Pass()); - - EXPECT_FALSE(factory_client.got_response()); - - PumpMessages(); - - EXPECT_TRUE(factory_client.got_response()); -} - -TEST_F(HandlePassingTest, PipesAreClosed) { - sample::FactoryPtr factory; - BindToProxy(new SampleFactoryImpl(), &factory); - - SampleFactoryClientImpl factory_client; - factory.set_client(&factory_client); - - MessagePipe extra_pipe; - - MojoHandle handle0_value = extra_pipe.handle0.get().value(); - MojoHandle handle1_value = extra_pipe.handle1.get().value(); - - { - Array<ScopedMessagePipeHandle> pipes(2); - pipes[0] = extra_pipe.handle0.Pass(); - pipes[1] = extra_pipe.handle1.Pass(); - - sample::RequestPtr request(sample::Request::New()); - request->more_pipes = pipes.Pass(); - - factory->DoStuff(request.Pass(), ScopedMessagePipeHandle()); - } - - // We expect the pipes to have been closed. - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handle0_value)); - EXPECT_EQ(MOJO_RESULT_INVALID_ARGUMENT, MojoClose(handle1_value)); -} - -TEST_F(HandlePassingTest, IsHandle) { - // Validate that mojo::internal::IsHandle<> works as expected since this. - // template is key to ensuring that we don't leak handles. - EXPECT_TRUE(internal::IsHandle<Handle>::value); - EXPECT_TRUE(internal::IsHandle<MessagePipeHandle>::value); - EXPECT_TRUE(internal::IsHandle<DataPipeConsumerHandle>::value); - EXPECT_TRUE(internal::IsHandle<DataPipeProducerHandle>::value); - EXPECT_TRUE(internal::IsHandle<SharedBufferHandle>::value); - - // Basic sanity checks... - EXPECT_FALSE(internal::IsHandle<int>::value); - EXPECT_FALSE(internal::IsHandle<sample::FactoryPtr>::value); - EXPECT_FALSE(internal::IsHandle<String>::value); -} - -TEST_F(HandlePassingTest, CreateNamedObject) { - sample::FactoryPtr factory; - BindToProxy(new SampleFactoryImpl(), &factory); - - sample::NamedObjectPtr object1; - EXPECT_FALSE(object1); - - InterfaceRequest<sample::NamedObject> object1_request = GetProxy(&object1); - EXPECT_TRUE(object1_request.is_pending()); - factory->CreateNamedObject(object1_request.Pass()); - EXPECT_FALSE(object1_request.is_pending()); // We've passed the request. - - ASSERT_TRUE(object1); - object1->SetName("object1"); - - sample::NamedObjectPtr object2; - factory->CreateNamedObject(GetProxy(&object2)); - object2->SetName("object2"); - - std::string name1; - object1->GetName(StringRecorder(&name1)); - - std::string name2; - object2->GetName(StringRecorder(&name2)); - - PumpMessages(); // Yield for results. - - EXPECT_EQ(std::string("object1"), name1); - EXPECT_EQ(std::string("object2"), name2); -} - -} // namespace -} // namespace test -} // namespace mojo |