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