1// Copyright 2014 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 EXTENSIONS_BROWSER_VALUE_STORE_TESTING_VALUE_STORE_H_
6#define EXTENSIONS_BROWSER_VALUE_STORE_TESTING_VALUE_STORE_H_
7
8#include "base/compiler_specific.h"
9#include "extensions/browser/value_store/value_store.h"
10
11// ValueStore for testing, with an in-memory storage but the ability to
12// optionally fail all operations.
13class TestingValueStore : public ValueStore {
14 public:
15  TestingValueStore();
16  virtual ~TestingValueStore();
17
18  // Sets the error code for requests. If OK, errors won't be thrown.
19  // Defaults to OK.
20  void set_error_code(ErrorCode error_code) { error_code_ = error_code; }
21
22  // Accessors for the number of reads/writes done by this value store. Each
23  // Get* operation (except for the BytesInUse ones) counts as one read, and
24  // each Set*/Remove/Clear operation counts as one write. This is useful in
25  // tests seeking to assert that some number of reads/writes to their
26  // underlying value store have (or have not) happened.
27  int read_count() { return read_count_; }
28  int write_count() { return write_count_; }
29
30  // ValueStore implementation.
31  virtual size_t GetBytesInUse(const std::string& key) OVERRIDE;
32  virtual size_t GetBytesInUse(const std::vector<std::string>& keys) OVERRIDE;
33  virtual size_t GetBytesInUse() OVERRIDE;
34  virtual ReadResult Get(const std::string& key) OVERRIDE;
35  virtual ReadResult Get(const std::vector<std::string>& keys) OVERRIDE;
36  virtual ReadResult Get() OVERRIDE;
37  virtual WriteResult Set(
38      WriteOptions options,
39      const std::string& key,
40      const base::Value& value) OVERRIDE;
41  virtual WriteResult Set(
42      WriteOptions options, const base::DictionaryValue& values) OVERRIDE;
43  virtual WriteResult Remove(const std::string& key) OVERRIDE;
44  virtual WriteResult Remove(const std::vector<std::string>& keys) OVERRIDE;
45  virtual WriteResult Clear() OVERRIDE;
46  // TestingValueStores can't get corrupted (they're all in-memory), so these
47  // just return true.
48  virtual bool Restore() OVERRIDE;
49  virtual bool RestoreKey(const std::string& key) OVERRIDE;
50
51 private:
52  scoped_ptr<ValueStore::Error> TestingError();
53
54  base::DictionaryValue storage_;
55  int read_count_;
56  int write_count_;
57  ErrorCode error_code_;
58
59  DISALLOW_COPY_AND_ASSIGN(TestingValueStore);
60};
61
62#endif  // EXTENSIONS_BROWSER_VALUE_STORE_TESTING_VALUE_STORE_H_
63