18bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Copyright (C) 2013 Google Inc. 28bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 38bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Licensed under the Apache License, Version 2.0 (the "License"); 48bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// you may not use this file except in compliance with the License. 58bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// You may obtain a copy of the License at 68bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 78bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// http://www.apache.org/licenses/LICENSE-2.0 88bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// 98bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Unless required by applicable law or agreed to in writing, software 108bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// distributed under the License is distributed on an "AS IS" BASIS, 118bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// See the License for the specific language governing permissions and 138bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// limitations under the License. 148bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 158bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include "rule_retriever.h" 168bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 178bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <libaddressinput/callback.h> 1867f01494086ea1bb094aab46d1e25cb31bde6fedroubert@google.com#include <libaddressinput/null_storage.h> 198a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.org#include <libaddressinput/util/basictypes.h> 208bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <libaddressinput/util/scoped_ptr.h> 218bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 228bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <string> 238bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 248bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include <gtest/gtest.h> 258bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 268bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include "retriever.h" 278bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org#include "rule.h" 288466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com#include "testdata_source.h" 298bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 308bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgnamespace { 318bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 328d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.comusing i18n::addressinput::BuildCallback; 3367f01494086ea1bb094aab46d1e25cb31bde6fedroubert@google.comusing i18n::addressinput::NullStorage; 348bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgusing i18n::addressinput::Retriever; 358bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgusing i18n::addressinput::Rule; 368bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgusing i18n::addressinput::RuleRetriever; 378bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgusing i18n::addressinput::scoped_ptr; 388466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.comusing i18n::addressinput::TestdataSource; 398bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 408bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org// Tests for RuleRetriever object. 418bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgclass RuleRetrieverTest : public testing::Test { 428bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org protected: 438bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org RuleRetrieverTest() 448466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com : rule_retriever_( 458466869ca5e66ec41d133c8ca2f25789028ef4dfroubert@google.com new Retriever(new TestdataSource(false), new NullStorage)), 468bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org success_(false), 478bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org key_(), 488d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com rule_(), 498d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com rule_ready_(BuildCallback(this, &RuleRetrieverTest::OnRuleReady)) {} 508bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 518bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org RuleRetriever rule_retriever_; 528bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org bool success_; 538bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org std::string key_; 548bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org Rule rule_; 558d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com const scoped_ptr<const RuleRetriever::Callback> rule_ready_; 568bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 578bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org private: 588bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org void OnRuleReady(bool success, 598bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org const std::string& key, 608bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org const Rule& rule) { 618bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org success_ = success; 628bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org key_ = key; 638bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org rule_.CopyFrom(rule); 648bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org } 658a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.org 668a5ea9e2e8b5642281fa679b70266b80a4bf039drouslan@chromium.org DISALLOW_COPY_AND_ASSIGN(RuleRetrieverTest); 678bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org}; 688bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 698bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgTEST_F(RuleRetrieverTest, ExistingRule) { 708bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org static const char kExistingKey[] = "data/CA"; 718bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 728d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com rule_retriever_.RetrieveRule(kExistingKey, *rule_ready_); 738bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 748bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org EXPECT_TRUE(success_); 758bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org EXPECT_EQ(kExistingKey, key_); 768bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org EXPECT_FALSE(rule_.GetFormat().empty()); 778bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org} 788bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 798bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.orgTEST_F(RuleRetrieverTest, MissingRule) { 808bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org static const char kMissingKey[] = "junk"; 818bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 828d5e607f6355dea4794867bcc9e74c43d5ba1ca4roubert@google.com rule_retriever_.RetrieveRule(kMissingKey, *rule_ready_); 838bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 848bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org EXPECT_TRUE(success_); // The server returns "{}" for bad keys. 858bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org EXPECT_EQ(kMissingKey, key_); 868bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org EXPECT_TRUE(rule_.GetFormat().empty()); 878bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org} 888bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org 898bf87347006db64c826fcbd4e14c93710a99f4f6rouslan@chromium.org} // namespace 90