// Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef SHILL_MOCK_WIMAX_NETWORK_PROXY_H_
#define SHILL_MOCK_WIMAX_NETWORK_PROXY_H_

#include <string>

#include <gmock/gmock.h>

#include "shill/wimax_network_proxy_interface.h"

namespace shill {

class MockWiMaxNetworkProxy : public WiMaxNetworkProxyInterface {
 public:
  MockWiMaxNetworkProxy();
  ~MockWiMaxNetworkProxy() override;

  MOCK_CONST_METHOD0(path, RpcIdentifier());
  MOCK_METHOD1(set_signal_strength_changed_callback,
               void(const SignalStrengthChangedCallback &callback));
  MOCK_METHOD1(Identifier, uint32_t(Error *error));
  MOCK_METHOD1(Name, std::string(Error *error));
  MOCK_METHOD1(Type, int(Error *error));
  MOCK_METHOD1(CINR, int(Error *error));
  MOCK_METHOD1(RSSI, int(Error *error));
  MOCK_METHOD1(SignalStrength, int(Error *error));

 private:
  DISALLOW_COPY_AND_ASSIGN(MockWiMaxNetworkProxy);
};

}  // namespace shill

#endif  // SHILL_MOCK_WIMAX_NETWORK_PROXY_H_
