// 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.

#include "shill/mock_cellular.h"

#include <gmock/gmock.h>

#include "shill/error.h"

namespace shill {

// TODO(rochberg): The cellular constructor does work.  Ought to fix
// this so that we don't depend on passing real values in for Type.

MockCellular::MockCellular(ModemInfo *modem_info,
                           const std::string &link_name,
                           const std::string &address,
                           int interface_index,
                           Type type,
                           const std::string &owner,
                           const std::string &service,
                           const std::string &path,
                           ProxyFactory *proxy_factory)
    : Cellular(modem_info, link_name, address, interface_index, type, owner,
               service, path, proxy_factory) {}

MockCellular::~MockCellular() {}

}  // namespace shill
