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