InitializeProperties and GetObjectProxy support for mocks

- Add missing InitializeProperties mock method.
- Expose GetObjectProxy via the interface and mock.

BUG=None
TEST=unit tests, tested proxies on whirlwind.

Change-Id: I69f1d141e589de07cd04199d332b9b6c2b5e7fc4
Reviewed-on: https://chromium-review.googlesource.com/389855
Commit-Ready: Christopher Book <cbook@chromium.org>
Tested-by: Christopher Book <cbook@chromium.org>
Reviewed-by: Dan Erat <derat@chromium.org>
diff --git a/chromeos-dbus-bindings/proxy_generator.cc b/chromeos-dbus-bindings/proxy_generator.cc
index 7f41eee..1ac7139 100644
--- a/chromeos-dbus-bindings/proxy_generator.cc
+++ b/chromeos-dbus-bindings/proxy_generator.cc
@@ -214,6 +214,7 @@
   AddProperties(interface, true, text);
   text->AddBlankLine();
   text->AddLine("virtual const dbus::ObjectPath& GetObjectPath() const = 0;");
+  text->AddLine("virtual dbus::ObjectProxy* GetObjectProxy() const = 0;");
   if (!interface.properties.empty()) {
     if (config.object_manager.name.empty())
       AddInitializeProperties(proxy_name, true, text);
@@ -363,13 +364,24 @@
   }
   text->AddLine(
       "MOCK_CONST_METHOD0(GetObjectPath, const dbus::ObjectPath&());");
-  if (!config.object_manager.name.empty() && !interface.properties.empty()) {
-    text->AddLineAndPushOffsetTo(
-        "MOCK_METHOD1(SetPropertyChangedCallback,", 1, '(');
-    text->AddLine(StringPrintf(
-        "void(const base::Callback<void(%sInterface*, const std::string&)>&));",
-        proxy_name.c_str()));
-    text->PopOffset();
+  text->AddLine(
+      "MOCK_CONST_METHOD0(GetObjectProxy, dbus::ObjectProxy*());");
+  if (!interface.properties.empty()) {
+    if (config.object_manager.name.empty()) {
+      text->AddLineAndPushOffsetTo(
+          "MOCK_METHOD1(InitializeProperties,", 1, '(');
+      text->AddLine(StringPrintf(
+          "void(const base::Callback<void(%sInterface*, "
+          "const std::string&)>&));", proxy_name.c_str()));
+      text->PopOffset();
+    } else {
+      text->AddLineAndPushOffsetTo(
+          "MOCK_METHOD1(SetPropertyChangedCallback,", 1, '(');
+      text->AddLine(StringPrintf("void(const base::Callback<void(%sInterface*, "
+                                 "const std::string&)>&));",
+                                 proxy_name.c_str()));
+      text->PopOffset();
+    }
   }
 
   text->PopOffset();
@@ -456,8 +468,9 @@
 // static
 void ProxyGenerator::AddGetObjectProxy(IndentedText* text) {
   text->AddBlankLine();
-  text->AddLine("dbus::ObjectProxy* GetObjectProxy() const { "
-                "return dbus_object_proxy_; }");
+  text->AddLine("dbus::ObjectProxy* GetObjectProxy() const override {");
+  text->AddLineWithOffset("return dbus_object_proxy_;", kBlockOffset);
+  text->AddLine("}");
 }
 
 // static
diff --git a/chromeos-dbus-bindings/proxy_generator_mock_unittest.cc b/chromeos-dbus-bindings/proxy_generator_mock_unittest.cc
index c71d1b0..d23710b 100644
--- a/chromeos-dbus-bindings/proxy_generator_mock_unittest.cc
+++ b/chromeos-dbus-bindings/proxy_generator_mock_unittest.cc
@@ -124,6 +124,7 @@
                                               uint8_t)>& /*signal_callback*/,
                     dbus::ObjectProxy::OnConnectedCallback /*on_connected_callback*/));
   MOCK_CONST_METHOD0(GetObjectPath, const dbus::ObjectPath&());
+  MOCK_CONST_METHOD0(GetObjectProxy, dbus::ObjectProxy*());
 
  private:
   DISALLOW_COPY_AND_ASSIGN(TestInterfaceProxyMock);
@@ -152,6 +153,7 @@
   MOCK_CONST_METHOD0(name, const std::string&());
   MOCK_METHOD2(set_name, void(const std::string&, const base::Callback<bool>&));
   MOCK_CONST_METHOD0(GetObjectPath, const dbus::ObjectPath&());
+  MOCK_CONST_METHOD0(GetObjectProxy, dbus::ObjectProxy*());
   MOCK_METHOD1(SetPropertyChangedCallback,
                void(const base::Callback<void(TestInterface2ProxyInterface*, const std::string&)>&));
 
diff --git a/chromeos-dbus-bindings/proxy_generator_unittest.cc b/chromeos-dbus-bindings/proxy_generator_unittest.cc
index 8e3c0f0..1b60ba4 100644
--- a/chromeos-dbus-bindings/proxy_generator_unittest.cc
+++ b/chromeos-dbus-bindings/proxy_generator_unittest.cc
@@ -119,6 +119,7 @@
       dbus::ObjectProxy::OnConnectedCallback on_connected_callback) = 0;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -173,7 +174,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
   bool Elements(
       const std::string& in_space_walk,
@@ -329,6 +332,7 @@
       int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) = 0;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -362,7 +366,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
   bool GetPersonInfo(
       std::string* out_name,
@@ -440,6 +446,7 @@
       dbus::ObjectProxy::OnConnectedCallback on_connected_callback) = 0;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -479,7 +486,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
  private:
   scoped_refptr<dbus::Bus> bus_;
@@ -502,6 +511,7 @@
   virtual ~TestInterface2ProxyInterface() = default;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -533,7 +543,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
  private:
   scoped_refptr<dbus::Bus> bus_;
@@ -596,6 +608,7 @@
                         const base::Callback<void(bool)>& callback) = 0;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 
   virtual void SetPropertyChangedCallback(
       const base::Callback<void(Itf1ProxyInterface*, const std::string&)>& callback) = 0;
@@ -661,7 +674,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
   void SetPropertyChangedCallback(
       const base::Callback<void(Itf1ProxyInterface*, const std::string&)>& callback) override {
@@ -713,6 +728,7 @@
   virtual ~Itf2ProxyInterface() = default;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -760,7 +776,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
  private:
   scoped_refptr<dbus::Bus> bus_;
@@ -990,6 +1008,7 @@
                         const base::Callback<void(bool)>& callback) = 0;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 
   virtual void InitializeProperties(
       const base::Callback<void(TestProxyInterface*, const std::string&)>& callback) = 0;
@@ -1039,7 +1058,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
   void InitializeProperties(
       const base::Callback<void(TestProxyInterface*, const std::string&)>& callback) override {
@@ -1120,6 +1141,7 @@
       dbus::ObjectProxy::OnConnectedCallback on_connected_callback) = 0;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -1173,7 +1195,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
  private:
   scoped_refptr<dbus::Bus> bus_;
@@ -1196,6 +1220,7 @@
   virtual ~Itf2ProxyInterface() = default;
 
   virtual const dbus::ObjectPath& GetObjectPath() const = 0;
+  virtual dbus::ObjectProxy* GetObjectProxy() const = 0;
 };
 
 }  // namespace chromium
@@ -1241,7 +1266,9 @@
     return object_path_;
   }
 
-  dbus::ObjectProxy* GetObjectProxy() const { return dbus_object_proxy_; }
+  dbus::ObjectProxy* GetObjectProxy() const override {
+    return dbus_object_proxy_;
+  }
 
  private:
   scoped_refptr<dbus::Bus> bus_;