// Copyright (c) 2011 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_PROPERTY_STORE_UNITTEST_H_
#define SHILL_PROPERTY_STORE_UNITTEST_H_

#include <map>
#include <string>
#include <vector>

#include <base/memory/scoped_temp_dir.h>
#include <dbus-c++/dbus.h>
#include <gmock/gmock.h>
#include <gtest/gtest.h>

#include "shill/dbus_adaptor.h"
#include "shill/error.h"
#include "shill/manager.h"
#include "shill/mock_control.h"
#include "shill/mock_glib.h"
#include "shill/property_store.h"
#include "shill/shill_event.h"

namespace shill {

class PropertyStoreTest : public testing::TestWithParam< ::DBus::Variant > {
 public:
  // In real code, it's frowned upon to have non-POD static members, as there
  // can be ordering issues if your constructors have side effects.
  // These constructors don't, and declaring these as static lets me
  // autogenerate a bunch of unit test code that I would otherwise need to
  // copypasta.  So I think it's safe and worth it.
  static const ::DBus::Variant kBoolV;
  static const ::DBus::Variant kByteV;
  static const ::DBus::Variant kInt16V;
  static const ::DBus::Variant kInt32V;
  static const ::DBus::Variant kStringV;
  static const ::DBus::Variant kStringmapV;
  static const ::DBus::Variant kStringmapsV;
  static const ::DBus::Variant kStringsV;
  static const ::DBus::Variant kStrIntPairV;
  static const ::DBus::Variant kUint16V;
  static const ::DBus::Variant kUint32V;

  PropertyStoreTest();
  virtual ~PropertyStoreTest();

 protected:
  ScopedTempDir run_dir_;
  ScopedTempDir storage_dir_;
  MockControl control_interface_;
  EventDispatcher dispatcher_;
  Manager manager_;
  MockGLib glib_;
  std::string invalid_args_;
  std::string invalid_prop_;
};

}  // namespace shill
#endif  // SHILL_PROPERTY_STORE_UNITTEST_H_
