1// Copyright 2014 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "third_party/libaddressinput/chromium/fallback_data_store.h"
6
7#include <cstddef>
8#include <ctime>
9#include <string>
10
11#include "testing/gtest/include/gtest/gtest.h"
12#include "third_party/libaddressinput/src/cpp/src/util/json.h"
13#include "third_party/libaddressinput/src/cpp/src/validating_util.h"
14
15namespace autofill {
16
17using i18n::addressinput::Json;
18using i18n::addressinput::ValidatingUtil;
19
20TEST(FallbackDataStore, Parsability) {
21  std::string data;
22  ASSERT_TRUE(FallbackDataStore::Get("data/US", &data));
23
24  // Should be stale.
25  EXPECT_FALSE(ValidatingUtil::UnwrapTimestamp(&data, time(NULL)));
26
27  // Should be uncorrupted.
28  EXPECT_TRUE(ValidatingUtil::UnwrapChecksum(&data));
29
30  // Should be valid JSON.
31  Json json;
32  ASSERT_TRUE(json.ParseObject(data));
33
34  // Should not have a string for "data/US", because "data/US" is a dictionary.
35  std::string value;
36  EXPECT_FALSE(json.GetStringValueForKey("data/US", &value));
37
38  // Should have a dictionary with "data/US" identifier.
39  const std::vector<const Json*>& sub_dicts = json.GetSubDictionaries();
40  bool key_found = false;
41  for (std::vector<const Json*>::const_iterator it = sub_dicts.begin();
42       it != sub_dicts.end(); ++it) {
43    const Json* sub_dict = *it;
44    EXPECT_TRUE(sub_dict->GetStringValueForKey("id", &value));
45    key_found |= value == "data/US";
46  }
47  EXPECT_TRUE(key_found);
48}
49
50}  // namespace autofill
51