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