1ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// Copyright (C) 2013 Google Inc.
2ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org//
3ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License");
4ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// you may not use this file except in compliance with the License.
5ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// You may obtain a copy of the License at
6ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org//
7ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0
8ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org//
9ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// Unless required by applicable law or agreed to in writing, software
10ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS,
11ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// See the License for the specific language governing permissions and
13ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// limitations under the License.
14ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
15ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org#include "fake_storage.h"
16ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
17ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org#include <libaddressinput/callback.h>
18ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org#include <libaddressinput/storage.h>
198a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.org#include <libaddressinput/util/basictypes.h>
20ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org#include <libaddressinput/util/scoped_ptr.h>
21ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
22128ae075bbf50996c1068740746f27430f89136droubert@google.com#include <cstddef>
23ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org#include <string>
24ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
25ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org#include <gtest/gtest.h>
26ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
27ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgnamespace {
28ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
298d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.comusing i18n::addressinput::BuildCallback;
30ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgusing i18n::addressinput::FakeStorage;
31ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgusing i18n::addressinput::scoped_ptr;
32ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgusing i18n::addressinput::Storage;
33ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
34ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org// Tests for FakeStorage object.
35ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgclass FakeStorageTest : public testing::Test {
36ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org protected:
378d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com  FakeStorageTest()
388d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com      : storage_(),
398d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com        success_(false),
408d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com        key_(),
418d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com        data_(),
428d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com        data_ready_(BuildCallback(this, &FakeStorageTest::OnDataReady)) {}
43ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
44ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  FakeStorage storage_;
45ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  bool success_;
46ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  std::string key_;
47ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  std::string data_;
488d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com  const scoped_ptr<const Storage::Callback> data_ready_;
49ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
50ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org private:
518466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com  void OnDataReady(bool success, const std::string& key, std::string* data) {
52128ae075bbf50996c1068740746f27430f89136droubert@google.com    ASSERT_FALSE(success && data == NULL);
53ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org    success_ = success;
54ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org    key_ = key;
55128ae075bbf50996c1068740746f27430f89136droubert@google.com    if (data != NULL) {
56128ae075bbf50996c1068740746f27430f89136droubert@google.com      data_ = *data;
57128ae075bbf50996c1068740746f27430f89136droubert@google.com      delete data;
58128ae075bbf50996c1068740746f27430f89136droubert@google.com    }
59ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  }
608a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.org
618a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.org  DISALLOW_COPY_AND_ASSIGN(FakeStorageTest);
62ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org};
63ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
64ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgTEST_F(FakeStorageTest, GetWithoutPutReturnsEmptyData) {
658d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com  storage_.Get("key", *data_ready_);
66ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
67ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_FALSE(success_);
68ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_EQ("key", key_);
69ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_TRUE(data_.empty());
70ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org}
71ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
72ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgTEST_F(FakeStorageTest, GetReturnsWhatWasPut) {
73128ae075bbf50996c1068740746f27430f89136droubert@google.com  storage_.Put("key", new std::string("value"));
748d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com  storage_.Get("key", *data_ready_);
75ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
76ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_TRUE(success_);
77ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_EQ("key", key_);
78ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_EQ("value", data_);
79ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org}
80ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
81ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.orgTEST_F(FakeStorageTest, SecondPutOverwritesData) {
82128ae075bbf50996c1068740746f27430f89136droubert@google.com  storage_.Put("key", new std::string("bad-value"));
83128ae075bbf50996c1068740746f27430f89136droubert@google.com  storage_.Put("key", new std::string("good-value"));
848d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com  storage_.Get("key", *data_ready_);
85ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
86ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_TRUE(success_);
87ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_EQ("key", key_);
88ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org  EXPECT_EQ("good-value", data_);
89ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org}
90ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org
91ab0058a1b2ede70adda394e46be31f114fb70abdrouslan@chromium.org}  // namespace
92