1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 #ifndef MOJO_PUBLIC_CPP_BINDINGS_TESTS_BINDINGS_TEST_BASE_H_
6 #define MOJO_PUBLIC_CPP_BINDINGS_TESTS_BINDINGS_TEST_BASE_H_
7 
8 #include "base/test/scoped_task_environment.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace mojo {
12 
13 // Used to parameterize tests which inherit from BindingsTestBase to exercise
14 // various message serialization-related code paths for intra-process bindings
15 // usage.
16 enum class BindingsTestSerializationMode {
17   // Messages should be serialized immediately before sending.
18   kSerializeBeforeSend,
19 
20   // Messages should be serialized immediately before dispatching.
21   kSerializeBeforeDispatch,
22 
23   // Messages should never be serialized.
24   kNeverSerialize,
25 };
26 
27 class BindingsTestBase
28     : public testing::Test,
29       public testing::WithParamInterface<BindingsTestSerializationMode> {
30  public:
31   BindingsTestBase();
32   ~BindingsTestBase();
33 
34   // Helper which other test fixtures can use.
35   static void SetupSerializationBehavior(BindingsTestSerializationMode mode);
36 
37  private:
38   base::test::ScopedTaskEnvironment task_environment_;
39 };
40 
41 }  // namespace mojo
42 
43 #define INSTANTIATE_MOJO_BINDINGS_TEST_CASE_P(fixture)                   \
44   INSTANTIATE_TEST_CASE_P(                                               \
45       , fixture,                                                         \
46       testing::Values(                                                   \
47           mojo::BindingsTestSerializationMode::kSerializeBeforeSend,     \
48           mojo::BindingsTestSerializationMode::kSerializeBeforeDispatch, \
49           mojo::BindingsTestSerializationMode::kNeverSerialize))
50 
51 #endif  // MOJO_PUBLIC_CPP_BINDINGS_TESTS_BINDINGS_TEST_BASE_H_
52