aboutsummaryrefslogtreecommitdiff
path: root/cpp/test/fake_downloader_test.cc
diff options
context:
space:
mode:
authorAndroid Chromium Automerger <chromium-automerger@android>2014-06-16 14:44:22 +0000
committerAndroid Chromium Automerger <chromium-automerger@android>2014-06-16 14:44:22 +0000
commit4e065f4283db7f3b540a0d89857ef87d8400da35 (patch)
tree39ace770b394b411d5e3a4ca500462df60ed1209 /cpp/test/fake_downloader_test.cc
parentbe7edd6e608768a423c246f9f13c632349a31c5f (diff)
parent1cc079798198a961e938b74e573588986afdca3b (diff)
downloadsrc-4e065f4283db7f3b540a0d89857ef87d8400da35.tar.gz
Merge third_party/libaddressinput/src from https://chromium.googlesource.com/external/libaddressinput.git at 1cc079798198a961e938b74e573588986afdca3b
This commit was generated by merge_from_chromium.py. Change-Id: Ief2f36f1e9dfbac8319d3500b0c000685c9e345d
Diffstat (limited to 'cpp/test/fake_downloader_test.cc')
-rw-r--r--cpp/test/fake_downloader_test.cc205
1 files changed, 205 insertions, 0 deletions
diff --git a/cpp/test/fake_downloader_test.cc b/cpp/test/fake_downloader_test.cc
new file mode 100644
index 0000000..477a462
--- /dev/null
+++ b/cpp/test/fake_downloader_test.cc
@@ -0,0 +1,205 @@
+// Copyright (C) 2013 Google Inc.
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+#include "fake_downloader.h"
+
+#include <libaddressinput/callback.h>
+#include <libaddressinput/downloader.h>
+#include <libaddressinput/util/scoped_ptr.h>
+
+#include <string>
+
+#include <gtest/gtest.h>
+
+#include "region_data_constants.h"
+
+namespace {
+
+using i18n::addressinput::BuildCallback;
+using i18n::addressinput::Downloader;
+using i18n::addressinput::FakeDownloader;
+using i18n::addressinput::RegionDataConstants;
+using i18n::addressinput::scoped_ptr;
+
+// Tests for FakeDownloader object.
+class FakeDownloaderTest : public testing::TestWithParam<std::string> {
+ protected:
+ FakeDownloaderTest() : downloader_(), success_(false), url_(), data_() {}
+ virtual ~FakeDownloaderTest() {}
+
+ Downloader::Callback* BuildCallback() {
+ return ::BuildCallback(this, &FakeDownloaderTest::OnDownloaded);
+ }
+
+ FakeDownloader downloader_;
+ bool success_;
+ std::string url_;
+ std::string data_;
+
+ private:
+ void OnDownloaded(bool success,
+ const std::string& url,
+ const std::string& data) {
+ success_ = success;
+ url_ = url;
+ data_ = data;
+ }
+};
+
+// Returns testing::AssertionSuccess if |data| is valid downloaded data for
+// |key|.
+testing::AssertionResult DataIsValid(const std::string& data,
+ const std::string& key) {
+ if (data.empty()) {
+ return testing::AssertionFailure() << "empty data";
+ }
+
+ std::string expected_data_begin = "{\"id\":\"" + key + "\"";
+ if (data.compare(0, expected_data_begin.length(), expected_data_begin) != 0) {
+ return testing::AssertionFailure() << data << " does not begin with "
+ << expected_data_begin;
+ }
+
+ // Verify that the data ends on "}.
+ static const char kDataEnd[] = "\"}";
+ static const size_t kDataEndLength = sizeof kDataEnd - 1;
+ if (data.compare(data.length() - kDataEndLength,
+ kDataEndLength,
+ kDataEnd,
+ kDataEndLength) != 0) {
+ return testing::AssertionFailure() << data << " does not end with "
+ << kDataEnd;
+ }
+
+ return testing::AssertionSuccess();
+}
+
+// Verifies that FakeDownloader downloads valid data for a region code.
+TEST_P(FakeDownloaderTest, FakeDownloaderHasValidDataForRegion) {
+ std::string key = "data/" + GetParam();
+ std::string url = std::string(FakeDownloader::kFakeDataUrl) + key;
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(url, *callback);
+
+ EXPECT_TRUE(success_);
+ EXPECT_EQ(url, url_);
+ EXPECT_TRUE(DataIsValid(data_, key));
+};
+
+// Returns testing::AssertionSuccess if |data| is valid aggregated downloaded
+// data for |key|.
+testing::AssertionResult AggregateDataIsValid(const std::string& data,
+ const std::string& key) {
+ if (data.empty()) {
+ return testing::AssertionFailure() << "empty data";
+ }
+
+ std::string expected_data_begin = "{\"" + key;
+ if (data.compare(0, expected_data_begin.length(), expected_data_begin) != 0) {
+ return testing::AssertionFailure() << data << " does not begin with "
+ << expected_data_begin;
+ }
+
+ // Verify that the data ends on "}}.
+ static const char kDataEnd[] = "\"}}";
+ static const size_t kDataEndLength = sizeof kDataEnd - 1;
+ if (data.compare(data.length() - kDataEndLength,
+ kDataEndLength,
+ kDataEnd,
+ kDataEndLength) != 0) {
+ return testing::AssertionFailure() << data << " does not end with "
+ << kDataEnd;
+ }
+
+ return testing::AssertionSuccess();
+}
+
+// Verifies that FakeDownloader downloads valid aggregated data for a region
+// code.
+TEST_P(FakeDownloaderTest, FakeDownloaderHasValidAggregatedDataForRegion) {
+ std::string key = "data/" + GetParam();
+ std::string url = std::string(FakeDownloader::kFakeAggregateDataUrl) + key;
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(url, *callback);
+
+ EXPECT_TRUE(success_);
+ EXPECT_EQ(url, url_);
+ EXPECT_TRUE(AggregateDataIsValid(data_, key));
+};
+
+// Test all region codes.
+INSTANTIATE_TEST_CASE_P(
+ AllRegions, FakeDownloaderTest,
+ testing::ValuesIn(RegionDataConstants::GetRegionCodes()));
+
+// Verifies that the key "data" also contains valid data.
+TEST_F(FakeDownloaderTest, DownloadExistingData) {
+ static const std::string kKey = "data";
+ static const std::string kUrl =
+ std::string(FakeDownloader::kFakeDataUrl) + kKey;
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(kUrl, *callback);
+
+ EXPECT_TRUE(success_);
+ EXPECT_EQ(kUrl, url_);
+ EXPECT_TRUE(DataIsValid(data_, kKey));
+}
+
+// Verifies that downloading a missing key will return "{}".
+TEST_F(FakeDownloaderTest, DownloadMissingKeyReturnsEmptyDictionary) {
+ static const std::string kJunkUrl =
+ std::string(FakeDownloader::kFakeDataUrl) + "junk";
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(kJunkUrl, *callback);
+
+ EXPECT_TRUE(success_);
+ EXPECT_EQ(kJunkUrl, url_);
+ EXPECT_EQ("{}", data_);
+}
+
+// Verifies that aggregate downloading of a missing key will also return "{}".
+TEST_F(FakeDownloaderTest, AggregateDownloadMissingKeyReturnsEmptyDictionary) {
+ static const std::string kJunkUrl =
+ std::string(FakeDownloader::kFakeAggregateDataUrl) + "junk";
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(kJunkUrl, *callback);
+
+ EXPECT_TRUE(success_);
+ EXPECT_EQ(kJunkUrl, url_);
+ EXPECT_EQ("{}", data_);
+}
+
+// Verifies that downloading an empty key will return "{}".
+TEST_F(FakeDownloaderTest, DownloadEmptyKeyReturnsEmptyDictionary) {
+ static const std::string kPrefixOnlyUrl = FakeDownloader::kFakeDataUrl;
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(kPrefixOnlyUrl, *callback);
+
+ EXPECT_TRUE(success_);
+ EXPECT_EQ(kPrefixOnlyUrl, url_);
+ EXPECT_EQ("{}", data_);
+}
+
+// Verifies that downloading a real URL fails.
+TEST_F(FakeDownloaderTest, DownloadRealUrlFals) {
+ static const std::string kRealUrl = "http://www.google.com/";
+ scoped_ptr<Downloader::Callback> callback(BuildCallback());
+ downloader_.Download(kRealUrl, *callback);
+
+ EXPECT_FALSE(success_);
+ EXPECT_EQ(kRealUrl, url_);
+ EXPECT_TRUE(data_.empty());
+}
+
+} // namespace